Source code for carbonkivy.behaviors.adaptive_behavior

from __future__ import annotations

__all__ = ("AdaptiveBehavior",)

from kivy.properties import ListProperty
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.screenmanager import Screen


[docs] class AdaptiveBehavior:
[docs] adaptive = ListProperty([False, False], length=2)
[docs] def on_adaptive(self, *args) -> None: if self.adaptive[0] and self.adaptive[1]: self.size_hint = (None, None) if isinstance(self, Label): self.text_size = (None, None) self.bind( texture_size=lambda *x: self.setter("size")(self, self.texture_size) ) else: if not isinstance(self, (FloatLayout, Screen)): self.bind(minimum_size=self.setter("size")) if not self.children: self.size = (0, 0) elif self.adaptive[0]: self.size_hint_x = None if isinstance(self, Label): self.bind( texture_size=lambda *x: self.setter("width")( self, self.texture_size[0] ) ) else: if not isinstance(self, (FloatLayout, Screen)): self.bind(minimum_width=self.setter("width")) if not self.children: self.width = 0 elif self.adaptive[1]: self.size_hint_y = None if isinstance(self, Label): self.bind( texture_size=lambda *x: self.setter("height")( self, self.texture_size[1] ) ) else: if not isinstance(self, (FloatLayout, Screen)): self.bind(minimum_height=self.setter("height")) if not self.children: self.height = 0