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;
|
||||
|
||||
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),
|
||||
|
|
|
|||
|
|
@ -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>>,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue