fix: create fractional scale for sctk subsurfaces
This commit is contained in:
parent
93bc4bbd88
commit
4db71cb0e6
2 changed files with 18 additions and 6 deletions
|
|
@ -518,15 +518,19 @@ impl SctkState {
|
||||||
let mut id = None;
|
let mut id = None;
|
||||||
|
|
||||||
for subsurface in &self.subsurfaces {
|
for subsurface in &self.subsurfaces {
|
||||||
if subsurface.instance.parent != surface.id() {
|
if subsurface.instance.wl_surface != *surface {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
id = Some(subsurface.id);
|
||||||
|
if legacy && subsurface.instance.wp_fractional_scale.is_some() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let mut common = subsurface.common.lock().unwrap();
|
||||||
|
common.fractional_scale = Some(scale_factor);
|
||||||
|
if legacy {
|
||||||
|
subsurface.instance.wl_surface.set_buffer_scale(scale_factor as _);
|
||||||
|
}
|
||||||
|
|
||||||
self.sctk_events.push(SctkEvent::SurfaceScaleFactorChanged(
|
|
||||||
scale_factor,
|
|
||||||
surface.clone(),
|
|
||||||
subsurface.id,
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(popup) = self
|
if let Some(popup) = self
|
||||||
|
|
@ -1575,6 +1579,10 @@ impl SctkState {
|
||||||
&self.queue_handle,
|
&self.queue_handle,
|
||||||
cctk::sctk::globals::GlobalData,
|
cctk::sctk::globals::GlobalData,
|
||||||
);
|
);
|
||||||
|
let wp_fractional_scale =
|
||||||
|
self.fractional_scaling_manager.as_ref().map(|fsm| {
|
||||||
|
fsm.fractional_scaling(&wl_surface, &self.queue_handle)
|
||||||
|
});
|
||||||
|
|
||||||
let wp_alpha_modifier_surface = subsurface_state
|
let wp_alpha_modifier_surface = subsurface_state
|
||||||
.wp_alpha_modifier
|
.wp_alpha_modifier
|
||||||
|
|
@ -1595,6 +1603,7 @@ impl SctkState {
|
||||||
wl_subsurface: wl_subsurface.clone(),
|
wl_subsurface: wl_subsurface.clone(),
|
||||||
wp_viewport: wp_viewport.clone(),
|
wp_viewport: wp_viewport.clone(),
|
||||||
wp_alpha_modifier_surface: wp_alpha_modifier_surface,
|
wp_alpha_modifier_surface: wp_alpha_modifier_surface,
|
||||||
|
wp_fractional_scale,
|
||||||
|
|
||||||
wl_buffer: None,
|
wl_buffer: None,
|
||||||
bounds: Some(bounds),
|
bounds: Some(bounds),
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ use wayland_protocols::wp::{
|
||||||
wp_alpha_modifier_surface_v1::WpAlphaModifierSurfaceV1,
|
wp_alpha_modifier_surface_v1::WpAlphaModifierSurfaceV1,
|
||||||
wp_alpha_modifier_v1::WpAlphaModifierV1,
|
wp_alpha_modifier_v1::WpAlphaModifierV1,
|
||||||
},
|
},
|
||||||
|
fractional_scale::v1::client::wp_fractional_scale_v1::WpFractionalScaleV1,
|
||||||
linux_dmabuf::zv1::client::{
|
linux_dmabuf::zv1::client::{
|
||||||
zwp_linux_buffer_params_v1::{self, ZwpLinuxBufferParamsV1},
|
zwp_linux_buffer_params_v1::{self, ZwpLinuxBufferParamsV1},
|
||||||
zwp_linux_dmabuf_v1::{self, ZwpLinuxDmabufV1},
|
zwp_linux_dmabuf_v1::{self, ZwpLinuxDmabufV1},
|
||||||
|
|
@ -455,6 +456,7 @@ impl SubsurfaceState {
|
||||||
wp_alpha_modifier_surface,
|
wp_alpha_modifier_surface,
|
||||||
wl_buffer: None,
|
wl_buffer: None,
|
||||||
bounds: None,
|
bounds: None,
|
||||||
|
wp_fractional_scale: None,
|
||||||
transform: wl_output::Transform::Normal,
|
transform: wl_output::Transform::Normal,
|
||||||
z: 0,
|
z: 0,
|
||||||
parent: parent.id(),
|
parent: parent.id(),
|
||||||
|
|
@ -612,6 +614,7 @@ pub(crate) struct SubsurfaceInstance {
|
||||||
pub(crate) wl_surface: WlSurface,
|
pub(crate) wl_surface: WlSurface,
|
||||||
pub(crate) wl_subsurface: WlSubsurface,
|
pub(crate) wl_subsurface: WlSubsurface,
|
||||||
pub(crate) wp_viewport: WpViewport,
|
pub(crate) wp_viewport: WpViewport,
|
||||||
|
pub(crate) wp_fractional_scale: Option<WpFractionalScaleV1>,
|
||||||
pub(crate) wp_alpha_modifier_surface: Option<WpAlphaModifierSurfaceV1>,
|
pub(crate) wp_alpha_modifier_surface: Option<WpAlphaModifierSurfaceV1>,
|
||||||
pub(crate) wl_buffer: Option<WlBuffer>,
|
pub(crate) wl_buffer: Option<WlBuffer>,
|
||||||
pub(crate) bounds: Option<Rectangle<f32>>,
|
pub(crate) bounds: Option<Rectangle<f32>>,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue