-
-
Notifications
You must be signed in to change notification settings - Fork 3k
GestureBox
panthertrader edited this page May 4, 2017
·
1 revision
from kivy.app import App
from kivy.event import EventDispatcher
from kivy.lang import Builder
from kivy.gesture import Gesture, GestureDatabase
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.graphics.vertex_instructions import Line
# execute gesturebox of kivy examples for more gestures:
#/usr/share/kivy-examples/gestures
gesture_strings={
"left_to_right_line":'eNq1l0tu2zAQhve8SLypwXlxOBdwtwVygMJJBMdIawu20za373CSpg9UljbMIoqpnx8pfsPIXO2f9t9e1rvhfHk+Denj23XMafUwQrq9OWy/DjdpRP/TL5TOtzfny+n4NJz9I6fVl1HS6r+Q24ilsTSUev/xuD9cWrfautlEt08tlUZ4nUGbwot3AUybD3mdM2UoYoACtQqJtQn9aAGKALOxYrYilA3Mb99tr4/DMY6kXRuijZCdTRVLZkLOGUzSefcLD363vP/21ll+PD7oMj6RZPNHBCn+bKbz+Bp464THsICwDI9qQspScq6Z2Zd2lo/Bp278sIsL7QIjVhTh7DUkVhesT9hF7cYPvWi9+BR+Cbrxwy8t9JuLAhiI72v2jYzzu4vCL0k3fvgl7cYPv7TEr98EluotkCWrmu+DWT6HX4Zu/PDLtIiPQn9WEM+XD4dell74sMvaCx9y2TrhJdwK9MKHWumlVkKt9FIroVZ6qZVQK8vUEoIWU3/5EjPZ/K4qYbZAJ3qILcvEsgoVFl8VLVisztPDa5FO9NBatBM9rBbrQ9ewqtCJHlZ1mVUBIEAvHPD/8prn31MaVnWZVZEs/lUtExfLMfN2aLg/DcPh/QigpZ0BVNNqgyDrnDZewH65jFrTtjXqa2NpY/3+KS1hkcDpRM2RkDydgEiUKwxsCT9FTCcoEoTTCY6EXBlFWoLpykxLJASmExoJq//emojHAsu1B4sFFpwe0nyBX70+Dvvd48WNGqQN/J0U31Ae+b5/uDy2hJcOZae1xsvxy3DaHu7b4dKibKA1v5Xf5/F0fHi+Dy57r7UXGvqJjyv6qUv8tXG+W/8EE0/L+Q=='
,'right_to_left_line': 'eNq1l01u2zAQRve8SLyJMP8kL5BuC+QAhZsIjpHWFmylbW5fcuQGFtpE6oLaWP7MeST9aJra7J/3P167XX8eX059+HR5HSBsHgcM9zeH7ff+JgxUbssLh/P9zXk8HZ/7c3krYfNt0LD5J+Tem4XBKiqW+uG4P4y1LNWy/E7Z59oqDDiNoA7htZQghTvqiEDEQDIpMHJ/i1YH9Ks24HAHnURhRBGwGLMZxXD+uv24H/F+NOw+6GJ3oYMpSmJQSKWnvAz3uWNsA08Oz2vgHMnQlFSo3JYWi3Ty759wFV0oq07j1mhqy3RyOq+hkyaC7GSKiFmW6e6UtBHdpdIqqYSa2JJdVmRa8b27Vcpt6OxWeZVVSEDCf+AWaZnuVpkb0d0qayO6W+XYiO5WeZVVgP9dkeJWBRvR3aqssHoLHbImTfC2FyzT3apoI7pbldiI7lYlt6GrW1VsRHerus5qWSmiWNeLbzbL+4y6VdVGdLeqsRHdrWpuQze3auusMisgaObSijnjMt2tGjeiu1VbZ5UzQFbmlKczzTLdrVpsRHerts5q+Q0lQQS0LBmXpUaXGrEN3J1GbgN3pXGdUskGFKczZEo4na7rA8HDqe8Pb8f7svuU832MYXNnEjso3FT+eMI4xBS2NbRZmD1kvA4TeEg8C9FDnJUnqqHmecgepnkoHqrMQvWQZ+NM5iHMe481lDgfp89IVLt8fclVC5+eyIyVfXpSp3d92VULn6tgmpXRFOL7ZWXik5Snfr97GouOOpj6Ycl+7h/HpxppqeC/xlxajMdv/Wl7eKjPfNlqIdb4sni+DKfj48uDU2NdLhmoHPdT2UmorLv6zNL9BloawHs='
,'top_to_bottom_line': 'eNq1l0tu2zAQhve6SLyJMS9yOBdItwVygCJNhMRomwi2+7p9hyNVptq0BSrIGyW/yY/ifBRN7Q4fDl++7x/70/nzse/eTNcBut3DgN3t1fPdp/6qG8j/9At3p9ur0/n48qE/+b/S7T4Oqdu9CrmNZt2QK0q9//ByeD7XbqV2sz90e1tbdQOOd1Bv4bt3QepuYJ8JzRhJUVRzsno33+q3XL8FKFmyGCY0LZoNu9P7u7+PIjFK6h7HAVLKCggMRlpYcnd6/H92TBx1E3YJtv1kS+IMhUSFKBdw7gi/rnTM2UfMhUFJlfM/6RS1J9yITkHnjehhlGajI1SQWBGZ80p6OKXZKaMlN0al+GpUW3vvYZVsGzqHVcaN6GGVZ6tUEpHX25ezJhN/xFbRwyrPVgkZUhE0Erbi/HX0sMq6ET2ssm1Dl7Aqs1UsC76spIdVma0i5ERGYLETk66zKmFV0kb0sCqzVchFm1WZaB09rMpk9Zr2RCCSQYwSMHJ/jXnVACnEJtxugHCbJreV0Vaf/YdrFT3cprQRPdwmnenIKklrgZSTP1br6OE22Tb0HGIzbkQPq/liFb1zkaKmvm5KXrfqc1jNF6vtHp/A95x1+NCadSt8eM0XrwwkkMQKFfST1zq6hlfFjejhVS9eGbMfGAlI/eTo55t19PCqF68sCmrAWqDum//caeprwf2x75/nQ7738VO+are74Ux76G5coF/Og5burglhDK0JxSTCAm1YaAyxDTWNIUWYLMI0teQ2FB5DaUOcwtSGMIW5Cfnn6NqGSntrP1JblLZFGudcrA1lnLNBG9IUYhtOJbN2elSmlu30/J1oDNvpUfLqtB+uLdq5kthyBlpbtBMnplcYbRWIyjh0WYT5lW62aDFWFAEWKfx+Qwj4S5Pf0AiLEqFN7EWNME/pokgor42YfmkydlxUBnFKF9VAmFIvx/hkPPWHx6dzfU8F8wZWu3n89fBwfqopVtNjdn752B/vnu/7yDFORTWfHtt3w/Hl4fN9sOqT6svPT3rieztY3RD8hHx6v/8BCAwPRg=='
,'bottom_to_top_line': 'eNq1l8GO2jAQhu9+EbgU2R6Px/MC9FqJB6goRCzaLUSQbbtvX3scJfYuXSoh+xJifn+e+DMhWR6fj7/eVofuOrxeOvV1PPZaLfe9UZvFafuzW6jexo/xAOq6WVyHy/m5u8ZTp5YvParlTchGYqr3CUVxfH8+noY0LKRh/I9h31JK9SZXkEp4i0OMVesveoVkqpbK+ZO+BvlaG6ctzQ3V9cf282mcTIPqMM7gGHw9w2GCGyzgQcN9uly7oUb0IHSe6aam40N4KwasaYW3godWeBFrZ7HgK7p+EC9m7WwW6uofg4tYy03gIFph1mqw+knp8BhetAK0wotWwFZ40QrUCi9igRvhnah1s1rNodg38ewxvKh10Aovat2oNiIw1O0xuph11IguYh23oaN4RdOILloRGtHFKk5WDULJZl/QtS/pbO7DRSpSG7g4RW4C96LUT0qtNiWdy38nXS06cdzKd/Hi1E9ObVV6YBjxiQ6O7NQ08324KPWTUtA1fGbHe0LBNv4/1kWMemrCFqGeW7BJfNLkE8DDrc2S4FjCLd23SWKTJpsQSnhRt63rpvtkUUmTSmerbUifo9O7wO7SdafpyT5eTHy0J1LLtdOw0mqNfsVlC14NPQW1TQmXEt7VCUoBLgKBPgaCLgLG8I2EKRPA8RA7bdnp0/YvGqQEFAlrMQ9zZafzN4ZhkQA9zuZzJ9bVuZhwlBOUE0GGeZ87x9Xhj8OCyYm8PEZW2I2zcV4Sg3V1Piaszom8JIZkmNPvgzFhywTC+wpiAqpEXh92VWe+tngP2+ZN8tQdD09D3B6citGpmNj7+7gfnlInRRUu9w3nl+6yPe3SK2d8nEh33dQ9bt7v/eW8f90JiaOIFWkKhuMflneGCdPr3uovChLZTw=='
}
gestures = GestureDatabase()
for name, gesture_string in gesture_strings.items():
gesture = gestures.str_to_gesture(gesture_string)
gesture.name = name
gestures.add_gesture(gesture)
root = Builder.load_string('''
FloatLayout:
''')
class GestureBox(Widget):
def __init__(self,**kwargs):
for name,gst_string in gesture_strings.items():
self.register_event_type("on_{}".format(name))
super(GestureBox,self).__init__(**kwargs)
def on_left_to_right_line(self):
print("left to right gesture occured" )
pass
def on_right_to_left_line(self):
print("right to left occured")
pass
def on_top_to_bottom_line(self):
pass
def on_bottom_to_top_line(self):
pass
def on_touch_down(self, touch):
touch.ud['gesture_line'] = Line(points=(touch.x, touch.y))
super (GestureBox, self).on_touch_down(touch)
def on_touch_move(self, touch):
touch.ud['gesture_line'].points += [touch.x, touch.y]
super(GestureBox, self).on_touch_move(touch)
def on_touch_up(self, touch):
if "gesture_line" in touch.ud:
gesture = Gesture()
gesture.add_stroke(zip(touch.ud['gesture_line'].points[::2],
touch.ud['gesture_line'].points[1::2]))
gesture.normalize()
match = gestures.find(gesture, minscore=0.9)
if match:
self.dispatch('on_{}'.format(match[1].name))
else:
pass
#print("No gesture recognized")
super(GestureBox, self).on_touch_up(touch)
# compare the gestures
class MainApp(App):
def build(self):
return GestureBox()
if __name__ == '__main__':
MainApp().run()