cleanup: Unbox View and Row
They are no longer referenced anywhere in C, so it's safe to let Rust memory management deal with them.
This commit is contained in:
@ -405,7 +405,7 @@ impl Layout {
|
|||||||
let views = HashMap::from_iter(
|
let views = HashMap::from_iter(
|
||||||
self.views.iter().map(|(name, view)| {(
|
self.views.iter().map(|(name, view)| {(
|
||||||
name.clone(),
|
name.clone(),
|
||||||
Box::new(::layout::View {
|
::layout::View {
|
||||||
bounds: ::layout::c::Bounds {
|
bounds: ::layout::c::Bounds {
|
||||||
x: self.bounds.x,
|
x: self.bounds.x,
|
||||||
y: self.bounds.y,
|
y: self.bounds.y,
|
||||||
@ -413,7 +413,7 @@ impl Layout {
|
|||||||
height: self.bounds.height,
|
height: self.bounds.height,
|
||||||
},
|
},
|
||||||
rows: view.iter().map(|row| {
|
rows: view.iter().map(|row| {
|
||||||
Box::new(::layout::Row {
|
::layout::Row {
|
||||||
angle: 0,
|
angle: 0,
|
||||||
bounds: None,
|
bounds: None,
|
||||||
buttons: row.split_ascii_whitespace().map(|name| {
|
buttons: row.split_ascii_whitespace().map(|name| {
|
||||||
@ -427,9 +427,9 @@ impl Layout {
|
|||||||
&mut warning_handler,
|
&mut warning_handler,
|
||||||
))
|
))
|
||||||
}).collect(),
|
}).collect(),
|
||||||
})
|
}
|
||||||
}).collect(),
|
}).collect(),
|
||||||
})
|
}
|
||||||
)})
|
)})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -74,7 +74,7 @@ pub mod c {
|
|||||||
|
|
||||||
/// Defined in eek-types.h
|
/// Defined in eek-types.h
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
pub struct Bounds {
|
pub struct Bounds {
|
||||||
pub x: f64,
|
pub x: f64,
|
||||||
pub y: f64,
|
pub y: f64,
|
||||||
@ -570,7 +570,7 @@ pub struct Spacing {
|
|||||||
pub struct View {
|
pub struct View {
|
||||||
/// Position relative to keyboard origin
|
/// Position relative to keyboard origin
|
||||||
pub bounds: c::Bounds,
|
pub bounds: c::Bounds,
|
||||||
pub rows: Vec<Box<Row>>,
|
pub rows: Vec<Row>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl View {
|
impl View {
|
||||||
@ -665,7 +665,7 @@ pub struct Layout {
|
|||||||
// Views own the actual buttons which have state
|
// Views own the actual buttons which have state
|
||||||
// Maybe they should own UI only,
|
// Maybe they should own UI only,
|
||||||
// and keys should be owned by a dedicated non-UI-State?
|
// and keys should be owned by a dedicated non-UI-State?
|
||||||
pub views: HashMap<String, Box<View>>,
|
pub views: HashMap<String, View>,
|
||||||
|
|
||||||
// Non-UI stuff
|
// Non-UI stuff
|
||||||
/// xkb keymap applicable to the contained keys. Unchangeable
|
/// xkb keymap applicable to the contained keys. Unchangeable
|
||||||
@ -684,7 +684,7 @@ pub struct Layout {
|
|||||||
|
|
||||||
/// A builder structure for picking up layout data from storage
|
/// A builder structure for picking up layout data from storage
|
||||||
pub struct LayoutData {
|
pub struct LayoutData {
|
||||||
pub views: HashMap<String, Box<View>>,
|
pub views: HashMap<String, View>,
|
||||||
pub keymap_str: CString,
|
pub keymap_str: CString,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -706,7 +706,7 @@ impl Layout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_current_view(&self) -> &Box<View> {
|
pub fn get_current_view(&self) -> &View {
|
||||||
self.views.get(&self.current_view).expect("Selected nonexistent view")
|
self.views.get(&self.current_view).expect("Selected nonexistent view")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -815,7 +815,7 @@ impl Layout {
|
|||||||
mod procedures {
|
mod procedures {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
type Path<'v> = (&'v Box<Row>, &'v Box<Button>);
|
type Path<'v> = (&'v Row, &'v Box<Button>);
|
||||||
|
|
||||||
/// Finds all `(row, button)` paths that refer to the specified key `state`
|
/// Finds all `(row, button)` paths that refer to the specified key `state`
|
||||||
pub fn find_key_paths<'v, 's>(
|
pub fn find_key_paths<'v, 's>(
|
||||||
@ -868,12 +868,15 @@ mod procedures {
|
|||||||
let button = make_button_with_state("1".into(), state);
|
let button = make_button_with_state("1".into(), state);
|
||||||
let button_ptr = as_ptr(&button);
|
let button_ptr = as_ptr(&button);
|
||||||
|
|
||||||
let row = Box::new(Row {
|
let row_bounds = Some(c::Bounds {
|
||||||
|
x: 0.1, y: 2.3,
|
||||||
|
width: 4.5, height: 6.7,
|
||||||
|
});
|
||||||
|
let row = Row {
|
||||||
buttons: vec!(button),
|
buttons: vec!(button),
|
||||||
angle: 0,
|
angle: 0,
|
||||||
bounds: None
|
bounds: row_bounds.clone(),
|
||||||
});
|
};
|
||||||
let row_ptr = as_ptr(&row);
|
|
||||||
|
|
||||||
let view = View {
|
let view = View {
|
||||||
bounds: c::Bounds {
|
bounds: c::Bounds {
|
||||||
@ -885,10 +888,10 @@ mod procedures {
|
|||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
find_key_paths(&view, &state_clone.clone()).iter()
|
find_key_paths(&view, &state_clone.clone()).iter()
|
||||||
.map(|(row, button)| { (as_ptr(row), as_ptr(button)) })
|
.map(|(row, button)| { (row.bounds.clone(), as_ptr(button)) })
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
vec!(
|
vec!(
|
||||||
(row_ptr, button_ptr)
|
(row_bounds, button_ptr)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user