aboutsummaryrefslogtreecommitdiff
path: root/src/layout/insert_hint_element.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout/insert_hint_element.rs')
-rw-r--r--src/layout/insert_hint_element.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/layout/insert_hint_element.rs b/src/layout/insert_hint_element.rs
new file mode 100644
index 00000000..5f70295c
--- /dev/null
+++ b/src/layout/insert_hint_element.rs
@@ -0,0 +1,61 @@
+use niri_config::{CornerRadius, FloatOrInt};
+use smithay::utils::{Logical, Point, Rectangle, Size};
+
+use super::focus_ring::{FocusRing, FocusRingRenderElement};
+use crate::render_helpers::renderer::NiriRenderer;
+
+#[derive(Debug)]
+pub struct InsertHintElement {
+ inner: FocusRing,
+}
+
+pub type InsertHintRenderElement = FocusRingRenderElement;
+
+impl InsertHintElement {
+ pub fn new(config: niri_config::InsertHint) -> Self {
+ Self {
+ inner: FocusRing::new(niri_config::FocusRing {
+ off: config.off,
+ width: FloatOrInt(0.),
+ active_color: config.color,
+ inactive_color: config.color,
+ active_gradient: config.gradient,
+ inactive_gradient: config.gradient,
+ }),
+ }
+ }
+
+ pub fn update_config(&mut self, config: niri_config::InsertHint) {
+ self.inner.update_config(niri_config::FocusRing {
+ off: config.off,
+ width: FloatOrInt(0.),
+ active_color: config.color,
+ inactive_color: config.color,
+ active_gradient: config.gradient,
+ inactive_gradient: config.gradient,
+ });
+ }
+
+ pub fn update_shaders(&mut self) {
+ self.inner.update_shaders();
+ }
+
+ pub fn update_render_elements(
+ &mut self,
+ size: Size<f64, Logical>,
+ view_rect: Rectangle<f64, Logical>,
+ radius: CornerRadius,
+ scale: f64,
+ ) {
+ self.inner
+ .update_render_elements(size, true, false, view_rect, radius, scale);
+ }
+
+ pub fn render(
+ &self,
+ renderer: &mut impl NiriRenderer,
+ location: Point<f64, Logical>,
+ ) -> impl Iterator<Item = FocusRingRenderElement> {
+ self.inner.render(renderer, location)
+ }
+}