chore: surface action for LiveSettings update
This commit is contained in:
parent
e939d334f6
commit
f04437cee5
2 changed files with 60 additions and 23 deletions
|
|
@ -495,6 +495,13 @@ where
|
||||||
crate::surface::Action::DestroyLayerShell(id) => {
|
crate::surface::Action::DestroyLayerShell(id) => {
|
||||||
iced_winit::commands::layer_surface::destroy_layer_surface(id)
|
iced_winit::commands::layer_surface::destroy_layer_surface(id)
|
||||||
}
|
}
|
||||||
|
crate::surface::Action::SyncLiveSettings(id) => {
|
||||||
|
if let Some((_, id, live_settings, _)) = self.surface_views.get(&id) {
|
||||||
|
let live_settings = live_settings(&self.app);
|
||||||
|
return self.apply_live_settings(*id, &live_settings);
|
||||||
|
}
|
||||||
|
Task::none()
|
||||||
|
}
|
||||||
_ => iced::Task::none(),
|
_ => iced::Task::none(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1538,18 +1545,13 @@ impl<App: Application> Cosmic<App> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(all(feature = "wayland", feature = "winit", target_os = "linux"))]
|
#[cfg(feature = "surface-message")]
|
||||||
/// Apply live setting overrides for a surface
|
/// Apply live setting overrides for a surface
|
||||||
pub fn apply_live_settings(
|
pub fn apply_live_settings(
|
||||||
&mut self,
|
&mut self,
|
||||||
id_wrapper: SurfaceIdWrapper,
|
id_wrapper: SurfaceIdWrapper,
|
||||||
live_settings: &LiveSettings,
|
live_settings: &crate::surface::action::LiveSettings,
|
||||||
) -> Task<crate::Action<App::Message>> {
|
) -> Task<crate::Action<App::Message>> {
|
||||||
use iced::{Point, Rectangle, Size};
|
|
||||||
use iced_winit::commands::blur::blur as blur_rect;
|
|
||||||
use iced_winit::commands::corner_radius;
|
|
||||||
use iced_winit::commands::layer_surface::set_padding;
|
|
||||||
|
|
||||||
let id = id_wrapper.inner();
|
let id = id_wrapper.inner();
|
||||||
|
|
||||||
let mut cmds = Vec::with_capacity(2);
|
let mut cmds = Vec::with_capacity(2);
|
||||||
|
|
@ -1557,48 +1559,82 @@ impl<App: Application> Cosmic<App> {
|
||||||
|
|
||||||
if let Some(blur) = live_settings.blur {
|
if let Some(blur) = live_settings.blur {
|
||||||
let blur_cmd = if blur {
|
let blur_cmd = if blur {
|
||||||
use iced::Rectangle;
|
|
||||||
if matches!(id_wrapper, SurfaceIdWrapper::Window(_)) {
|
if matches!(id_wrapper, SurfaceIdWrapper::Window(_)) {
|
||||||
window::enable_blur(id)
|
window::enable_blur(id)
|
||||||
} else {
|
} else {
|
||||||
blur_rect(
|
#[cfg(all(feature = "wayland", feature = "winit", target_os = "linux"))]
|
||||||
id,
|
{
|
||||||
Some(vec![Rectangle::new(Point::ORIGIN, Size::INFINITE)]),
|
iced_winit::commands::blur::blur(
|
||||||
)
|
id,
|
||||||
.discard()
|
Some(vec![iced::Rectangle::new(
|
||||||
|
iced::Point::ORIGIN,
|
||||||
|
iced::Size::INFINITE,
|
||||||
|
)]),
|
||||||
|
)
|
||||||
|
.discard()
|
||||||
|
}
|
||||||
|
#[cfg(not(all(feature = "wayland", feature = "winit", target_os = "linux")))]
|
||||||
|
{
|
||||||
|
iced::window::enable_blur(id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if matches!(id_wrapper, SurfaceIdWrapper::Window(_)) {
|
} else if matches!(id_wrapper, SurfaceIdWrapper::Window(_)) {
|
||||||
window::disable_blur(id)
|
window::disable_blur(id)
|
||||||
} else {
|
} else {
|
||||||
blur_rect(id, None).discard()
|
#[cfg(all(feature = "wayland", feature = "winit", target_os = "linux"))]
|
||||||
|
{
|
||||||
|
iced_winit::commands::blur::blur(id, None).discard()
|
||||||
|
}
|
||||||
|
#[cfg(not(all(feature = "wayland", feature = "winit", target_os = "linux")))]
|
||||||
|
{
|
||||||
|
iced::window::disable_blur(id)
|
||||||
|
}
|
||||||
};
|
};
|
||||||
cmds.push(blur_cmd);
|
cmds.push(blur_cmd);
|
||||||
} else if self.app.core().blur(&t, Some(id_wrapper)) {
|
} else if self.app.core().blur(&t, Some(id_wrapper)) {
|
||||||
cmds.push(if matches!(id_wrapper, SurfaceIdWrapper::Window(_)) {
|
cmds.push(if matches!(id_wrapper, SurfaceIdWrapper::Window(_)) {
|
||||||
window::enable_blur(id)
|
window::enable_blur(id)
|
||||||
} else {
|
} else {
|
||||||
blur_rect(
|
#[cfg(all(feature = "wayland", feature = "winit", target_os = "linux"))]
|
||||||
id,
|
{
|
||||||
Some(vec![Rectangle::new(Point::ORIGIN, Size::INFINITE)]),
|
iced_winit::commands::blur::blur(
|
||||||
)
|
id,
|
||||||
.discard()
|
Some(vec![iced::Rectangle::new(
|
||||||
|
iced::Point::ORIGIN,
|
||||||
|
iced::Size::INFINITE,
|
||||||
|
)]),
|
||||||
|
)
|
||||||
|
.discard()
|
||||||
|
}
|
||||||
|
#[cfg(not(all(feature = "wayland", feature = "winit", target_os = "linux")))]
|
||||||
|
{
|
||||||
|
iced::window::enable_blur(id)
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
#[cfg(all(feature = "wayland", feature = "winit", target_os = "linux"))]
|
||||||
if let Some(corners) = live_settings.corners {
|
if let Some(corners) = live_settings.corners {
|
||||||
cmds.push(corner_radius::corner_radius(id, Some(corners)).discard());
|
cmds.push(
|
||||||
|
iced_winit::commands::corner_radius::corner_radius(id, Some(corners)).discard(),
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
let rounded = !self.app.core().window.sharp_corners
|
let rounded = !self.app.core().window.sharp_corners
|
||||||
&& self.app.core().sync_window_border_radii_to_theme();
|
&& self.app.core().sync_window_border_radii_to_theme();
|
||||||
if let Some(cur_rad) =
|
if let Some(cur_rad) =
|
||||||
corners(id_wrapper, rounded, &t, self.app.core().auto_corner_radius)
|
corners(id_wrapper, rounded, &t, self.app.core().auto_corner_radius)
|
||||||
{
|
{
|
||||||
cmds.push(corner_radius::corner_radius(id, Some(cur_rad)).discard());
|
cmds.push(
|
||||||
|
iced_winit::commands::corner_radius::corner_radius(id, Some(cur_rad)).discard(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#[cfg(all(feature = "wayland", feature = "winit", target_os = "linux"))]
|
||||||
if let (SurfaceIdWrapper::LayerSurface(id), Some(padding)) =
|
if let (SurfaceIdWrapper::LayerSurface(id), Some(padding)) =
|
||||||
(id_wrapper, live_settings.padding)
|
(id_wrapper, live_settings.padding)
|
||||||
{
|
{
|
||||||
cmds.push(set_padding(id, padding));
|
cmds.push(iced_winit::commands::layer_surface::set_padding(
|
||||||
|
id, padding,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
Task::batch(cmds)
|
Task::batch(cmds)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ pub enum Action {
|
||||||
size: Size,
|
size: Size,
|
||||||
},
|
},
|
||||||
Ignore,
|
Ignore,
|
||||||
|
SyncLiveSettings(iced::window::Id),
|
||||||
Task(Arc<dyn Fn() -> Task<Action> + Send + Sync>),
|
Task(Arc<dyn Fn() -> Task<Action> + Send + Sync>),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -146,7 +147,7 @@ impl std::fmt::Debug for Action {
|
||||||
Self::DestroyLayerShell(arg0) => {
|
Self::DestroyLayerShell(arg0) => {
|
||||||
f.debug_tuple("DestroyLayerShell").field(arg0).finish()
|
f.debug_tuple("DestroyLayerShell").field(arg0).finish()
|
||||||
}
|
}
|
||||||
Self::Task(_) => f.debug_tuple("Task").finish(),
|
Self::SyncLiveSettings(arg0) => f.debug_tuple("SyncLiveSettings").field(arg0).finish(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue