예제 #1
0
    def test_smooth_scroll_end(self):
        EventLoop.ensure_window()
        win = EventLoop.window
        grid = _TestGrid()
        scroll = ScrollView(smooth_scroll_end=10)

        assert scroll.smooth_scroll_end == 10
        scroll.add_widget(grid)

        # XXX this shouldn't be needed, but previous tests apparently
        # don't cleanup
        while win.children:
            win.remove_widget(win.children[0])

        win.add_widget(scroll)

        # get widgets ready
        EventLoop.idle()

        e = scroll.effect_y
        assert e.velocity == 0

        touch = UTMotionEvent(
            "unittest", next(touch_id), {
                "x": scroll.center_x / float(win.width),
                "y": scroll.center_y / float(win.height),
            })

        touch.profile.append('button')
        touch.button = 'scrollup'

        EventLoop.post_dispatch_input("begin", touch)
        # EventLoop.post_dispatch_input("update", touch)
        assert e.velocity == 10 * scroll.scroll_wheel_distance
        EventLoop.idle()
        assert 0 < e.velocity < 10 * scroll.scroll_wheel_distance
        EventLoop.post_dispatch_input("end", touch)
        EventLoop.idle()
        assert 0 < e.velocity < 10 * scroll.scroll_wheel_distance

        # wait for velocity to die off
        while e.velocity:
            EventLoop.idle()

        touch = UTMotionEvent(
            "unittest", next(touch_id), {
                "x": scroll.center_x / float(win.width),
                "y": scroll.center_y / float(win.height),
            })
        touch.profile.append('button')
        touch.button = 'scrolldown'

        EventLoop.post_dispatch_input("begin", touch)
        # EventLoop.post_dispatch_input("update", touch)
        assert e.velocity == -10 * scroll.scroll_wheel_distance
        EventLoop.idle()
        assert 0 > e.velocity > -10 * scroll.scroll_wheel_distance
        EventLoop.post_dispatch_input("end", touch)
        EventLoop.idle()
        assert 0 > e.velocity > -10 * scroll.scroll_wheel_distance
예제 #2
0
    def test_vertical_scroll_doesnt_depend_on_lines_rendering(self):
        # TextInput.on_touch_down was checking the possibility to scroll_up
        # using the positions of the rendered lines' rects. These positions
        # don't change when the lines are skipped (e.g. during fast scroll
        # or ctrl+cursor_home) which lead to scroll freeze
        ti = self.make_scrollable_text_input()

        # move viewport to the first line
        ti.do_cursor_movement('cursor_home', control=True)
        self.advance_frames(1)
        assert ti._visible_lines_range == (0, 10)

        from kivy.base import EventLoop
        win = EventLoop.window

        # slowly scroll to the last line to render all lines at least once
        for _ in range(30):  # little overscroll is important for detection
            touch = UTMotionEvent(
                "unittest", next(touch_id), {
                    "x": ti.center_x / float(win.width),
                    "y": ti.center_y / float(win.height),
                })
            touch.profile.append('button')
            touch.button = 'scrollup'

            EventLoop.post_dispatch_input("begin", touch)
            EventLoop.post_dispatch_input("end", touch)
            self.advance_frames(1)
        assert ti._visible_lines_range == (20, 30)

        # jump to the first line again
        ti.do_cursor_movement('cursor_home', control=True)

        # temp fix: only change of cursor position triggers update as for now
        ti._trigger_update_graphics()

        self.advance_frames(1)
        assert ti._visible_lines_range == (0, 10)

        # scrolling up should work now
        touch = UTMotionEvent(
            "unittest", next(touch_id), {
                "x": ti.center_x / float(win.width),
                "y": ti.center_y / float(win.height),
            })
        touch.profile.append('button')
        touch.button = 'scrollup'
        EventLoop.post_dispatch_input("begin", touch)
        EventLoop.post_dispatch_input("end", touch)
        self.advance_frames(1)
        assert ti._visible_lines_range == (1, 11)
예제 #3
0
    def test_vertical_scroll_doesnt_depend_on_lines_rendering(self):
        # TextInput.on_touch_down was checking the possibility to scroll_up
        # using the positions of the rendered lines' rects. These positions
        # don't change when the lines are skipped (e.g. during fast scroll
        # or ctrl+cursor_home) which lead to scroll freeze
        ti = self.make_scrollable_text_input()

        # move viewport to the first line
        ti.do_cursor_movement('cursor_home', control=True)
        self.advance_frames(1)
        assert ti._visible_lines_range == (0, 10)

        from kivy.base import EventLoop
        win = EventLoop.window

        # slowly scroll to the last line to render all lines at least once
        for _ in range(30):  # little overscroll is important for detection
            touch = UTMotionEvent("unittest", next(touch_id), {
                "x": ti.center_x / float(win.width),
                "y": ti.center_y / float(win.height),
            })
            touch.profile.append('button')
            touch.button = 'scrollup'

            EventLoop.post_dispatch_input("begin", touch)
            EventLoop.post_dispatch_input("end", touch)
            self.advance_frames(1)
        assert ti._visible_lines_range == (20, 30)

        # jump to the first line again
        ti.do_cursor_movement('cursor_home', control=True)

        # temp fix: only change of cursor position triggers update as for now
        ti._trigger_update_graphics()

        self.advance_frames(1)
        assert ti._visible_lines_range == (0, 10)

        # scrolling up should work now
        touch = UTMotionEvent("unittest", next(touch_id), {
            "x": ti.center_x / float(win.width),
            "y": ti.center_y / float(win.height),
        })
        touch.profile.append('button')
        touch.button = 'scrollup'
        EventLoop.post_dispatch_input("begin", touch)
        EventLoop.post_dispatch_input("end", touch)
        self.advance_frames(1)
        assert ti._visible_lines_range == (1, 11)
예제 #4
0
    def test_scroll_doesnt_move_cursor(self):
        ti = self.make_scrollable_text_input()

        from kivy.base import EventLoop
        win = EventLoop.window
        touch = UTMotionEvent("unittest", next(touch_id), {
            "x": ti.center_x / float(win.width),
            "y": ti.center_y / float(win.height),
        })
        touch.profile.append('button')
        touch.button = 'scrolldown'

        prev_cursor = ti.cursor
        assert ti._visible_lines_range == (20, 30)
        EventLoop.post_dispatch_input("begin", touch)
        EventLoop.post_dispatch_input("end", touch)
        self.advance_frames(1)
        assert ti._visible_lines_range == (19, 29)
        assert ti.cursor == prev_cursor
예제 #5
0
    def test_scroll_doesnt_move_cursor(self):
        ti = self.make_scrollable_text_input()

        from kivy.base import EventLoop
        win = EventLoop.window
        touch = UTMotionEvent("unittest", next(touch_id), {
            "x": ti.center_x / float(win.width),
            "y": ti.center_y / float(win.height),
        })
        touch.profile.append('button')
        touch.button = 'scrolldown'

        prev_cursor = ti.cursor
        assert ti._visible_lines_range == (20, 30)
        EventLoop.post_dispatch_input("begin", touch)
        EventLoop.post_dispatch_input("end", touch)
        self.advance_frames(1)
        assert ti._visible_lines_range == (19, 29)
        assert ti.cursor == prev_cursor