annotate cagou/backport/carousel.py @ 353:19422bbd9c8e

core (widgets handler): refactoring: - CagouWidget now has class properties (to be overridden when needed) which indicate how if the widget handle must add a wrapping ScreenManager (global_screen_manager) or show all instances of the class in a Carousel (collection_carousel). If none of those options is used, a ScrollView will be wrapping the widget, to be sure that the widget will be resized correctly when necessary (without it, the widget could still be drawn in the backround when the size is too small and overflow on the WidgetWrapper, this would be the case with WidgetSelector) - some helper methods/properties have been added to CagouWidget. Check docstrings for details - better handling of (in)visible widget in WidgetsHandler - thanks to the new wrapping ScrollView, WidgetSelect will show scroll bars if the available space is too small. - bugs fixes
author Goffi <goffi@goffi.org>
date Fri, 17 Jan 2020 18:44:35 +0100
parents 5bd583d00594
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
323
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
2 Carousel
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
3 ========
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
4
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
5 .. image:: images/carousel.gif
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 :align: right
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
7
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 .. versionadded:: 1.4.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
9
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
10 The :class:`Carousel` widget provides the classic mobile-friendly carousel view
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 where you can swipe between slides.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 You can add any content to the carousel and have it move horizontally or
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 vertically. The carousel can display pages in a sequence or a loop.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
14
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
15 Example::
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
16
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 from kivy.app import App
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
18 from kivy.uix.carousel import Carousel
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
19 from kivy.uix.image import AsyncImage
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
20
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
21
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
22 class CarouselApp(App):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
23 def build(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 carousel = Carousel(direction='right')
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 for i in range(10):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 src = "http://placehold.it/480x270.png&text=slide-%d&.png" % i
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 image = AsyncImage(source=src, allow_stretch=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 carousel.add_widget(image)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
29 return carousel
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
30
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
31
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 CarouselApp().run()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
33
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
34
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 Kv Example::
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
36
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
37 Carousel:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 direction: 'right'
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 AsyncImage:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 source: 'http://placehold.it/480x270.png&text=slide-1.png'
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 AsyncImage:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 source: 'http://placehold.it/480x270.png&text=slide-2.png'
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 AsyncImage:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
44 source: 'http://placehold.it/480x270.png&text=slide-3.png'
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
45 AsyncImage:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 source: 'http://placehold.it/480x270.png&text=slide-4.png'
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
47
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
48
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 .. versionchanged:: 1.5.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
50 The carousel now supports active children, like the
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 :class:`~kivy.uix.scrollview.ScrollView`. It will detect a swipe gesture
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
52 according to the :attr:`Carousel.scroll_timeout` and
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
53 :attr:`Carousel.scroll_distance` properties.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
54
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
55 In addition, the slide container is no longer exposed by the API.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
56 The impacted properties are
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 :attr:`Carousel.slides`, :attr:`Carousel.current_slide`,
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 :attr:`Carousel.previous_slide` and :attr:`Carousel.next_slide`.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
59
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
61
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
62 __all__ = ('Carousel', )
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
63
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
64 from functools import partial
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 from kivy.clock import Clock
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
66 from kivy.factory import Factory
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
67 from kivy.animation import Animation
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
68 from kivy.uix.stencilview import StencilView
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
69 from kivy.uix.relativelayout import RelativeLayout
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 from kivy.properties import BooleanProperty, OptionProperty, AliasProperty, \
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
71 NumericProperty, ListProperty, ObjectProperty, StringProperty
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
72
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
73
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
74 class Carousel(StencilView):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
75 '''Carousel class. See module documentation for more information.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
77
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 slides = ListProperty([])
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 '''List of slides inside the Carousel. The slides are the
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
80 widgets added to the Carousel using the :attr:`add_widget` method.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
81
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 :attr:`slides` is a :class:`~kivy.properties.ListProperty` and is
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
83 read-only.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
85
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 def _get_slides_container(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 return [x.parent for x in self.slides]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
88
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 slides_container = AliasProperty(_get_slides_container, bind=('slides',))
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
90
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
91 direction = OptionProperty('right',
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
92 options=('right', 'left', 'top', 'bottom'))
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
93 '''Specifies the direction in which the slides are ordered. This
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
94 corresponds to the direction from which the user swipes to go from one
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
95 slide to the next. It
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
96 can be `right`, `left`, `top`, or `bottom`. For example, with
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
97 the default value of `right`, the second slide is to the right
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
98 of the first and the user would swipe from the right towards the
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
99 left to get to the second slide.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
100
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
101 :attr:`direction` is an :class:`~kivy.properties.OptionProperty` and
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
102 defaults to 'right'.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
103 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
104
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
105 min_move = NumericProperty(0.2)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
106 '''Defines the minimum distance to be covered before the touch is
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
107 considered a swipe gesture and the Carousel content changed.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
108 This is a expressed as a fraction of the Carousel's width.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
109 If the movement doesn't reach this minimum value, the movement is
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
110 cancelled and the content is restored to its original position.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
111
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
112 :attr:`min_move` is a :class:`~kivy.properties.NumericProperty` and
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
113 defaults to 0.2.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
114 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
115
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
116 anim_move_duration = NumericProperty(0.5)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
117 '''Defines the duration of the Carousel animation between pages.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
118
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
119 :attr:`anim_move_duration` is a :class:`~kivy.properties.NumericProperty`
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
120 and defaults to 0.5.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
121 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
122
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
123 anim_cancel_duration = NumericProperty(0.3)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
124 '''Defines the duration of the animation when a swipe movement is not
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
125 accepted. This is generally when the user does not make a large enough
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 swipe. See :attr:`min_move`.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
127
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
128 :attr:`anim_cancel_duration` is a :class:`~kivy.properties.NumericProperty`
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
129 and defaults to 0.3.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
130 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
131
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
132 loop = BooleanProperty(False)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
133 '''Allow the Carousel to loop infinitely. If True, when the user tries to
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
134 swipe beyond last page, it will return to the first. If False, it will
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
135 remain on the last page.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
136
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
137 :attr:`loop` is a :class:`~kivy.properties.BooleanProperty` and
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
138 defaults to False.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
139 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
140
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
141 def _get_index(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
142 if self.slides:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
143 return self._index % len(self.slides)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
144 return None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
145
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
146 def _set_index(self, value):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
147 if self.slides:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
148 self._index = value % len(self.slides)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
149 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
150 self._index = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
151
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
152 index = AliasProperty(_get_index, _set_index,
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
153 bind=('_index', 'slides'),
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
154 cache=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
155 '''Get/Set the current slide based on the index.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
156
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
157 :attr:`index` is an :class:`~kivy.properties.AliasProperty` and defaults
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
158 to 0 (the first item).
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
159 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
160
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
161 def _prev_slide(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
162 slides = self.slides
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
163 len_slides = len(slides)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
164 index = self.index
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
165 if len_slides < 2: # None, or 1 slide
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
166 return None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
167 if self.loop and index == 0:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
168 return slides[-1]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
169 if index > 0:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
170 return slides[index - 1]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
171
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
172 previous_slide = AliasProperty(_prev_slide,
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
173 bind=('slides', 'index', 'loop'),
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
174 cache=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
175 '''The previous slide in the Carousel. It is None if the current slide is
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
176 the first slide in the Carousel. This ordering reflects the order in which
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
177 the slides are added: their presentation varies according to the
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
178 :attr:`direction` property.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
179
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
180 :attr:`previous_slide` is an :class:`~kivy.properties.AliasProperty`.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
181
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
182 .. versionchanged:: 1.5.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
183 This property no longer exposes the slides container. It returns
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
184 the widget you have added.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
185 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
186
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
187 def _curr_slide(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
188 if len(self.slides):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
189 return self.slides[self.index or 0]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
190
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
191 current_slide = AliasProperty(_curr_slide,
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
192 bind=('slides', 'index'),
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
193 cache=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
194 '''The currently shown slide.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
195
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
196 :attr:`current_slide` is an :class:`~kivy.properties.AliasProperty`.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
197
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
198 .. versionchanged:: 1.5.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
199 The property no longer exposes the slides container. It returns
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
200 the widget you have added.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
201 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
202
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
203 def _next_slide(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
204 if len(self.slides) < 2: # None, or 1 slide
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
205 return None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
206 if self.loop and self.index == len(self.slides) - 1:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
207 return self.slides[0]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
208 if self.index < len(self.slides) - 1:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
209 return self.slides[self.index + 1]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
210
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
211 next_slide = AliasProperty(_next_slide,
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
212 bind=('slides', 'index', 'loop'),
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
213 cache=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
214 '''The next slide in the Carousel. It is None if the current slide is
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
215 the last slide in the Carousel. This ordering reflects the order in which
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
216 the slides are added: their presentation varies according to the
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
217 :attr:`direction` property.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
218
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
219 :attr:`next_slide` is an :class:`~kivy.properties.AliasProperty`.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
220
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
221 .. versionchanged:: 1.5.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
222 The property no longer exposes the slides container.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
223 It returns the widget you have added.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
224 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
225
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
226 scroll_timeout = NumericProperty(200)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
227 '''Timeout allowed to trigger the :attr:`scroll_distance`, in milliseconds.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
228 If the user has not moved :attr:`scroll_distance` within the timeout,
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
229 no scrolling will occur and the touch event will go to the children.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
230
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
231 :attr:`scroll_timeout` is a :class:`~kivy.properties.NumericProperty` and
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
232 defaults to 200 (milliseconds)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
233
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
234 .. versionadded:: 1.5.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
235 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
236
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
237 scroll_distance = NumericProperty('20dp')
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
238 '''Distance to move before scrolling the :class:`Carousel` in pixels. As
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
239 soon as the distance has been traveled, the :class:`Carousel` will start
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
240 to scroll, and no touch event will go to children.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
241 It is advisable that you base this value on the dpi of your target device's
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
242 screen.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
243
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
244 :attr:`scroll_distance` is a :class:`~kivy.properties.NumericProperty` and
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
245 defaults to 20dp.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
246
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
247 .. versionadded:: 1.5.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
248 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
249
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 anim_type = StringProperty('out_quad')
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
251 '''Type of animation to use while animating to the next/previous slide.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
252 This should be the name of an
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
253 :class:`~kivy.animation.AnimationTransition` function.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
254
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
255 :attr:`anim_type` is a :class:`~kivy.properties.StringProperty` and
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
256 defaults to 'out_quad'.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
257
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
258 .. versionadded:: 1.8.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
259 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
260
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
261 ignore_perpendicular_swipes = BooleanProperty(False)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
262 '''Ignore swipes on axis perpendicular to direction.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
263
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
264 :attr:`ignore_perpendicular_swipes` is a
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
265 :class:`~kivy.properties.BooleanProperty` and defaults to False.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
266
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
267 .. versionadded:: 1.10.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
268 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
269
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
270 # private properties, for internal use only ###
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
271 _index = NumericProperty(0, allownone=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
272 _prev = ObjectProperty(None, allownone=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
273 _current = ObjectProperty(None, allownone=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
274 _next = ObjectProperty(None, allownone=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
275 _offset = NumericProperty(0)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
276 _touch = ObjectProperty(None, allownone=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
277
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
278 _change_touch_mode_ev = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
279
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
280 def __init__(self, **kwargs):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
281 self._trigger_position_visible_slides = Clock.create_trigger(
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
282 self._position_visible_slides, -1)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
283 super(Carousel, self).__init__(**kwargs)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
284 self._skip_slide = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
285 self.touch_mode_change = False
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
286 self._prioritize_next = False
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
287 self.fbind('loop', lambda *args: self._insert_visible_slides())
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
288
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
289 def load_slide(self, slide):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
290 '''Animate to the slide that is passed as the argument.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
291
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
292 .. versionchanged:: 1.8.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
293 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
294 slides = self.slides
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
295 start, stop = slides.index(self.current_slide), slides.index(slide)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
296 if start == stop:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
297 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
298
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
299 self._skip_slide = stop
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
300 if stop > start:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
301 self._prioritize_next = True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
302 self._insert_visible_slides(_next_slide=slide)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
303 self.load_next()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
304 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
305 self._prioritize_next = False
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
306 self._insert_visible_slides(_prev_slide=slide)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
307 self.load_previous()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
308
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
309 def load_previous(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
310 '''Animate to the previous slide.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
311
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
312 .. versionadded:: 1.7.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
313 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
314 self.load_next(mode='prev')
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
315
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
316 def load_next(self, mode='next'):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
317 '''Animate to the next slide.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
318
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
319 .. versionadded:: 1.7.0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
320 '''
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
321 if self.index is not None:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
322 w, h = self.size
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
323 _direction = {
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
324 'top': -h / 2,
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
325 'bottom': h / 2,
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
326 'left': w / 2,
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
327 'right': -w / 2}
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
328 _offset = _direction[self.direction]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
329 if mode == 'prev':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
330 _offset = -_offset
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
331
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
332 self._start_animation(min_move=0, offset=_offset)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
333
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
334 def get_slide_container(self, slide):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
335 return slide.parent
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
336
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
337 @property
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
338 def _prev_equals_next(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
339 return self.loop and len(self.slides) == 2
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
340
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
341 def _insert_visible_slides(self, _next_slide=None, _prev_slide=None):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
342 get_slide_container = self.get_slide_container
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
343
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
344 previous_slide = _prev_slide if _prev_slide else self.previous_slide
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
345 if previous_slide:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
346 self._prev = get_slide_container(previous_slide)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
347 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
348 self._prev = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
349
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
350 current_slide = self.current_slide
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
351 if current_slide:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
352 self._current = get_slide_container(current_slide)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
353 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
354 self._current = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
355
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
356 next_slide = _next_slide if _next_slide else self.next_slide
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
357 if next_slide:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
358 self._next = get_slide_container(next_slide)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
359 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
360 self._next = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
361
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
362 if self._prev_equals_next:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
363 setattr(self, '_prev' if self._prioritize_next else '_next', None)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
364
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
365 super_remove = super(Carousel, self).remove_widget
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
366 for container in self.slides_container:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
367 super_remove(container)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
368
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
369 if self._prev and self._prev.parent is not self:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
370 super(Carousel, self).add_widget(self._prev)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
371 if self._next and self._next.parent is not self:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
372 super(Carousel, self).add_widget(self._next)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
373 if self._current:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
374 super(Carousel, self).add_widget(self._current)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
375
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
376 def _position_visible_slides(self, *args):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
377 slides, index = self.slides, self.index
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
378 no_of_slides = len(slides) - 1
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
379 if not slides:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
380 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
381 x, y, width, height = self.x, self.y, self.width, self.height
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
382 _offset, direction = self._offset, self.direction[0]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
383 _prev, _next, _current = self._prev, self._next, self._current
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
384 get_slide_container = self.get_slide_container
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
385 last_slide = get_slide_container(slides[-1])
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
386 first_slide = get_slide_container(slides[0])
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
387 skip_next = False
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
388 _loop = self.loop
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
389
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
390 if direction in 'rl':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
391 xoff = x + _offset
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
392 x_prev = {'l': xoff + width, 'r': xoff - width}
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
393 x_next = {'l': xoff - width, 'r': xoff + width}
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
394 if _prev:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
395 _prev.pos = (x_prev[direction], y)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
396 elif _loop and _next and index == 0:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
397 # if first slide is moving to right with direction set to right
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
398 # or toward left with direction set to left
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
399 if ((_offset > 0 and direction == 'r') or
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
400 (_offset < 0 and direction == 'l')):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
401 # put last_slide before first slide
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
402 last_slide.pos = (x_prev[direction], y)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
403 skip_next = True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
404 if _current:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
405 _current.pos = (xoff, y)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
406 if skip_next:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
407 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
408 if _next:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
409 _next.pos = (x_next[direction], y)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
410 elif _loop and _prev and index == no_of_slides:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
411 if ((_offset < 0 and direction == 'r') or
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
412 (_offset > 0 and direction == 'l')):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
413 first_slide.pos = (x_next[direction], y)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
414 if direction in 'tb':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
415 yoff = y + _offset
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
416 y_prev = {'t': yoff - height, 'b': yoff + height}
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
417 y_next = {'t': yoff + height, 'b': yoff - height}
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
418 if _prev:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
419 _prev.pos = (x, y_prev[direction])
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
420 elif _loop and _next and index == 0:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
421 if ((_offset > 0 and direction == 't') or
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
422 (_offset < 0 and direction == 'b')):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
423 last_slide.pos = (x, y_prev[direction])
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
424 skip_next = True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
425 if _current:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
426 _current.pos = (x, yoff)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
427 if skip_next:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
428 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
429 if _next:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
430 _next.pos = (x, y_next[direction])
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
431 elif _loop and _prev and index == no_of_slides:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
432 if ((_offset < 0 and direction == 't') or
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
433 (_offset > 0 and direction == 'b')):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
434 first_slide.pos = (x, y_next[direction])
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
435
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
436 def on_size(self, *args):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
437 size = self.size
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
438 for slide in self.slides_container:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
439 slide.size = size
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
440 self._trigger_position_visible_slides()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
441
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
442 def on_pos(self, *args):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
443 self._trigger_position_visible_slides()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
444
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
445 def on_index(self, *args):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
446 self._insert_visible_slides()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
447 self._trigger_position_visible_slides()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
448 self._offset = 0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
449
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
450 def on_slides(self, *args):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
451 if self.slides:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
452 self.index = self.index % len(self.slides)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
453 self._insert_visible_slides()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
454 self._trigger_position_visible_slides()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
455
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
456 def on__offset(self, *args):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
457 self._trigger_position_visible_slides()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
458 # if reached full offset, switch index to next or prev
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
459 direction = self.direction[0]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
460 _offset = self._offset
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
461 width = self.width
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
462 height = self.height
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
463 index = self.index
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
464 if self._skip_slide is not None or index is None:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
465 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
466
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
467 # Move to next slide?
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
468 if (direction == 'r' and _offset <= -width) or \
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
469 (direction == 'l' and _offset >= width) or \
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
470 (direction == 't' and _offset <= - height) or \
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
471 (direction == 'b' and _offset >= height):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
472 if self.next_slide:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
473 self.index += 1
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
474
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
475 # Move to previous slide?
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
476 elif (direction == 'r' and _offset >= width) or \
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
477 (direction == 'l' and _offset <= -width) or \
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
478 (direction == 't' and _offset >= height) or \
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
479 (direction == 'b' and _offset <= -height):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
480 if self.previous_slide:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
481 self.index -= 1
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
482
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
483 elif self._prev_equals_next:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
484 new_value = (_offset < 0) is (direction in 'rt')
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
485 if self._prioritize_next is not new_value:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
486 self._prioritize_next = new_value
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
487 if new_value is (self._next is None):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
488 self._prev, self._next = self._next, self._prev
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
489
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
490 def _start_animation(self, *args, **kwargs):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
491 # compute target offset for ease back, next or prev
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
492 new_offset = 0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
493 direction = kwargs.get('direction', self.direction)[0]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
494 is_horizontal = direction in 'rl'
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
495 extent = self.width if is_horizontal else self.height
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
496 min_move = kwargs.get('min_move', self.min_move)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
497 _offset = kwargs.get('offset', self._offset)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
498
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
499 if _offset < min_move * -extent:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
500 new_offset = -extent
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
501 elif _offset > min_move * extent:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
502 new_offset = extent
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
503
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
504 # if new_offset is 0, it wasnt enough to go next/prev
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
505 dur = self.anim_move_duration
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
506 if new_offset == 0:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
507 dur = self.anim_cancel_duration
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
508
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
509 # detect edge cases if not looping
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
510 len_slides = len(self.slides)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
511 index = self.index
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
512 if not self.loop or len_slides == 1:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
513 is_first = (index == 0)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
514 is_last = (index == len_slides - 1)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
515 if direction in 'rt':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
516 towards_prev = (new_offset > 0)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
517 towards_next = (new_offset < 0)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
518 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
519 towards_prev = (new_offset < 0)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
520 towards_next = (new_offset > 0)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
521 if (is_first and towards_prev) or (is_last and towards_next):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
522 new_offset = 0
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
523
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
524 anim = Animation(_offset=new_offset, d=dur, t=self.anim_type)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
525 anim.cancel_all(self)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
526
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
527 def _cmp(*l):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
528 if self._skip_slide is not None:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
529 self.index = self._skip_slide
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
530 self._skip_slide = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
531
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
532 anim.bind(on_complete=_cmp)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
533 anim.start(self)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
534
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
535 def _get_uid(self, prefix='sv'):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
536 return '{0}.{1}'.format(prefix, self.uid)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
537
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
538 def on_touch_down(self, touch):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
539 if not self.collide_point(*touch.pos):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
540 touch.ud[self._get_uid('cavoid')] = True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
541 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
542 if self.disabled:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
543 return True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
544 if self._touch:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
545 return super(Carousel, self).on_touch_down(touch)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
546 Animation.cancel_all(self)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
547 self._touch = touch
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
548 uid = self._get_uid()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
549 touch.grab(self)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
550 touch.ud[uid] = {
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
551 'mode': 'unknown',
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
552 'time': touch.time_start}
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
553 self._change_touch_mode_ev = Clock.schedule_once(
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
554 self._change_touch_mode, self.scroll_timeout / 1000.)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
555 self.touch_mode_change = False
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
556 return True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
557
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
558 def on_touch_move(self, touch):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
559 if not self.touch_mode_change:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
560 if self.ignore_perpendicular_swipes and \
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
561 self.direction in ('top', 'bottom'):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
562 if abs(touch.oy - touch.y) < self.scroll_distance:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
563 if abs(touch.ox - touch.x) > self.scroll_distance:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
564 self._change_touch_mode()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
565 self.touch_mode_change = True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
566 elif self.ignore_perpendicular_swipes and \
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
567 self.direction in ('right', 'left'):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
568 if abs(touch.ox - touch.x) < self.scroll_distance:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
569 if abs(touch.oy - touch.y) > self.scroll_distance:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
570 self._change_touch_mode()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
571 self.touch_mode_change = True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
572
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
573 if self._get_uid('cavoid') in touch.ud:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
574 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
575 if self._touch is not touch:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
576 super(Carousel, self).on_touch_move(touch)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
577 return self._get_uid() in touch.ud
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
578 if touch.grab_current is not self:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
579 return True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
580 ud = touch.ud[self._get_uid()]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
581 direction = self.direction[0]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
582 if ud['mode'] == 'unknown':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
583 if direction in 'rl':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
584 distance = abs(touch.ox - touch.x)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
585 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
586 distance = abs(touch.oy - touch.y)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
587 if distance > self.scroll_distance:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
588 ev = self._change_touch_mode_ev
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
589 if ev is not None:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
590 ev.cancel()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
591 ud['mode'] = 'scroll'
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
592 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
593 if direction in 'rl':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
594 self._offset += touch.dx
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
595 if direction in 'tb':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
596 self._offset += touch.dy
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
597 return True
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
598
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
599 def on_touch_up(self, touch):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
600 if self._get_uid('cavoid') in touch.ud:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
601 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
602 if self in [x() for x in touch.grab_list]:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
603 touch.ungrab(self)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
604 self._touch = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
605 ud = touch.ud[self._get_uid()]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
606 if ud['mode'] == 'unknown':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
607 ev = self._change_touch_mode_ev
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
608 if ev is not None:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
609 ev.cancel()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
610 super(Carousel, self).on_touch_down(touch)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
611 Clock.schedule_once(partial(self._do_touch_up, touch), .1)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
612 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
613 self._start_animation()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
614
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
615 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
616 if self._touch is not touch and self.uid not in touch.ud:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
617 super(Carousel, self).on_touch_up(touch)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
618 return self._get_uid() in touch.ud
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
619
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
620 def _do_touch_up(self, touch, *largs):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
621 super(Carousel, self).on_touch_up(touch)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
622 # don't forget about grab event!
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
623 for x in touch.grab_list[:]:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
624 touch.grab_list.remove(x)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
625 x = x()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
626 if not x:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
627 continue
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
628 touch.grab_current = x
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
629 super(Carousel, self).on_touch_up(touch)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
630 touch.grab_current = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
631
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
632 def _change_touch_mode(self, *largs):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
633 if not self._touch:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
634 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
635 self._start_animation()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
636 uid = self._get_uid()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
637 touch = self._touch
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
638 ud = touch.ud[uid]
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
639 if ud['mode'] == 'unknown':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
640 touch.ungrab(self)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
641 self._touch = None
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
642 super(Carousel, self).on_touch_down(touch)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
643 return
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
644
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
645 def add_widget(self, widget, index=0, canvas=None):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
646 container = RelativeLayout(
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
647 size=self.size, x=self.x - self.width, y=self.y)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
648 container.add_widget(widget)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
649 super(Carousel, self).add_widget(container, index, canvas)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
650 if index != 0:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
651 self.slides.insert(index - len(self.slides), widget)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
652 else:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
653 self.slides.append(widget)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
654
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
655 def remove_widget(self, widget, *args, **kwargs):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
656 # XXX be careful, the widget.parent refer to the RelativeLayout
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
657 # added in add_widget(). But it will break if RelativeLayout
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
658 # implementation change.
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
659 # if we passed the real widget
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
660 slides = self.slides
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
661 if widget in slides:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
662 if self.index >= slides.index(widget):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
663 self.index = max(0, self.index - 1)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
664 container = widget.parent
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
665 slides.remove(widget)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
666 super(Carousel, self).remove_widget(container)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
667 return container.remove_widget(widget, *args, **kwargs)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
668 return super(Carousel, self).remove_widget(widget, *args, **kwargs)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
669
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
670 def clear_widgets(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
671 for slide in self.slides[:]:
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
672 self.remove_widget(slide)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
673 super(Carousel, self).clear_widgets()
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
674
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
675
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
676 if __name__ == '__main__':
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
677 from kivy.app import App
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
678
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
679 class Example1(App):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
680
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
681 def build(self):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
682 carousel = Carousel(direction='left',
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
683 loop=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
684 for i in range(4):
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
685 src = "http://placehold.it/480x270.png&text=slide-%d&.png" % i
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
686 image = Factory.AsyncImage(source=src, allow_stretch=True)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
687 carousel.add_widget(image)
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
688 return carousel
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
689
5bd583d00594 backport: added a new "backport" module for using unreleased code from Kivy:
Goffi <goffi@goffi.org>
parents:
diff changeset
690 Example1().run()