Update GridLayout to use CssListProperty for padding.

This commit is contained in:
Ian Foote 2013-03-24 21:15:01 +00:00
parent 93c1aa25d5
commit 0bc8c0ce49
1 changed files with 25 additions and 11 deletions

View File

@ -90,7 +90,7 @@ __all__ = ('GridLayout', 'GridLayoutException')
from kivy.logger import Logger from kivy.logger import Logger
from kivy.uix.layout import Layout from kivy.uix.layout import Layout
from kivy.properties import NumericProperty, BooleanProperty, DictProperty, \ from kivy.properties import NumericProperty, BooleanProperty, DictProperty, \
BoundedNumericProperty, ReferenceListProperty BoundedNumericProperty, ReferenceListProperty, CssListProperty
from math import ceil from math import ceil
@ -111,11 +111,23 @@ class GridLayout(Layout):
0. 0.
''' '''
padding = NumericProperty(0) padding = CssListProperty([0, 0, 0, 0])
'''Padding between widget box and children, in pixels. '''Padding between layout box and children, in pixels.
:data:`padding` is a :class:`~kivy.properties.NumericProperty`, default to padding[0] represents the left padding, padding[1] the right padding,
0. padding[2] the top padding and padding[3] the bottom padding.
If padding is given only two arguments, the first will represent left and
right padding, and the second top and bottom padding.
If padding is given only one argument, it will represent all four
directions.
.. versionchanged:: 1.7.0
Replaced NumericProperty with CssListProperty.
:data:`padding` is a :class:`~kivy.properties.CssListProperty`, default to
[0, 0, 0, 0].
''' '''
cols = BoundedNumericProperty(None, min=0, allow_none=True) cols = BoundedNumericProperty(None, min=0, allow_none=True)
@ -332,10 +344,11 @@ class GridLayout(Layout):
i = i - 1 i = i - 1
# calculate minimum width/height needed, starting from padding + spacing # calculate minimum width/height needed, starting from padding + spacing
padding2 = self.padding * 2 padding_x = self.padding[0] + self.padding[1]
padding_y = self.padding[2] + self.padding[3]
spacing = self.spacing spacing = self.spacing
width = padding2 + spacing * (current_cols - 1) width = padding_x + spacing * (current_cols - 1)
height = padding2 + spacing * (current_rows - 1) height = padding_y + spacing * (current_rows - 1)
# then add the cell size # then add the cell size
width += sum(cols) width += sum(cols)
height += sum(rows) height += sum(rows)
@ -362,7 +375,8 @@ class GridLayout(Layout):
return return
# speedup # speedup
padding = self.padding padding_left = self.padding[0]
padding_top = self.padding[2]
spacing = self.spacing spacing = self.spacing
selfx = self.x selfx = self.x
selfw = self.width selfw = self.width
@ -413,9 +427,9 @@ class GridLayout(Layout):
# reposition every child # reposition every child
i = len_children - 1 i = len_children - 1
y = self.top - padding y = self.top - padding_top
for row_height in rows: for row_height in rows:
x = selfx + padding x = selfx + padding_left
for col_width in cols: for col_width in cols:
if i < 0: if i < 0:
break break