Skip to content

Commit c9c3158

Browse files
committed
Kivy/Android:
- Added new menu option to adjust font size in general. - Fixed a bug with doubleclick moves addressed in #117.
1 parent 4471a8a commit c9c3158

File tree

6 files changed

+108
-23
lines changed

6 files changed

+108
-23
lines changed

pysollib/kivy/LApp.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@
4848
from kivy.uix.floatlayout import FloatLayout
4949
from kivy.uix.label import Label
5050
from kivy.uix.scrollview import ScrollView
51+
from kivy.uix.slider import Slider
5152
from kivy.uix.treeview import TreeView
5253
from kivy.uix.treeview import TreeViewLabel
54+
from kivy.uix.treeview import TreeViewNode
5355
from kivy.uix.widget import Widget
5456
from kivy.utils import platform
5557

@@ -986,6 +988,31 @@ def closeLastNode(self):
986988

987989
return ret
988990

991+
class LTreeSliderNode(Slider, TreeViewNode, LBase):
992+
993+
def __init__(self, **kw):
994+
self.variable = None
995+
if 'variable' in kw:
996+
self.variable = kw['variable']
997+
del kw['variable']
998+
if 'setup' in kw:
999+
self.min = kw['setup'][0]
1000+
self.max = kw['setup'][1]
1001+
self.step = kw['setup'][2]
1002+
del kw['setup']
1003+
1004+
super(LTreeSliderNode, self).__init__(markup=True, **kw)
1005+
self.value = self.variable.value
1006+
self.height = '24sp'
1007+
self.background_width = '12sp'
1008+
self.background_height = '12sp'
1009+
self.cursor_height = '12sp'
1010+
self.cursor_width = '12sp'
1011+
1012+
def on_value(self,obj,val):
1013+
print (val)
1014+
self.variable.value = val
1015+
9891016

9901017
class LTreeNode(ButtonBehavior, TreeViewLabel, LBase):
9911018

@@ -1710,13 +1737,12 @@ def on_touch_down(self, touch):
17101737
# print(' - interval is', touch.double_tap_time)
17111738
# print(' - distance betw. previous is', touch.double_tap_distance)
17121739
AndroidScreenRotation.unlock()
1713-
17141740
'''
17151741
if touch.is_triple_tap:
17161742
print('Touch is a triple tap !')
1717-
print(' - interval is', touch.triple_tap_time)
1718-
print(' - distance between previous is', touch.triple_tap_distance)
1743+
AndroidScreenRotation.unlock()
17191744
'''
1745+
17201746
# (Eventloop reentrancy check)
17211747
if self.in_loop:
17221748
return ret

pysollib/kivy/menubar.py

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
from pysollib.kivy.LApp import LTopLevel
3838
from pysollib.kivy.LApp import LTreeNode
3939
from pysollib.kivy.LApp import LTreeRoot
40+
from pysollib.kivy.LApp import LTreeSliderNode
4041
from pysollib.kivy.LObjWrap import LBoolWrap
4142
from pysollib.kivy.LObjWrap import LListWrap
4243
from pysollib.kivy.LObjWrap import LNumWrap
@@ -133,6 +134,11 @@ def addRadioNode(self, tv, rg, title, auto_var, auto_val, auto_com):
133134
variable=auto_var, value=auto_val), rg)
134135
return rg1
135136

137+
def addSliderNode(self, tv, rg, auto_var, auto_setup):
138+
rg1 = tv.add_node(
139+
LTreeSliderNode(variable=auto_var, setup=auto_setup), rg)
140+
return rg1
141+
136142
# ************************************************************************
137143
# * Tree Generators
138144
# ************************************************************************
@@ -1259,6 +1265,38 @@ def buildTree(self, tv, node):
12591265
# -------------------------------------------
12601266
# general options
12611267

1268+
rg = tv.add_node(
1269+
LTreeNode(text=_('Font size')))
1270+
if rg:
1271+
self.addRadioNode(tv, rg,
1272+
_('default'),
1273+
self.menubar.tkopt.fontscale, 'default',
1274+
None)
1275+
self.addRadioNode(tv, rg,
1276+
_('tiny'),
1277+
self.menubar.tkopt.fontscale, 'tiny',
1278+
None)
1279+
self.addRadioNode(tv, rg,
1280+
_('small'),
1281+
self.menubar.tkopt.fontscale, 'small',
1282+
None)
1283+
self.addRadioNode(tv, rg,
1284+
_('normal'),
1285+
self.menubar.tkopt.fontscale, 'normal',
1286+
None)
1287+
self.addRadioNode(tv, rg,
1288+
_('large'),
1289+
self.menubar.tkopt.fontscale, 'large',
1290+
None)
1291+
self.addRadioNode(tv, rg,
1292+
_('huge'),
1293+
self.menubar.tkopt.fontscale, 'huge',
1294+
None)
1295+
'''
1296+
self.addSliderNode(tv, rg, self.menubar.tkopt.fontsizefactor,
1297+
(0.7, 2.0, 0.1))
1298+
'''
1299+
12621300
# self.addCheckNode(tv, None,
12631301
# 'Save games geometry',
12641302
# self.menubar.tkopt.save_games_geometry,
@@ -1433,6 +1471,25 @@ def unlockScreenRotation(self, obj, val):
14331471
AndroidScreenRotation.unlock(toaster=False)
14341472
print('unlock screen rotation')
14351473

1474+
def setFontScale(self, obj, val):
1475+
from kivy.metrics import Metrics
1476+
vals = {
1477+
'tiny': 0.833,
1478+
'small': 1.0,
1479+
'normal': 1.2,
1480+
'large': 1.44,
1481+
'huge': 1.728
1482+
}
1483+
if val == 'default':
1484+
Metrics.reset_metrics()
1485+
else:
1486+
Metrics.fontscale = vals[val]
1487+
'''
1488+
def setFontSize(self, obj, val):
1489+
from kivy.metrics import Metrics
1490+
Metrics.fontscale = val
1491+
'''
1492+
14361493
def _createTkOpt(self):
14371494
opt = self.app.opt
14381495

@@ -1536,6 +1593,8 @@ def _createTkOpt(self):
15361593
save_games_geometry=LBoolWrap(opt, "save_games_geometry"),
15371594
pause=LBoolWrap(self, "pause"),
15381595
table_zoom=LListWrap(opt, "table_zoom"),
1596+
fontscale=LStringWrap(opt, "fontscale", self.setFontScale),
1597+
# fontsizefactor=LNumWrap(opt, "fontsizefactor", self.setFontSize),
15391598
# cards
15401599
cardset=LNumWrap(self, "cardset"),
15411600
cardback=LNumWrap(self, "cardback"),
@@ -1554,9 +1613,10 @@ def _createTkOpt(self):
15541613
self.tkopt.color_vars[k] = LStringWrap(self.cvo, k)
15551614

15561615
def _setOptions(self):
1557-
# not supported
15581616
self.tkopt.save_games_geometry.value = False
15591617
self.getToolbarPos(None, Window.size)
1618+
self.setFontScale(None, self.tkopt.fontscale.value)
1619+
# self.setFontSize(None, self.tkopt.fontsizefactor.value)
15601620
Window.bind(size=self.getToolbarPos)
15611621

15621622
def getToolbarPos(self, obj, size):

pysollib/kivy/tkcanvas.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -653,21 +653,6 @@ def __init__(self, wmain, *args, **kw):
653653
self.bind(pos=self.pos_update_widget)
654654
self.bind(size=self.size_update_widget)
655655

656-
def on_touch_down(self,touch):
657-
ret = False
658-
ret = super(MfxCanvas,self).on_touch_down(touch)
659-
return ret
660-
661-
def on_touch_up(self,touch):
662-
ret = False
663-
ret = super(MfxCanvas,self).on_touch_up(touch)
664-
return ret
665-
666-
def on_touch_move(self,touch):
667-
ret = False
668-
ret = super(MfxCanvas,self).on_touch_move(touch)
669-
return ret
670-
671656
def KivyToCoreP(self, pos, size, scale):
672657
cpos = pos
673658
cpos = (cpos[0] - self.pos[0], self.pos[1] +

pysollib/kivy/tkwidget.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -441,11 +441,21 @@ def collide_point(self,x,y):
441441
return False
442442

443443
def on_touch_down(self, touch):
444-
if touch.is_double_tap: return False
444+
ret = False
445445
x,y = touch.pos
446446
if self.collide_point(x,y):
447-
return super(LScatterFrame, self).on_touch_down(touch)
448-
return False
447+
if touch.is_double_tap:
448+
# Do not use the event handling of scatter because scatter
449+
# does not allow to propagate an unhandled double tap back
450+
# to parent (it grabs the touch unseen if not
451+
# handled by a child!).
452+
touch.push()
453+
touch.apply_transform_2d(self.to_local)
454+
ret = self.inner.on_touch_down(touch)
455+
touch.pop()
456+
else:
457+
ret = super(LScatterFrame, self).on_touch_down(touch)
458+
return ret
449459

450460
def on_touch_up(self, touch):
451461
if touch.grab_current == self:

pysollib/options.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,8 @@ class Options:
324324
('display_win_message', 'bool'),
325325
('language', 'str'),
326326
# ('table_zoom', 'list'),
327+
('fontscale', 'str'),
328+
# ('fontsizefactor', 'float'),
327329
]
328330

329331
def __init__(self):
@@ -420,6 +422,8 @@ def __init__(self):
420422
self.display_win_message = True
421423
self.language = ''
422424
self.table_zoom = [1.0, 0.0, 0.0]
425+
self.fontscale = 'default' # (kivy, platform defaults)
426+
# self.fontsizefactor = 1.0
423427
# sound
424428
self.sound = True
425429
self.sound_mode = 1

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use_bzip2 = 1
77
[flake8]
88
extend-ignore = H101,H104,H201,H237,H301,H306,H403,H404,H405,
99
# remove some most ugly flakes:
10-
E211,E225,E231,E302,E305,E701,E741,W293
10+
E211,E221,E222,E225,E231,E302,E305,E701,E741,W293
1111

1212
[sdist]
1313
force_manifest = 1

0 commit comments

Comments
 (0)