106 lines
3.9 KiB
Python
106 lines
3.9 KiB
Python
|
|
from __future__ import print_function, division
|
|
|
|
from LUIObject import LUIObject
|
|
from LUISprite import LUISprite
|
|
from LUIHorizontalLayout import LUIHorizontalLayout
|
|
|
|
from LUIInitialState import LUIInitialState
|
|
|
|
__all__ = ["LUICornerLayout", "LUIHorizontalStretchedLayout"]
|
|
|
|
class LUICornerLayout(LUIObject):
|
|
|
|
""" This is a layout which is used to combine 9 sprites to a single sprite,
|
|
e.g. used for box shadow or frames."""
|
|
|
|
# List of all sprite identifiers required for the layout
|
|
_MODES = ["TR", "Top", "TL", "Right", "Mid", "Left", "BR", "Bottom", "BL"]
|
|
|
|
def __init__(self, image_prefix="", **kwargs):
|
|
""" Creates a new layout, using the image_prefix as prefix. """
|
|
LUIObject.__init__(self)
|
|
self.set_size("100%", "100%")
|
|
self._prefix = image_prefix
|
|
self._parts = {}
|
|
for i in self._MODES:
|
|
self._parts[i] = LUISprite(self, "blank", "skin")
|
|
self._update_layout()
|
|
LUIInitialState.init(self, kwargs)
|
|
|
|
def _update_layout(self):
|
|
""" Updates the layouts components. """
|
|
for i in self._MODES:
|
|
self._parts[i].set_texture(self._prefix + i, "skin", resize=True)
|
|
|
|
# Top and Left
|
|
self._parts["Top"].width = "100%"
|
|
self._parts["Top"].margin = (0, self._parts["TR"].width, 0, self._parts["TL"].width)
|
|
|
|
self._parts["Left"].height = "100%"
|
|
self._parts["Left"].margin = (self._parts["TL"].height, 0, self._parts["BL"].height, 0)
|
|
|
|
# Mid
|
|
self._parts["Mid"].set_size("100%", "100%")
|
|
self._parts["Mid"].margin = (self._parts["Top"].height, self._parts["Right"].width,
|
|
self._parts["Bottom"].height, self._parts["Left"].width)
|
|
|
|
# Bottom and Right
|
|
self._parts["Bottom"].width = "100%"
|
|
self._parts["Bottom"].margin = (0, self._parts["BR"].width, 0, self._parts["BL"].width)
|
|
self._parts["Bottom"].bottom = 0
|
|
|
|
self._parts["Right"].height = "100%"
|
|
self._parts["Right"].margin = (self._parts["TR"].height, 0, self._parts["BR"].width, 0)
|
|
self._parts["Right"].right = 0
|
|
|
|
# Corners
|
|
self._parts["TL"].top_left = 0, 0
|
|
self._parts["TR"].top_right = 0, 0
|
|
self._parts["BL"].bottom_left = 0, 0
|
|
self._parts["BR"].bottom_right = 0, 0
|
|
|
|
def set_prefix(self, prefix):
|
|
""" Changes the texture of the layout """
|
|
self._prefix = prefix
|
|
self._update_layout()
|
|
|
|
def get_prefix(self):
|
|
""" Returns the layouts texture prefix """
|
|
return self._prefix
|
|
|
|
prefix = property(get_prefix, set_prefix)
|
|
|
|
|
|
class LUIHorizontalStretchedLayout(LUIObject):
|
|
|
|
""" A layout which takes 3 sprites, a left sprite, a right sprite, and a
|
|
middle sprite. While the left and right sprites remain untouched, the middle
|
|
one will be stretched to fit the layout """
|
|
|
|
def __init__(self, parent=None, prefix="ButtonDefault", **kwargs):
|
|
LUIObject.__init__(self)
|
|
self._layout = LUIHorizontalLayout(self, spacing=0)
|
|
self._layout.width = "100%"
|
|
self._sprite_left = LUISprite(self._layout.cell(), "blank", "skin")
|
|
self._sprite_mid = LUISprite(self._layout.cell('*'), "blank", "skin")
|
|
self._sprite_right = LUISprite(self._layout.cell(), "blank", "skin")
|
|
if parent is not None:
|
|
self.parent = parent
|
|
self.prefix = prefix
|
|
LUIInitialState.init(self, kwargs)
|
|
|
|
def set_prefix(self, prefix):
|
|
""" Sets the layout prefix, this controls which sprites will be used """
|
|
self._sprite_left.set_texture(prefix + "_Left", "skin")
|
|
self._sprite_mid.set_texture(prefix, "skin")
|
|
self._sprite_right.set_texture(prefix + "_Right", "skin")
|
|
self._sprite_mid.width = "100%"
|
|
self._prefix = prefix
|
|
|
|
def get_prefix(self):
|
|
""" Returns the layout prefix """
|
|
return self._prefix
|
|
|
|
prefix = property(get_prefix, set_prefix)
|