You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.3 KiB
40 lines
1.3 KiB
11 years ago
|
from kivy.uix.carousel import Carousel
|
||
|
from kivy.clock import Clock
|
||
|
|
||
|
class CCarousel(Carousel):
|
||
|
|
||
|
def on_touch_move(self, touch):
|
||
|
if self._get_uid('cavoid') in touch.ud:
|
||
|
return
|
||
|
if self._touch is not touch:
|
||
|
super(Carousel, self).on_touch_move(touch)
|
||
|
return self._get_uid() in touch.ud
|
||
|
if touch.grab_current is not self:
|
||
|
return True
|
||
|
ud = touch.ud[self._get_uid()]
|
||
|
direction = self.direction
|
||
|
if ud['mode'] == 'unknown':
|
||
|
if direction[0] in ('r', 'l'):
|
||
|
distance = abs(touch.ox - touch.x)
|
||
|
else:
|
||
|
distance = abs(touch.oy - touch.y)
|
||
|
if distance > self.scroll_distance:
|
||
|
Clock.unschedule(self._change_touch_mode)
|
||
|
ud['mode'] = 'scroll'
|
||
|
else:
|
||
|
diff = 0
|
||
|
if direction[0] in ('r', 'l'):
|
||
|
diff = touch.dx
|
||
|
if direction[0] in ('t', 'b'):
|
||
|
diff = touch.dy
|
||
|
|
||
|
self._offset += diff * 1.27
|
||
|
return True
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
from kivy.app import runTouchApp
|
||
|
from kivy.uix.button import Button
|
||
|
cc = CCarousel()
|
||
|
for i in range(10):
|
||
|
cc.add_widget(Button(text=str(i)))
|
||
|
runTouchApp(cc)
|