1
0
Fork 0

Compensate for border width in vizia remapping

This commit is contained in:
Robbert van der Helm 2022-03-19 01:40:17 +01:00
parent de80c53c14
commit bd0e126698

View file

@ -1,6 +1,6 @@
//! Utilities for writing VIZIA widgets. //! Utilities for writing VIZIA widgets.
use vizia::{Context, Modifiers}; use vizia::{Context, Modifiers, PropGet};
/// An extension trait for [`Modifiers`] that adds platform-independent getters. /// An extension trait for [`Modifiers`] that adds platform-independent getters.
pub trait ModifiersExt { pub trait ModifiersExt {
@ -35,19 +35,25 @@ impl ModifiersExt for Modifiers {
} }
/// Remap an x-coordinate to a `[0, 1]` value within the current entity's bounding box. The value /// Remap an x-coordinate to a `[0, 1]` value within the current entity's bounding box. The value
/// will be clamped to `[0, 1]` if it isn't already in that range. /// will be clamped to `[0, 1]` if it isn't already in that range. This ignores the border width.
///
/// FIXME: These functions probably include borders, we dont' want that
pub fn remap_current_entity_x_coordinate(cx: &Context, x_coord: f32) -> f32 { pub fn remap_current_entity_x_coordinate(cx: &Context, x_coord: f32) -> f32 {
let x_pos = cx.cache.get_posx(cx.current); let border_width = match cx.current.get_border_width(cx) {
let width = cx.cache.get_width(cx.current); vizia::Units::Pixels(x) => x,
_ => 0.0,
};
let x_pos = cx.cache.get_posx(cx.current) + border_width;
let width = cx.cache.get_width(cx.current) - (border_width * 2.0);
((x_coord - x_pos) / width).clamp(0.0, 1.0) ((x_coord - x_pos) / width).clamp(0.0, 1.0)
} }
/// Remap an y-coordinate to a `[0, 1]` value within the current entity's bounding box. The value /// Remap an y-coordinate to a `[0, 1]` value within the current entity's bounding box. The value
/// will be clamped to `[0, 1]` if it isn't already in that range. /// will be clamped to `[0, 1]` if it isn't already in that range. This ignores the border width.
pub fn remap_current_entity_y_coordinate(cx: &Context, y_coord: f32) -> f32 { pub fn remap_current_entity_y_coordinate(cx: &Context, y_coord: f32) -> f32 {
let y_pos = cx.cache.get_posy(cx.current); let border_width = match cx.current.get_border_width(cx) {
let height = cx.cache.get_height(cx.current); vizia::Units::Pixels(x) => x,
_ => 0.0,
};
let y_pos = cx.cache.get_posy(cx.current) + border_width;
let height = cx.cache.get_height(cx.current) - (border_width * 2.0);
((y_coord - y_pos) / height).clamp(0.0, 1.0) ((y_coord - y_pos) / height).clamp(0.0, 1.0)
} }