Source code for carbonkivy.behaviors.state_focus_behavior

from __future__ import annotations

__all__ = ("StateFocusBehavior",)

from kivy.core.window import Window
from kivy.properties import BooleanProperty

from .background_color_behavior import BackgroundColorBehavior


[docs] class StateFocusBehavior:
[docs] focus = BooleanProperty(False)
[docs] focus_enabled = BooleanProperty(True)
def __init__(self, **kwargs) -> None: self.on_focus_enabled() super(StateFocusBehavior, self).__init__(**kwargs)
[docs] def on_focus_enabled(self, *args) -> None: if self.focus_enabled: Window.bind(on_touch_down=self.on_touch) else: Window.unbind(on_touch_down=self.on_touch)
[docs] def on_touch(self, instance: object, touch: list[float, float], *args) -> None: if issubclass(self.__class__, BackgroundColorBehavior): if self.cstate != "disabled" and self.get_root_window(): self.focus = self.collide_point( *self.to_parent(*self.to_widget(*touch.pos)) ) else: return else: self.focus = self.collide_point( *self.to_parent(*self.to_widget(*touch.pos)) )
[docs] def on_focus(self, *args) -> None: if issubclass(self.__class__, BackgroundColorBehavior): if self.focus: if hasattr(self, "hover") and self.hover: pass else: self._bg_color = self.bg_color_focus self._inset_color = self.inset_color_focus self._line_color = self.line_color_focus else: self._bg_color = self.bg_color self._inset_color = self.inset_color self._line_color = self.line_color