Theme v2 (#1455)
This commit is contained in:
commit
0543dd7441
17 changed files with 998 additions and 941 deletions
|
|
@ -245,38 +245,49 @@ impl cosmic::Application for App {
|
|||
if let Some(popup_id) = self.popup.take() {
|
||||
cmds.push(destroy_popup(popup_id));
|
||||
}
|
||||
let popup_id = self.next_popup_id();
|
||||
let i = self.menus.keys().position(|&i| i == id).unwrap();
|
||||
let (i, parent) = self
|
||||
.overflow_index()
|
||||
.and_then(|overflow_i| {
|
||||
if overflow_i <= i {
|
||||
Some(i - overflow_i).zip(self.overflow_popup)
|
||||
} else {
|
||||
Some((i, self.core.main_window_id().unwrap()))
|
||||
}
|
||||
})
|
||||
.unwrap_or((i, self.core.main_window_id().unwrap()));
|
||||
|
||||
let mut popup_settings = self
|
||||
.core
|
||||
.applet
|
||||
.get_popup_settings(parent, popup_id, None, None, None);
|
||||
self.popup = Some(popup_id);
|
||||
let popup_task =
|
||||
cosmic::surface::surface_task(cosmic::surface::action::app_popup(
|
||||
|_| Default::default(),
|
||||
move |app: &mut Self| {
|
||||
let popup_id = app.next_popup_id();
|
||||
let i = app.menus.keys().position(|&i| i == id).unwrap();
|
||||
let (i, parent) = app
|
||||
.overflow_index()
|
||||
.and_then(|overflow_i| {
|
||||
if overflow_i <= i {
|
||||
Some(i - overflow_i).zip(app.overflow_popup)
|
||||
} else {
|
||||
Some((i, app.core.main_window_id().unwrap()))
|
||||
}
|
||||
})
|
||||
.unwrap_or((i, app.core.main_window_id().unwrap()));
|
||||
|
||||
if matches!(
|
||||
self.core.applet.anchor,
|
||||
PanelAnchor::Left | PanelAnchor::Right
|
||||
) {
|
||||
let suggested_size = self.core.applet.suggested_size(false).1
|
||||
+ 2 * self.core.applet.suggested_padding(false).1;
|
||||
popup_settings.positioner.anchor_rect.y = i as i32 * suggested_size as i32;
|
||||
} else {
|
||||
let suggested_size = self.core.applet.suggested_size(false).0
|
||||
+ 2 * self.core.applet.suggested_padding(false).1;
|
||||
popup_settings.positioner.anchor_rect.x = i as i32 * suggested_size as i32;
|
||||
}
|
||||
cmds.push(get_popup(popup_settings));
|
||||
let mut popup_settings = app
|
||||
.core
|
||||
.applet
|
||||
.get_popup_settings(parent, popup_id, None, None, None);
|
||||
app.popup = Some(popup_id);
|
||||
|
||||
if matches!(
|
||||
app.core.applet.anchor,
|
||||
PanelAnchor::Left | PanelAnchor::Right
|
||||
) {
|
||||
let suggested_size = app.core.applet.suggested_size(false).1
|
||||
+ 2 * app.core.applet.suggested_padding(false).1;
|
||||
popup_settings.positioner.anchor_rect.y =
|
||||
i as i32 * suggested_size as i32;
|
||||
} else {
|
||||
let suggested_size = app.core.applet.suggested_size(false).0
|
||||
+ 2 * app.core.applet.suggested_padding(false).1;
|
||||
popup_settings.positioner.anchor_rect.x =
|
||||
i as i32 * suggested_size as i32;
|
||||
}
|
||||
popup_settings
|
||||
},
|
||||
None,
|
||||
));
|
||||
cmds.push(popup_task);
|
||||
return app::Task::batch(cmds);
|
||||
} else if let Some(popup_id) = self.popup {
|
||||
self.menus[&id].closed();
|
||||
|
|
@ -338,39 +349,49 @@ impl cosmic::Application for App {
|
|||
} else {
|
||||
return Task::none();
|
||||
}
|
||||
let popup_id = self.next_popup_id();
|
||||
let i = self.menus.keys().position(|&i| i == id).unwrap();
|
||||
let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup(
|
||||
|_| Default::default(),
|
||||
move |app: &mut Self| {
|
||||
let popup_id = app.next_popup_id();
|
||||
let i = app.menus.keys().position(|&i| i == id).unwrap();
|
||||
|
||||
let (i, parent) = self
|
||||
.overflow_index()
|
||||
.and_then(|overflow_i| {
|
||||
if overflow_i <= i {
|
||||
Some(i - overflow_i).zip(self.overflow_popup)
|
||||
let (i, parent) = app
|
||||
.overflow_index()
|
||||
.and_then(|overflow_i| {
|
||||
if overflow_i <= i {
|
||||
Some(i - overflow_i).zip(app.overflow_popup)
|
||||
} else {
|
||||
Some((i, app.core.main_window_id().unwrap()))
|
||||
}
|
||||
})
|
||||
.unwrap_or((i, app.core.main_window_id().unwrap()));
|
||||
|
||||
let mut popup_settings = app
|
||||
.core
|
||||
.applet
|
||||
.get_popup_settings(parent, popup_id, None, None, None);
|
||||
app.popup = Some(popup_id);
|
||||
|
||||
if matches!(
|
||||
app.core.applet.anchor,
|
||||
PanelAnchor::Left | PanelAnchor::Right
|
||||
) {
|
||||
let suggested_size = app.core.applet.suggested_size(true).1
|
||||
+ 2 * app.core.applet.suggested_padding(true).1;
|
||||
popup_settings.positioner.anchor_rect.y =
|
||||
i as i32 * suggested_size as i32;
|
||||
} else {
|
||||
Some((i, self.core.main_window_id().unwrap()))
|
||||
let suggested_size = app.core.applet.suggested_size(true).0
|
||||
+ 2 * app.core.applet.suggested_padding(true).0;
|
||||
popup_settings.positioner.anchor_rect.x =
|
||||
i as i32 * suggested_size as i32;
|
||||
}
|
||||
})
|
||||
.unwrap_or((i, self.core.main_window_id().unwrap()));
|
||||
popup_settings
|
||||
},
|
||||
None,
|
||||
));
|
||||
cmds.push(popup_task);
|
||||
|
||||
let mut popup_settings = self
|
||||
.core
|
||||
.applet
|
||||
.get_popup_settings(parent, popup_id, None, None, None);
|
||||
self.popup = Some(popup_id);
|
||||
|
||||
if matches!(
|
||||
self.core.applet.anchor,
|
||||
PanelAnchor::Left | PanelAnchor::Right
|
||||
) {
|
||||
let suggested_size = self.core.applet.suggested_size(true).1
|
||||
+ 2 * self.core.applet.suggested_padding(true).1;
|
||||
popup_settings.positioner.anchor_rect.y = i as i32 * suggested_size as i32;
|
||||
} else {
|
||||
let suggested_size = self.core.applet.suggested_size(true).0
|
||||
+ 2 * self.core.applet.suggested_padding(true).0;
|
||||
popup_settings.positioner.anchor_rect.x = i as i32 * suggested_size as i32;
|
||||
}
|
||||
cmds.push(get_popup(popup_settings));
|
||||
Task::batch(cmds)
|
||||
}
|
||||
Msg::WheelScrolled(delta) => {
|
||||
|
|
@ -398,33 +419,41 @@ impl cosmic::Application for App {
|
|||
return destroy_popup(popup_id);
|
||||
} else if let Some(overflow_index) = self.overflow_index() {
|
||||
// If we don't have an overflow, create it
|
||||
let popup_id = self.next_popup_id();
|
||||
let mut popup_settings = self.core.applet.get_popup_settings(
|
||||
self.core.main_window_id().unwrap(),
|
||||
popup_id,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
popup_settings.close_with_children = false;
|
||||
let popup_task =
|
||||
cosmic::surface::surface_task(cosmic::surface::action::app_popup(
|
||||
|_| Default::default(),
|
||||
move |app: &mut Self| {
|
||||
let popup_id = app.next_popup_id();
|
||||
let mut popup_settings = app.core.applet.get_popup_settings(
|
||||
app.core.main_window_id().unwrap(),
|
||||
popup_id,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
popup_settings.close_with_children = false;
|
||||
|
||||
if matches!(
|
||||
self.core.applet.anchor,
|
||||
PanelAnchor::Left | PanelAnchor::Right
|
||||
) {
|
||||
let suggested_size = self.core.applet.suggested_size(true).1
|
||||
+ 2 * self.core.applet.suggested_padding(true).1;
|
||||
popup_settings.positioner.anchor_rect.y =
|
||||
overflow_index as i32 * suggested_size as i32;
|
||||
} else {
|
||||
let suggested_size = self.core.applet.suggested_size(true).0
|
||||
+ 2 * self.core.applet.suggested_padding(true).0;
|
||||
popup_settings.positioner.anchor_rect.x =
|
||||
overflow_index as i32 * suggested_size as i32;
|
||||
}
|
||||
if matches!(
|
||||
app.core.applet.anchor,
|
||||
PanelAnchor::Left | PanelAnchor::Right
|
||||
) {
|
||||
let suggested_size = app.core.applet.suggested_size(true).1
|
||||
+ 2 * app.core.applet.suggested_padding(true).1;
|
||||
popup_settings.positioner.anchor_rect.y =
|
||||
overflow_index as i32 * suggested_size as i32;
|
||||
} else {
|
||||
let suggested_size = app.core.applet.suggested_size(true).0
|
||||
+ 2 * app.core.applet.suggested_padding(true).0;
|
||||
popup_settings.positioner.anchor_rect.x =
|
||||
overflow_index as i32 * suggested_size as i32;
|
||||
}
|
||||
|
||||
self.overflow_popup = Some(popup_id);
|
||||
return get_popup(popup_settings);
|
||||
app.overflow_popup = Some(popup_id);
|
||||
popup_settings
|
||||
},
|
||||
None,
|
||||
));
|
||||
return popup_task;
|
||||
} else {
|
||||
return Task::none();
|
||||
}
|
||||
|
|
@ -443,34 +472,41 @@ impl cosmic::Application for App {
|
|||
} else {
|
||||
return Task::none();
|
||||
}
|
||||
|
||||
let popup_id = self.next_popup_id();
|
||||
let mut popup_settings = self.core.applet.get_popup_settings(
|
||||
self.core.main_window_id().unwrap(),
|
||||
popup_id,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
self.popup = Some(popup_id);
|
||||
|
||||
let Some(i) = self.overflow_index() else {
|
||||
return Task::batch(cmds);
|
||||
};
|
||||
let popup_task = cosmic::surface::surface_task(cosmic::surface::action::app_popup(
|
||||
|_| Default::default(),
|
||||
move |app: &mut Self| {
|
||||
let popup_id = app.next_popup_id();
|
||||
let mut popup_settings = app.core.applet.get_popup_settings(
|
||||
app.core.main_window_id().unwrap(),
|
||||
popup_id,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
app.popup = Some(popup_id);
|
||||
|
||||
if matches!(
|
||||
self.core.applet.anchor,
|
||||
PanelAnchor::Left | PanelAnchor::Right
|
||||
) {
|
||||
let suggested_size = self.core.applet.suggested_size(false).1
|
||||
+ 2 * self.core.applet.suggested_padding(false).1;
|
||||
popup_settings.positioner.anchor_rect.y = i as i32 * suggested_size as i32;
|
||||
} else {
|
||||
let suggested_size = self.core.applet.suggested_size(false).0
|
||||
+ 2 * self.core.applet.suggested_padding(false).1;
|
||||
popup_settings.positioner.anchor_rect.x = i as i32 * suggested_size as i32;
|
||||
}
|
||||
cmds.push(get_popup(popup_settings));
|
||||
if matches!(
|
||||
app.core.applet.anchor,
|
||||
PanelAnchor::Left | PanelAnchor::Right
|
||||
) {
|
||||
let suggested_size = app.core.applet.suggested_size(false).1
|
||||
+ 2 * app.core.applet.suggested_padding(false).1;
|
||||
popup_settings.positioner.anchor_rect.y =
|
||||
i as i32 * suggested_size as i32;
|
||||
} else {
|
||||
let suggested_size = app.core.applet.suggested_size(false).0
|
||||
+ 2 * app.core.applet.suggested_padding(false).1;
|
||||
popup_settings.positioner.anchor_rect.x =
|
||||
i as i32 * suggested_size as i32;
|
||||
}
|
||||
popup_settings
|
||||
},
|
||||
None,
|
||||
));
|
||||
cmds.push(popup_task);
|
||||
Task::batch(cmds)
|
||||
}
|
||||
}
|
||||
|
|
@ -655,7 +691,7 @@ fn menu_icon_button<'a>(
|
|||
.class(if symbolic {
|
||||
cosmic::theme::Svg::Custom(std::rc::Rc::new(|theme| {
|
||||
cosmic::iced::widget::svg::Style {
|
||||
color: Some(theme.cosmic().background.on.into()),
|
||||
color: Some(theme.cosmic().background(theme.transparent).on.into()),
|
||||
}
|
||||
}))
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue