Source code for carbonkivy.behaviors.hover_behavior

from __future__ import annotations

__all__ = ("HoverBehavior",)

from kivy.core.window import Window
from kivy.properties import BooleanProperty, ColorProperty
from kivy.uix.relativelayout import RelativeLayout

from carbonkivy.utils import DEVICE_TYPE

from .background_color_behavior import BackgroundColorBehavior


[docs] class HoverBehavior: hover = BooleanProperty(False) hover_enabled = BooleanProperty(True) hover_color = ColorProperty([1, 1, 1, 0]) def __init__(self, **kwargs) -> None: self.on_hover_enabled() super(HoverBehavior, self).__init__(**kwargs)
[docs] def element_hover(self, instance: object, pos: list, *args) -> None: if self.cstate != "disabled" and self.hover_enabled: self.hover = self.collide_point( *( self.to_widget(*pos) if not isinstance(self, RelativeLayout) else self.to_parent(*self.to_widget(*pos)) ) )
[docs] def on_hover_enabled(self, *args) -> None: if DEVICE_TYPE != "mobile": if self.hover_enabled: Window.bind(mouse_pos=self.element_hover) else: Window.unbind(mouse_pos=self.element_hover)
[docs] def on_hover(self, *args) -> None: if isinstance(self, BackgroundColorBehavior): if self.hover: self._bg_color = self.hover_color if not self.focus: self._line_color = self.hover_color self._inset_color = self.hover_color else: self._bg_color = self.bg_color if not self.focus: self._line_color = self.line_color self._inset_color = self.bg_color