2022-10-08 09:17:59 -06:00
|
|
|
"""
|
|
|
|
Behaviors/Scale
|
|
|
|
===============
|
|
|
|
|
|
|
|
.. versionadded:: 1.1.0
|
|
|
|
|
|
|
|
Base class for controlling the scale of the widget.
|
|
|
|
|
|
|
|
.. note:: See `kivy.graphics.Rotate
|
|
|
|
<https://kivy.org/doc/stable/api-kivy.graphics.html#kivy.graphics.Scale>`_
|
|
|
|
for more information.
|
|
|
|
|
|
|
|
Kivy
|
|
|
|
----
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
from kivy.animation import Animation
|
|
|
|
from kivy.lang import Builder
|
|
|
|
from kivy.properties import NumericProperty
|
|
|
|
from kivy.uix.button import Button
|
|
|
|
from kivy.app import App
|
|
|
|
|
|
|
|
|
|
|
|
KV = '''
|
|
|
|
Screen:
|
|
|
|
|
|
|
|
ScaleButton:
|
|
|
|
size_hint: .5, .5
|
|
|
|
pos_hint: {"center_x": .5, "center_y": .5}
|
|
|
|
on_release: app.change_scale(self)
|
|
|
|
|
|
|
|
canvas.before:
|
|
|
|
PushMatrix
|
|
|
|
Scale:
|
|
|
|
x: self.scale_value_x
|
|
|
|
y: self.scale_value_y
|
|
|
|
z: self.scale_value_x
|
|
|
|
origin: self.center
|
|
|
|
canvas.after:
|
|
|
|
PopMatrix
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
class ScaleButton(Button):
|
|
|
|
scale_value_x = NumericProperty(1)
|
|
|
|
scale_value_y = NumericProperty(1)
|
|
|
|
scale_value_z = NumericProperty(1)
|
|
|
|
|
|
|
|
|
|
|
|
class Test(App):
|
|
|
|
def build(self):
|
|
|
|
return Builder.load_string(KV)
|
|
|
|
|
|
|
|
def change_scale(self, instance_button: Button) -> None:
|
|
|
|
Animation(
|
|
|
|
scale_value_x=0.5,
|
|
|
|
scale_value_y=0.5,
|
|
|
|
scale_value_z=0.5,
|
|
|
|
d=0.3,
|
|
|
|
).start(instance_button)
|
|
|
|
|
|
|
|
|
|
|
|
Test().run()
|
|
|
|
|
|
|
|
KivyMD
|
|
|
|
------
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
from kivy.animation import Animation
|
|
|
|
from kivy.lang import Builder
|
|
|
|
from kivy.uix.behaviors import ButtonBehavior
|
|
|
|
|
|
|
|
from kivymd.app import MDApp
|
|
|
|
from kivymd.uix.behaviors import ScaleBehavior
|
|
|
|
from kivymd.uix.boxlayout import MDBoxLayout
|
|
|
|
|
|
|
|
KV = '''
|
|
|
|
MDScreen:
|
|
|
|
|
|
|
|
ScaleBox:
|
|
|
|
size_hint: .5, .5
|
|
|
|
pos_hint: {"center_x": .5, "center_y": .5}
|
|
|
|
on_release: app.change_scale(self)
|
|
|
|
md_bg_color: "red"
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
class ScaleBox(ButtonBehavior, ScaleBehavior, MDBoxLayout):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
class Test(MDApp):
|
|
|
|
def build(self):
|
|
|
|
return Builder.load_string(KV)
|
|
|
|
|
|
|
|
def change_scale(self, instance_button: ScaleBox) -> None:
|
|
|
|
Animation(
|
|
|
|
scale_value_x=0.5,
|
|
|
|
scale_value_y=0.5,
|
|
|
|
scale_value_z=0.5,
|
|
|
|
d=0.3,
|
|
|
|
).start(instance_button)
|
|
|
|
|
|
|
|
|
|
|
|
Test().run()
|
2023-07-09 18:49:58 -06:00
|
|
|
|
|
|
|
.. warning:: Do not use `ScaleBehavior` class with classes that inherited`
|
|
|
|
from `CommonElevationBehavior` class. `CommonElevationBehavior` classes
|
|
|
|
by default contains attributes for scale widget.
|
2022-10-08 09:17:59 -06:00
|
|
|
"""
|
|
|
|
|
|
|
|
__all__ = ("ScaleBehavior",)
|
|
|
|
|
|
|
|
from kivy.lang import Builder
|
2023-07-09 18:49:58 -06:00
|
|
|
from kivy.properties import ListProperty, NumericProperty
|
2022-10-08 09:17:59 -06:00
|
|
|
|
|
|
|
Builder.load_string(
|
|
|
|
"""
|
|
|
|
<ScaleBehavior>
|
|
|
|
canvas.before:
|
|
|
|
PushMatrix
|
|
|
|
Scale:
|
|
|
|
x: self.scale_value_x
|
|
|
|
y: self.scale_value_y
|
2023-07-09 18:49:58 -06:00
|
|
|
z: self.scale_value_z
|
|
|
|
origin:
|
|
|
|
self.center \
|
|
|
|
if not self.scale_value_center else \
|
|
|
|
self.scale_value_center
|
2022-10-08 09:17:59 -06:00
|
|
|
canvas.after:
|
|
|
|
PopMatrix
|
|
|
|
"""
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class ScaleBehavior:
|
|
|
|
"""Base class for controlling the scale of the widget."""
|
|
|
|
|
|
|
|
scale_value_x = NumericProperty(1)
|
|
|
|
"""
|
|
|
|
X-axis value.
|
|
|
|
|
|
|
|
:attr:`scale_value_x` is an :class:`~kivy.properties.NumericProperty`
|
|
|
|
and defaults to `1`.
|
|
|
|
"""
|
|
|
|
|
|
|
|
scale_value_y = NumericProperty(1)
|
|
|
|
"""
|
|
|
|
Y-axis value.
|
|
|
|
|
|
|
|
:attr:`scale_value_y` is an :class:`~kivy.properties.NumericProperty`
|
|
|
|
and defaults to `1`.
|
|
|
|
"""
|
|
|
|
|
|
|
|
scale_value_z = NumericProperty(1)
|
|
|
|
"""
|
|
|
|
Z-axis value.
|
|
|
|
|
|
|
|
:attr:`scale_value_z` is an :class:`~kivy.properties.NumericProperty`
|
|
|
|
and defaults to `1`.
|
|
|
|
"""
|
2023-07-09 18:49:58 -06:00
|
|
|
|
|
|
|
scale_value_center = ListProperty()
|
|
|
|
"""
|
|
|
|
Origin of the scale.
|
|
|
|
|
|
|
|
.. versionadded:: 1.2.0
|
|
|
|
|
|
|
|
The format of the origin can be either (x, y) or (x, y, z).
|
|
|
|
|
|
|
|
:attr:`scale_value_center` is an :class:`~kivy.properties.NumericProperty`
|
|
|
|
and defaults to `[]`.
|
|
|
|
"""
|