sugar3.graphics.scrollingdetector module

ScrollingDetector emits signals when a ScrolledWindow starts and finish scrolling. Other widgets can use that information to avoid doing performance-expensive operations.

Example:

import os
import time

from gi.repository import Gtk

from sugar3.graphics import style
from sugar3.graphics.icon import CellRendererIcon
from sugar3.graphics.xocolor import XoColor
from sugar3.graphics.scrollingdetector import ScrollingDetector
from sugar3.graphics.palettewindow import TreeViewInvoker
import common


def _scroll_start_cb(event, treeview, invoker):
    print("Scroll starts")
    invoker.detach()


def _scroll_end_cb(event, treeview, invoker):
    print("Scroll ends")
    invoker.attach_treeview(treeview)


test = common.Test()
test.show()

model = Gtk.ListStore(str)

data_dir = os.getenv('GTK_DATA_PREFIX', '/usr/')

iconlist = os.listdir(os.path.join(data_dir,
                                   'share/icons/sugar/scalable/actions/'))
print("Displaying %s icons" % len(iconlist))
for icon in iconlist:
    icon = os.path.basename(icon)
    icon = icon[:icon.find('.')]
    model.append([icon])

scrolled = Gtk.ScrolledWindow()
scrolled.set_size_request(800, 800)
treeview = Gtk.TreeView()

treeview.set_model(model)
scrolled.add(treeview)
test.pack_start(scrolled, True, True, 0)
test.show_all()

col = Gtk.TreeViewColumn()
treeview.append_column(col)

xo_color = XoColor('#FF0000,#00FF00')
cell_icon = CellRendererIcon()
cell_icon.props.width = style.GRID_CELL_SIZE
cell_icon.props.height = style.GRID_CELL_SIZE
cell_icon.props.size = style.STANDARD_ICON_SIZE
cell_icon.props.xo_color = xo_color

col.pack_start(cell_icon, expand=False)
col.add_attribute(cell_icon, 'icon-name', 0)
cell_text = Gtk.CellRendererText()
col.pack_start(cell_text, expand=True)
col.add_attribute(cell_text, 'text', 0)

invoker = TreeViewInvoker()
invoker.attach_treeview(treeview)

detector = ScrollingDetector(scrolled)
detector.connect('scroll-start', _scroll_start_cb, treeview, invoker)
detector.connect('scroll-end', _scroll_end_cb, treeview, invoker)

if __name__ == '__main__':
    time_ini = time.time()
    common.main(test)
class sugar3.graphics.scrollingdetector.ScrollingDetector(scrolled_window, timeout=100)

Bases: gi.overrides.GObject.Object

The scrolling detector sends signals when a scrolled window is scrolled and when a scrolled window stops scrolling. Only one scroll-start signal will be emitted until scrolling stops.

The scroll-start signal is emitted when scrolling begins and The scroll-end signal is emitted when scrolling ends Neither of these two signals have any arguments

Parameters
  • scrolled_window (Gtk.ScrolledWindow) – A GTK scrolled window

  • detected (object for which scrolling is to be) –

  • timeout (int) – time in milliseconds to establish the interval for which scrolling is detected

connect_scrolled_window()

Connects scrolling detector to a scrolled window. Detects scrolling when the vertical scrollbar adjustment value is changed

Should be used to link an instance of a scrolling detector to a Scrolled Window, after setting scrolled_window

scroll_end_signal
scroll_start_signal