outputs: Clean up for more Rust usage

This commit is contained in:
Dorota Czaplejewicz
2022-01-23 18:14:26 +00:00
parent 236f7d4daf
commit 14a485deba

View File

@ -125,7 +125,9 @@ pub mod c {
pub fn get_state(&self) -> Option<OutputState> { pub fn get_state(&self) -> Option<OutputState> {
let outputs = self.outputs.clone_ref(); let outputs = self.outputs.clone_ref();
let outputs = outputs.borrow(); let outputs = outputs.borrow();
find_output(&outputs, self.wl_output.clone()).map(|o| o.current.clone()) outputs
.find_output(self.wl_output.clone())
.map(|o| o.current.clone())
} }
} }
@ -151,7 +153,8 @@ pub mod c {
let outputs = outputs.clone_ref(); let outputs = outputs.clone_ref();
let mut collection = outputs.borrow_mut(); let mut collection = outputs.borrow_mut();
let output_state: Option<&mut OutputState> let output_state: Option<&mut OutputState>
= find_output_mut(&mut collection, wl_output) = collection
.find_output_mut(wl_output)
.map(|o| &mut o.pending); .map(|o| &mut o.pending);
match output_state { match output_state {
Some(state) => { state.transform = Some(transform) }, Some(state) => { state.transform = Some(transform) },
@ -179,7 +182,8 @@ pub mod c {
let outputs = outputs.clone_ref(); let outputs = outputs.clone_ref();
let mut collection = outputs.borrow_mut(); let mut collection = outputs.borrow_mut();
let output_state: Option<&mut OutputState> let output_state: Option<&mut OutputState>
= find_output_mut(&mut collection, wl_output) = collection
.find_output_mut(wl_output)
.map(|o| &mut o.pending); .map(|o| &mut o.pending);
match output_state { match output_state {
Some(state) => { Some(state) => {
@ -200,7 +204,8 @@ pub mod c {
) { ) {
let outputs = outputs.clone_ref(); let outputs = outputs.clone_ref();
let mut collection = outputs.borrow_mut(); let mut collection = outputs.borrow_mut();
let output = find_output_mut(&mut collection, wl_output); let output = collection
.find_output_mut(wl_output);
match output { match output {
Some(output) => { output.current = output.pending.clone(); } Some(output) => { output.current = output.pending.clone(); }
None => log_print!( None => log_print!(
@ -218,7 +223,8 @@ pub mod c {
let outputs = outputs.clone_ref(); let outputs = outputs.clone_ref();
let mut collection = outputs.borrow_mut(); let mut collection = outputs.borrow_mut();
let output_state: Option<&mut OutputState> let output_state: Option<&mut OutputState>
= find_output_mut(&mut collection, wl_output) = collection
.find_output_mut(wl_output)
.map(|o| &mut o.pending); .map(|o| &mut o.pending);
match output_state { match output_state {
Some(state) => { state.scale = factor; } Some(state) => { state.scale = factor; }
@ -272,28 +278,6 @@ pub mod c {
} }
// TODO: handle unregistration // TODO: handle unregistration
fn find_output(
collection: &Outputs,
wl_output: WlOutput,
) -> Option<&Output> {
collection.outputs
.iter()
.find_map(|o|
if o.output == wl_output { Some(o) } else { None }
)
}
fn find_output_mut(
collection: &mut Outputs,
wl_output: WlOutput,
) -> Option<&mut Output> {
collection.outputs
.iter_mut()
.find_map(|o|
if o.output == wl_output { Some(o) } else { None }
)
}
} }
/// Generic size /// Generic size
@ -359,7 +343,11 @@ impl OutputState {
} }
} }
pub struct Output { /// Not guaranteed to exist,
/// but can be used to look up state.
pub type OutputId = c::WlOutput;
struct Output {
output: c::WlOutput, output: c::WlOutput,
pending: OutputState, pending: OutputState,
current: OutputState, current: OutputState,
@ -377,4 +365,22 @@ impl Outputs {
sender, sender,
} }
} }
fn find_output(&self, wl_output: c::WlOutput) -> Option<&Output> {
self.outputs
.iter()
.find_map(|o|
if o.output == wl_output { Some(o) } else { None }
)
}
fn find_output_mut(&mut self, wl_output: c::WlOutput)
-> Option<&mut Output>
{
self.outputs
.iter_mut()
.find_map(|o|
if o.output == wl_output { Some(o) } else { None }
)
}
} }