diff --git a/src/builder/snippet.rs b/src/builder/snippet.rs index bdab452..ef3e4db 100644 --- a/src/builder/snippet.rs +++ b/src/builder/snippet.rs @@ -136,6 +136,10 @@ impl Gridable for GuiSnippet { fn set_layer(&self, layer: i32) -> Result<()> { self.grid.set_layer(layer) } + + fn position_extent(&self) -> (i32, i32, u32, u32) { + self.grid.position_extent() + } } impl Functionality for GuiSnippet { diff --git a/src/elements/button.rs b/src/elements/button.rs index ad1f8e3..72f9236 100644 --- a/src/elements/button.rs +++ b/src/elements/button.rs @@ -501,6 +501,10 @@ impl Gridable for Button { Ok(()) } + + fn position_extent(&self) -> (i32, i32, u32, u32) { + self.framable.position() + } } impl Drop for Button { diff --git a/src/elements/grid.rs b/src/elements/grid.rs index 49e4277..3d7f46c 100644 --- a/src/elements/grid.rs +++ b/src/elements/grid.rs @@ -738,6 +738,10 @@ impl Gridable for Grid { Ok(()) } + + fn position_extent(&self) -> (i32, i32, u32, u32) { + self.framable.position() + } } impl Drop for Grid { diff --git a/src/elements/icon.rs b/src/elements/icon.rs index 2c6d134..12d3516 100644 --- a/src/elements/icon.rs +++ b/src/elements/icon.rs @@ -287,6 +287,10 @@ impl Gridable for Icon { Ok(()) } + + fn position_extent(&self) -> (i32, i32, u32, u32) { + self.framable.position() + } } impl Drop for Icon { diff --git a/src/elements/label.rs b/src/elements/label.rs index e108662..379ec89 100644 --- a/src/elements/label.rs +++ b/src/elements/label.rs @@ -242,6 +242,10 @@ impl Gridable for Label { Ok(()) } + + fn position_extent(&self) -> (i32, i32, u32, u32) { + self.framable.position() + } } impl Drop for Label { diff --git a/src/elements/multi_line_label.rs b/src/elements/multi_line_label.rs index 3b61b74..e3c9f30 100644 --- a/src/elements/multi_line_label.rs +++ b/src/elements/multi_line_label.rs @@ -296,4 +296,8 @@ impl Gridable for MultiLineLabel { fn set_layer(&self, layer: i32) -> Result<()> { self.grid.set_layer(layer) } + + fn position_extent(&self) -> (i32, i32, u32, u32) { + self.grid.position_extent() + } } diff --git a/src/elements/multi_line_textfield.rs b/src/elements/multi_line_textfield.rs index 6c8b5f4..443467b 100644 --- a/src/elements/multi_line_textfield.rs +++ b/src/elements/multi_line_textfield.rs @@ -416,6 +416,10 @@ impl Gridable for MultiLineTextField { self.writeable.set_ui_layer(layer); self.grid.set_layer(layer) } + + fn position_extent(&self) -> (i32, i32, u32, u32) { + self.grid.position_extent() + } } impl Drop for MultiLineTextField { diff --git a/src/elements/progress_bar.rs b/src/elements/progress_bar.rs index e87f90b..3824edc 100644 --- a/src/elements/progress_bar.rs +++ b/src/elements/progress_bar.rs @@ -343,6 +343,10 @@ impl Gridable for ProgressBar { Ok(()) } + + fn position_extent(&self) -> (i32, i32, u32, u32) { + self.framable.position() + } } impl Drop for ProgressBar { diff --git a/src/elements/textfield.rs b/src/elements/textfield.rs index 9225624..07b0e7c 100644 --- a/src/elements/textfield.rs +++ b/src/elements/textfield.rs @@ -293,6 +293,10 @@ impl Gridable for TextField { Ok(()) } + + fn position_extent(&self) -> (i32, i32, u32, u32) { + self.framable.position() + } } impl Visibility for TextField { diff --git a/src/elements/traits.rs b/src/elements/traits.rs index 438f9a4..d265fe0 100644 --- a/src/elements/traits.rs +++ b/src/elements/traits.rs @@ -67,6 +67,8 @@ pub trait Gridable { fn type_name(&self) -> &str; fn set_layer(&self, layer: i32) -> Result<()>; + + fn position_extent(&self) -> (i32, i32, u32, u32); } pub trait Visibility { diff --git a/src/guihandler/gui/framable.rs b/src/guihandler/gui/framable.rs index b47bb3f..1cca7bf 100644 --- a/src/guihandler/gui/framable.rs +++ b/src/guihandler/gui/framable.rs @@ -281,6 +281,16 @@ impl Framable { self.bottom.load(SeqCst) } + pub fn position(&self) -> (i32, i32, u32, u32) { + let x = self.left(); + let y = self.top(); + + let w = self.right() - x; + let h = self.bottom() - y; + + (x, y, w as u32, h as u32) + } + /// Returns `true` if `set_frame` got called, otherwise `false` pub fn is_framed(&self) -> bool { self.framed.load(SeqCst)