tree: move output scale to global
This commit is contained in:
parent
0ba8648844
commit
d4fc672fb3
11 changed files with 16 additions and 17 deletions
|
|
@ -733,7 +733,7 @@ impl XBackend {
|
|||
|
||||
if let Some(node) = self.state.root.outputs.get(&output.id) {
|
||||
self.state.present_output(
|
||||
&*node,
|
||||
&node,
|
||||
&image.fb.get(),
|
||||
&image.tex.get(),
|
||||
&mut self.render_result.borrow_mut(),
|
||||
|
|
|
|||
|
|
@ -392,7 +392,6 @@ fn create_dummy_output(state: &Rc<State>) {
|
|||
scroll: Default::default(),
|
||||
pointer_positions: Default::default(),
|
||||
lock_surface: Default::default(),
|
||||
preferred_scale: Cell::new(Scale::from_int(1)),
|
||||
hardware_cursor: Default::default(),
|
||||
update_render_data_scheduled: Cell::new(false),
|
||||
screencasts: Default::default(),
|
||||
|
|
|
|||
|
|
@ -717,7 +717,7 @@ impl ConfigProxyHandler {
|
|||
fn handle_connector_get_scale(&self, connector: Connector) -> Result<(), CphError> {
|
||||
let connector = self.get_output(connector)?;
|
||||
self.respond(Response::ConnectorGetScale {
|
||||
scale: connector.node.preferred_scale.get().to_f64(),
|
||||
scale: connector.node.global.preferred_scale.get().to_f64(),
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ pub struct WlOutputGlobal {
|
|||
pub pending_captures: LinkedList<Rc<ZwlrScreencopyFrameV1>>,
|
||||
pub destroyed: Cell<bool>,
|
||||
pub legacy_scale: Cell<u32>,
|
||||
pub preferred_scale: Cell<crate::scale::Scale>,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq)]
|
||||
|
|
@ -120,6 +121,7 @@ impl WlOutputGlobal {
|
|||
pending_captures: Default::default(),
|
||||
destroyed: Cell::new(false),
|
||||
legacy_scale: Cell::new(1),
|
||||
preferred_scale: Cell::new(crate::scale::Scale::from_int(1)),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ impl WlSeatGlobal {
|
|||
for output in self.state.root.outputs.lock().values() {
|
||||
if let Some(hc) = output.hardware_cursor.get() {
|
||||
let render = render | output.hardware_cursor_needs_render.take();
|
||||
let scale = output.preferred_scale.get();
|
||||
let scale = output.global.preferred_scale.get();
|
||||
let extents = cursor.extents_at_scale(scale);
|
||||
if render {
|
||||
let (max_width, max_height) = hc.max_size();
|
||||
|
|
|
|||
|
|
@ -438,7 +438,7 @@ impl WlSurface {
|
|||
}
|
||||
output.global.send_enter(self);
|
||||
old.global.send_leave(self);
|
||||
if old.preferred_scale.get() != output.preferred_scale.get() {
|
||||
if old.global.preferred_scale.get() != output.global.preferred_scale.get() {
|
||||
self.on_scale_change();
|
||||
}
|
||||
let children = self.children.borrow_mut();
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ impl WpFractionalScaleV1 {
|
|||
pub fn send_preferred_scale(&self) {
|
||||
self.client.event(PreferredScale {
|
||||
self_id: self.id,
|
||||
scale: self.surface.output.get().preferred_scale.get().0,
|
||||
scale: self.surface.output.get().global.preferred_scale.get().0,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ impl Renderer<'_> {
|
|||
let c = theme.colors.attention_requested_background.get();
|
||||
self.base
|
||||
.fill_boxes2(&rd.attention_requested_workspaces, &c, x, y);
|
||||
let scale = output.preferred_scale.get();
|
||||
let scale = output.global.preferred_scale.get();
|
||||
for title in &rd.titles {
|
||||
let (x, y) = self.base.scale_point(x + title.tex_x, y + title.tex_y);
|
||||
self.base
|
||||
|
|
|
|||
|
|
@ -741,11 +741,11 @@ impl State {
|
|||
render_hw_cursor: bool,
|
||||
) {
|
||||
fb.render_node(
|
||||
&*output,
|
||||
output,
|
||||
self,
|
||||
Some(output.global.pos.get()),
|
||||
Some(rr),
|
||||
output.preferred_scale.get(),
|
||||
output.global.preferred_scale.get(),
|
||||
render_hw_cursor,
|
||||
);
|
||||
for fr in rr.frame_requests.drain(..) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ use {
|
|||
crate::{
|
||||
backend::{Connector, ConnectorEvent, ConnectorId, MonitorInfo},
|
||||
ifs::wl_output::WlOutputGlobal,
|
||||
scale::Scale,
|
||||
state::{ConnectorData, OutputData, State},
|
||||
tree::{OutputNode, OutputRenderData},
|
||||
utils::{asyncevent::AsyncEvent, clonecell::CloneCell},
|
||||
|
|
@ -124,14 +123,13 @@ impl ConnectorHandler {
|
|||
scroll: Default::default(),
|
||||
pointer_positions: Default::default(),
|
||||
lock_surface: Default::default(),
|
||||
preferred_scale: Cell::new(Scale::from_int(1)),
|
||||
hardware_cursor: Default::default(),
|
||||
jay_outputs: Default::default(),
|
||||
screencasts: Default::default(),
|
||||
update_render_data_scheduled: Cell::new(false),
|
||||
hardware_cursor_needs_render: Cell::new(false),
|
||||
});
|
||||
self.state.add_output_scale(on.preferred_scale.get());
|
||||
self.state.add_output_scale(on.global.preferred_scale.get());
|
||||
let mode = info.initial_mode;
|
||||
let output_data = Rc::new(OutputData {
|
||||
connector: self.data.clone(),
|
||||
|
|
@ -278,7 +276,8 @@ impl ConnectorHandler {
|
|||
if let Some(dev) = &self.data.drm_dev {
|
||||
dev.connectors.remove(&self.id);
|
||||
}
|
||||
self.state.remove_output_scale(on.preferred_scale.get());
|
||||
self.state
|
||||
.remove_output_scale(on.global.preferred_scale.get());
|
||||
let _ = self.state.remove_global(&*global);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ pub struct OutputNode {
|
|||
pub scroll: Scroller,
|
||||
pub pointer_positions: CopyHashMap<SeatId, (i32, i32)>,
|
||||
pub lock_surface: CloneCell<Option<Rc<ExtSessionLockSurfaceV1>>>,
|
||||
pub preferred_scale: Cell<Scale>,
|
||||
pub hardware_cursor: CloneCell<Option<Rc<dyn HardwareCursor>>>,
|
||||
pub hardware_cursor_needs_render: Cell<bool>,
|
||||
pub update_render_data_scheduled: Cell<bool>,
|
||||
|
|
@ -111,7 +110,7 @@ impl OutputNode {
|
|||
}
|
||||
|
||||
pub fn set_preferred_scale(self: &Rc<Self>, scale: Scale) {
|
||||
let old_scale = self.preferred_scale.replace(scale);
|
||||
let old_scale = self.global.preferred_scale.replace(scale);
|
||||
if scale == old_scale {
|
||||
return;
|
||||
}
|
||||
|
|
@ -152,7 +151,7 @@ impl OutputNode {
|
|||
let font = self.state.theme.font.borrow_mut();
|
||||
let theme = &self.state.theme;
|
||||
let th = theme.sizes.title_height.get();
|
||||
let scale = self.preferred_scale.get();
|
||||
let scale = self.global.preferred_scale.get();
|
||||
let scale = if scale != 1 {
|
||||
Some(scale.to_f64())
|
||||
} else {
|
||||
|
|
@ -410,7 +409,7 @@ impl OutputNode {
|
|||
let mode = self.global.mode.get();
|
||||
let mut width = mode.width;
|
||||
let mut height = mode.height;
|
||||
let scale = self.preferred_scale.get();
|
||||
let scale = self.global.preferred_scale.get();
|
||||
if scale != 1 {
|
||||
let scale = scale.to_f64();
|
||||
width = (width as f64 / scale).round() as _;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue