Detailed changes
@@ -0,0 +1,13 @@
+use crate::StyleRefinement;
+
+pub trait Active {
+ fn set_active_style(&mut self, style: StyleRefinement);
+
+ fn active(mut self, f: impl FnOnce(StyleRefinement) -> StyleRefinement) -> Self
+ where
+ Self: Sized,
+ {
+ self.set_active_style(f(StyleRefinement::default()));
+ self
+ }
+}
@@ -1,9 +1,9 @@
use crate::{
- AnonymousElement, AnyElement, AppContext, BorrowWindow, Bounds, Clickable, DispatchPhase,
- Element, ElementId, ElementIdentity, IdentifiedElement, Interactive, IntoAnyElement, LayoutId,
- MouseClickEvent, MouseDownEvent, MouseEventListeners, MouseMoveEvent, MouseUpEvent, Overflow,
- ParentElement, Pixels, Point, ScrollWheelEvent, SharedString, Style, StyleRefinement, Styled,
- ViewContext,
+ Active, AnonymousElement, AnyElement, AppContext, BorrowWindow, Bounds, Click, DispatchPhase,
+ Element, ElementId, ElementIdentity, Hover, IdentifiedElement, Interactive, IntoAnyElement,
+ LayoutId, MouseClickEvent, MouseDownEvent, MouseEventListeners, MouseMoveEvent, MouseUpEvent,
+ Overflow, ParentElement, Pixels, Point, ScrollWheelEvent, SharedString, Style, StyleRefinement,
+ Styled, ViewContext,
};
use collections::HashMap;
use parking_lot::Mutex;
@@ -449,7 +449,26 @@ where
}
}
-impl<V> Clickable for Div<V, IdentifiedElement> where V: 'static + Send + Sync {}
+impl<V, K> Hover for Div<V, K>
+where
+ V: 'static + Send + Sync,
+ K: ElementIdentity,
+{
+ fn set_hover_style(&mut self, style: StyleRefinement) {
+ self.hover_style = style;
+ }
+}
+
+impl<V> Click for Div<V, IdentifiedElement> where V: 'static + Send + Sync {}
+
+impl<V> Active for Div<V, IdentifiedElement>
+where
+ V: 'static + Send + Sync,
+{
+ fn set_active_style(&mut self, style: StyleRefinement) {
+ self.active_style = style;
+ }
+}
fn paint_hover_listener<V>(bounds: Bounds<Pixels>, cx: &mut ViewContext<V>)
where
@@ -1,6 +1,6 @@
use crate::{
- div, AnonymousElement, AnyElement, BorrowWindow, Bounds, Clickable, Div, DivState, Element,
- ElementId, ElementIdentity, IdentifiedElement, Interactive, IntoAnyElement, LayoutId,
+ div, Active, AnonymousElement, AnyElement, BorrowWindow, Bounds, Click, Div, DivState, Element,
+ ElementId, ElementIdentity, Hover, IdentifiedElement, Interactive, IntoAnyElement, LayoutId,
MouseEventListeners, Pixels, SharedString, StyleRefinement, Styled, ViewContext,
};
use futures::FutureExt;
@@ -141,4 +141,23 @@ where
}
}
-impl<V> Clickable for Img<V, IdentifiedElement> where V: 'static + Send + Sync {}
+impl<V, K> Hover for Img<V, K>
+where
+ V: 'static + Send + Sync,
+ K: ElementIdentity,
+{
+ fn set_hover_style(&mut self, style: StyleRefinement) {
+ self.base.set_hover_style(style);
+ }
+}
+
+impl<V> Click for Img<V, IdentifiedElement> where V: 'static + Send + Sync {}
+
+impl<V> Active for Img<V, IdentifiedElement>
+where
+ V: 'static + Send + Sync,
+{
+ fn set_active_style(&mut self, style: StyleRefinement) {
+ self.base.set_active_style(style)
+ }
+}
@@ -1,7 +1,7 @@
use crate::{
- div, AnonymousElement, AnyElement, Bounds, Clickable, Div, DivState, Element, ElementId,
- ElementIdentity, IdentifiedElement, Interactive, IntoAnyElement, LayoutId, MouseEventListeners,
- Pixels, SharedString, StyleRefinement, Styled,
+ div, Active, AnonymousElement, AnyElement, Bounds, Click, Div, DivState, Element, ElementId,
+ ElementIdentity, Hover, IdentifiedElement, Interactive, IntoAnyElement, LayoutId,
+ MouseEventListeners, Pixels, SharedString, StyleRefinement, Styled,
};
use util::ResultExt;
@@ -116,4 +116,23 @@ where
}
}
-impl<V> Clickable for Svg<V, IdentifiedElement> where V: 'static + Send + Sync {}
+impl<V, K> Hover for Svg<V, K>
+where
+ V: 'static + Send + Sync,
+ K: ElementIdentity,
+{
+ fn set_hover_style(&mut self, style: StyleRefinement) {
+ self.base.set_hover_style(style);
+ }
+}
+
+impl<V> Click for Svg<V, IdentifiedElement> where V: 'static + Send + Sync {}
+
+impl<V> Active for Svg<V, IdentifiedElement>
+where
+ V: 'static + Send + Sync,
+{
+ fn set_active_style(&mut self, style: StyleRefinement) {
+ self.base.set_active_style(style)
+ }
+}
@@ -1,3 +1,4 @@
+mod active;
mod app;
mod assets;
mod color;
@@ -6,6 +7,7 @@ mod elements;
mod events;
mod executor;
mod geometry;
+mod hover;
mod image_cache;
mod interactive;
mod platform;
@@ -20,6 +22,7 @@ mod util;
mod view;
mod window;
+pub use active::*;
pub use anyhow::Result;
pub use app::*;
pub use assets::*;
@@ -30,6 +33,7 @@ pub use events::*;
pub use executor::*;
pub use geometry::*;
pub use gpui3_macros::*;
+pub use hover::*;
pub use image_cache::*;
pub use interactive::*;
pub use platform::*;
@@ -0,0 +1,13 @@
+use crate::StyleRefinement;
+
+pub trait Hover {
+ fn set_hover_style(&mut self, style: StyleRefinement);
+
+ fn hover(mut self, f: impl FnOnce(StyleRefinement) -> StyleRefinement) -> Self
+ where
+ Self: Sized,
+ {
+ self.set_hover_style(f(StyleRefinement::default()));
+ self
+ }
+}
@@ -146,7 +146,7 @@ pub trait Interactive: Element {
}
}
-pub trait Clickable: Interactive {
+pub trait Click: Interactive {
fn on_click(
mut self,
handler: impl Fn(&mut Self::ViewState, &MouseClickEvent, &mut ViewContext<Self::ViewState>)
@@ -1,6 +1,6 @@
pub use gpui3::{
- div, Clickable, Element, Hoverable, IntoAnyElement, ParentElement, ScrollState, Styled,
- ViewContext, WindowContext,
+ div, Click, Element, Hover, IntoAnyElement, ParentElement, ScrollState, Styled, ViewContext,
+ WindowContext,
};
pub use crate::{theme, ButtonVariant, ElementExt, Theme};