layout: Keep content purpose around

This allows to add proper CSS style classes based on that
This commit is contained in:
Guido Günther
2021-12-01 16:17:38 +01:00
parent 3513bf8de4
commit 4903f3d1a0
4 changed files with 21 additions and 5 deletions

View File

@ -61,7 +61,7 @@ pub mod c {
}; };
let (kind, layout) = load_layout_data_with_fallback(&name, type_, variant, overlay_str); let (kind, layout) = load_layout_data_with_fallback(&name, type_, variant, overlay_str);
let layout = ::layout::Layout::new(layout, kind); let layout = ::layout::Layout::new(layout, kind, variant);
Box::into_raw(Box::new(layout)) Box::into_raw(Box::new(layout))
} }
} }

View File

@ -233,7 +233,7 @@ bitflags!{
/// use rs::imservice::ContentPurpose; /// use rs::imservice::ContentPurpose;
/// assert_eq!(ContentPurpose::Alpha as u32, 1); /// assert_eq!(ContentPurpose::Alpha as u32, 1);
/// ``` /// ```
#[derive(Debug, Clone)] #[derive(Debug, Copy, Clone)]
pub enum ContentPurpose { pub enum ContentPurpose {
Normal = 0, Normal = 0,
Alpha = 1, Alpha = 1,

View File

@ -33,6 +33,7 @@ struct transformation squeek_layout_calculate_transformation(
struct squeek_layout *squeek_load_layout(const char *name, uint32_t type, uint32_t variant_type, const char *overlay_name); struct squeek_layout *squeek_load_layout(const char *name, uint32_t type, uint32_t variant_type, const char *overlay_name);
enum squeek_arrangement_kind squeek_layout_get_kind(const struct squeek_layout *); enum squeek_arrangement_kind squeek_layout_get_kind(const struct squeek_layout *);
uint32_t squeek_layout_get_purpose(const struct squeek_layout *);
void squeek_layout_free(struct squeek_layout*); void squeek_layout_free(struct squeek_layout*);
void squeek_layout_release(struct squeek_layout *layout, void squeek_layout_release(struct squeek_layout *layout,

View File

@ -32,6 +32,8 @@ use ::manager;
use ::submission::{ Submission, SubmitData, Timestamp }; use ::submission::{ Submission, SubmitData, Timestamp };
use ::util::find_max_double; use ::util::find_max_double;
use ::imservice::ContentPurpose;
// Traits // Traits
use std::borrow::Borrow; use std::borrow::Borrow;
use ::logging::Warn; use ::logging::Warn;
@ -183,6 +185,13 @@ pub mod c {
layout.kind.clone() as u32 layout.kind.clone() as u32
} }
#[no_mangle]
pub extern "C"
fn squeek_layout_get_purpose(layout: *const Layout) -> u32 {
let layout = unsafe { &*layout };
layout.purpose.clone() as u32
}
#[no_mangle] #[no_mangle]
pub extern "C" pub extern "C"
fn squeek_layout_free(layout: *mut Layout) { fn squeek_layout_free(layout: *mut Layout) {
@ -627,6 +636,7 @@ pub enum LatchedState {
pub struct Layout { pub struct Layout {
pub margins: Margins, pub margins: Margins,
pub kind: ArrangementKind, pub kind: ArrangementKind,
pub purpose: ContentPurpose,
pub current_view: String, pub current_view: String,
// If current view is latched, // If current view is latched,
@ -676,7 +686,7 @@ impl fmt::Display for NoSuchView {
// The usage of &mut on Rc<RefCell<KeyState>> doesn't mean anything special. // The usage of &mut on Rc<RefCell<KeyState>> doesn't mean anything special.
// Cloning could also be used. // Cloning could also be used.
impl Layout { impl Layout {
pub fn new(data: LayoutData, kind: ArrangementKind) -> Layout { pub fn new(data: LayoutData, kind: ArrangementKind, purpose: ContentPurpose) -> Layout {
Layout { Layout {
kind, kind,
current_view: "base".to_owned(), current_view: "base".to_owned(),
@ -685,6 +695,7 @@ impl Layout {
keymaps: data.keymaps, keymaps: data.keymaps,
pressed_keys: HashSet::new(), pressed_keys: HashSet::new(),
margins: data.margins, margins: data.margins,
purpose,
} }
} }
@ -1194,6 +1205,7 @@ mod test {
"base".into() => (c::Point { x: 0.0, y: 0.0 }, view.clone()), "base".into() => (c::Point { x: 0.0, y: 0.0 }, view.clone()),
"locked".into() => (c::Point { x: 0.0, y: 0.0 }, view), "locked".into() => (c::Point { x: 0.0, y: 0.0 }, view),
}, },
purpose: ContentPurpose::Normal,
}; };
// Basic cycle // Basic cycle
@ -1270,7 +1282,8 @@ mod test {
"locked".into() => (c::Point { x: 0.0, y: 0.0 }, view.clone()), "locked".into() => (c::Point { x: 0.0, y: 0.0 }, view.clone()),
"unlocked".into() => (c::Point { x: 0.0, y: 0.0 }, view), "unlocked".into() => (c::Point { x: 0.0, y: 0.0 }, view),
}, },
}; purpose: ContentPurpose::Normal,
};
layout.apply_view_transition(&switch); layout.apply_view_transition(&switch);
assert_eq!(&layout.current_view, "locked"); assert_eq!(&layout.current_view, "locked");
@ -1336,7 +1349,8 @@ mod test {
"locked".into() => (c::Point { x: 0.0, y: 0.0 }, view.clone()), "locked".into() => (c::Point { x: 0.0, y: 0.0 }, view.clone()),
"ĄĘ".into() => (c::Point { x: 0.0, y: 0.0 }, view), "ĄĘ".into() => (c::Point { x: 0.0, y: 0.0 }, view),
}, },
}; purpose: ContentPurpose::Normal,
};
// Latch twice, then Ąto-unlatch across 2 levels // Latch twice, then Ąto-unlatch across 2 levels
layout.apply_view_transition(&switch); layout.apply_view_transition(&switch);
@ -1436,6 +1450,7 @@ mod test {
views: hashmap! { views: hashmap! {
String::new() => (c::Point { x: 0.0, y: 0.0 }, view), String::new() => (c::Point { x: 0.0, y: 0.0 }, view),
}, },
purpose: ContentPurpose::Normal,
}; };
assert_eq!( assert_eq!(
layout.calculate_inner_size(), layout.calculate_inner_size(),