settings: remove static row height, and make the height flexible

This commit is contained in:
Mathieu Virbel 2012-10-30 22:33:39 +01:00
parent 3a70ffdcf4
commit 141656c892
3 changed files with 53 additions and 52 deletions

View File

@ -38,7 +38,7 @@ If you need to escape the markup from the current text, use
__all__ = ('MarkupLabel', )
from kivy.graphics.texture import Texture
from kivy.utils import platform
from kivy.properties import dpi2px
from kivy.parser import parse_color
from kivy.logger import Logger
import re
@ -138,9 +138,14 @@ class MarkupLabel(MarkupLabelBase):
spop('italic')
self.resolve_font_name()
elif item[:6] == '[size=':
item = item[6:-1]
try:
size = int(item[6:-1])
if item[-2:] in ('px', 'pt', 'in', 'cm', 'mm'):
size = dpi2px(item[:-2], item[-2:])
else:
size = int(item)
except ValueError:
raise
size = options['font_size']
spush('font_size')
options['font_size'] = size

View File

@ -499,7 +499,8 @@
size: self.width, 1
<SettingItem>:
size_hint_x: .25
size_hint: .25, None
height: max(50, labellayout.height)
content: content
canvas:
Color:
@ -516,25 +517,13 @@
BoxLayout:
pos: root.pos
FloatLayout:
Label:
size_hint: .5, None
id: labellayout
orientation: 'vertical'
size_hint_x: .5
Label:
pos_hint: {'y': .5, 'x': 0}
text: root.title
text_size: self.width - 32, None
size_hint_y: None
height: self.texture_size[1]
Label:
pos_hint: {'top': .5, 'x': 0}
text: root.desc if root.desc else ''
text_size: self.width - 32, None
size_hint_y: None
height: self.texture_size[1]
font_size: 10
color: (.7, .7, .7, 1) if root.selected_alpha < 0.5 else (.3, .3, .3, 1)
markup: True
text: '{0}\n[size=10pt]{1}[/size]{2}'.format(root.title or '', root.desc or '', self.height)
text_size: self.width - 32, None
height: self.texture_size[1] + 10
BoxLayout:
id: content
@ -565,6 +554,8 @@
<SettingTitle>:
text_size: self.width - 32, None
size_hint_y: None
height: max(50, self.texture_size[1] + 20)
color: (.9, .9, .9, 1)
canvas:
Color:
@ -592,14 +583,16 @@
<SettingsPanel>:
spacing: 5
padding: 5
row_default_height: 48
row_force_default: True
#row_default_height: 48
#row_force_default: True
size_hint_y: None
height: self.minimum_height
Label:
size_hint_y: None
text: root.title
text_size: self.width - 32, None
height: max(50, self.texture_size[1] + 20)
color: (.5, .5, .5, 1)
canvas.after:
@ -766,7 +759,7 @@
do_translation: False
do_rotation: False
do_scale: False
auto_bring_to_front: False
auto_bring_to_front: False
# =============================================================================
@ -774,16 +767,16 @@
# =============================================================================
<ScreenManager>:
canvas.before:
StencilPush
Rectangle:
pos: self.pos
size: self.size
StencilUse
canvas.after:
StencilUnUse
Rectangle:
pos: self.pos
size: self.size
StencilPop
canvas.before:
StencilPush
Rectangle:
pos: self.pos
size: self.size
StencilUse
canvas.after:
StencilUnUse
Rectangle:
pos: self.pos
size: self.size
StencilPop

View File

@ -175,6 +175,24 @@ from weakref import ref
EventLoop = None
cpdef float dpi2px(value, ext):
# 1in = 2.54cm = 25.4mm = 72pt = 12pc
global EventLoop
if EventLoop is None:
from kivy.base import EventLoop
cdef float rv = float(value)
cdef float dpi = EventLoop.dpi
if ext == 'in':
return rv * dpi
elif ext == 'px':
return rv
elif ext == 'pt':
return rv * dpi / 72.
elif ext == 'cm':
return rv * dpi / 2.54
elif ext == 'mm':
return rv * dpi / 25.4
cdef class Property:
'''Base class for building more complex properties.
@ -439,23 +457,8 @@ cdef class NumericProperty(Property):
return self.parse_list(obj, value[:-2], <str>value[-2:])
cdef float parse_list(self, EventDispatcher obj, value, str ext):
# 1in = 2.54cm = 25.4mm = 72pt = 12pc
global EventLoop
if EventLoop is None:
from kivy.base import EventLoop
cdef float rv = float(value)
cdef float dpi = EventLoop.dpi
obj.__storage[self.name]['format'] = ext
if ext == 'in':
return rv * dpi
elif ext == 'px':
return rv
elif ext == 'pt':
return rv * dpi / 72.
elif ext == 'cm':
return rv * dpi / 2.54
elif ext == 'mm':
return rv * dpi / 25.4
return dpi2px(value, ext)
def get_format(self, EventDispatcher obj):
'''