fix: create fractional scale for sctk subsurfaces

This commit is contained in:
Ashley Wulber 2025-03-18 16:56:27 -04:00
parent 93bc4bbd88
commit 4db71cb0e6
No known key found for this signature in database
GPG key ID: 5216D4F46A90A820
2 changed files with 18 additions and 6 deletions

View file

@ -518,15 +518,19 @@ impl SctkState {
let mut id = None;
for subsurface in &self.subsurfaces {
if subsurface.instance.parent != surface.id() {
if subsurface.instance.wl_surface != *surface {
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
@ -1575,6 +1579,10 @@ impl SctkState {
&self.queue_handle,
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
.wp_alpha_modifier
@ -1595,6 +1603,7 @@ impl SctkState {
wl_subsurface: wl_subsurface.clone(),
wp_viewport: wp_viewport.clone(),
wp_alpha_modifier_surface: wp_alpha_modifier_surface,
wp_fractional_scale,
wl_buffer: None,
bounds: Some(bounds),

View file

@ -48,6 +48,7 @@ use wayland_protocols::wp::{
wp_alpha_modifier_surface_v1::WpAlphaModifierSurfaceV1,
wp_alpha_modifier_v1::WpAlphaModifierV1,
},
fractional_scale::v1::client::wp_fractional_scale_v1::WpFractionalScaleV1,
linux_dmabuf::zv1::client::{
zwp_linux_buffer_params_v1::{self, ZwpLinuxBufferParamsV1},
zwp_linux_dmabuf_v1::{self, ZwpLinuxDmabufV1},
@ -455,6 +456,7 @@ impl SubsurfaceState {
wp_alpha_modifier_surface,
wl_buffer: None,
bounds: None,
wp_fractional_scale: None,
transform: wl_output::Transform::Normal,
z: 0,
parent: parent.id(),
@ -612,6 +614,7 @@ pub(crate) struct SubsurfaceInstance {
pub(crate) wl_surface: WlSurface,
pub(crate) wl_subsurface: WlSubsurface,
pub(crate) wp_viewport: WpViewport,
pub(crate) wp_fractional_scale: Option<WpFractionalScaleV1>,
pub(crate) wp_alpha_modifier_surface: Option<WpAlphaModifierSurfaceV1>,
pub(crate) wl_buffer: Option<WlBuffer>,
pub(crate) bounds: Option<Rectangle<f32>>,