Ticket #4403: swipe3.patch

File swipe3.patch, 2.9 KB (added by manuq, 11 years ago)

Use zoom gesture for switching zoom views (Neighborhood, Group, Home)

  • src/jarabe/desktop/homewindow.py

    diff --git a/src/jarabe/desktop/homewindow.py b/src/jarabe/desktop/homewindow.py
    index f9809e0..d1784b0 100644
    a b from gi.repository import Gtk 
    2222from gi.repository import Gdk
    2323from gi.repository import GdkX11
    2424
     25from gi.repository import SugarGestures
     26
    2527from sugar3.graphics import style
    2628from sugar3.graphics import palettegroup
    2729
    class HomeWindow(Gtk.Window): 
    99101        shell.get_model().zoom_level_changed.connect(
    100102                                     self.__zoom_level_changed_cb)
    101103
     104        x11_window = self.get_window()
     105        x11_window.set_events(x11_window.get_events() |
     106                              Gdk.EventMask.POINTER_MOTION_MASK |
     107                              Gdk.EventMask.TOUCH_MASK)
     108
     109        zoom_controller = SugarGestures.ZoomController()
     110        zoom_controller.connect('scale-changed', self.__scale_changed_cb)
     111        zoom_controller.connect('ended', self.__scale_ended_cb)
     112        zoom_controller.attach(self, SugarGestures.EventControllerFlags.NONE)
     113
     114        self._zoom_scale = None
     115
    102116    def _deactivate_view(self, level):
    103117        group = palettegroup.get_group('default')
    104118        group.popdown()
    class HomeWindow(Gtk.Window): 
    194208        else:
    195209            self._update_view(new_level)
    196210
     211    def __scale_changed_cb(self, controller, scale):
     212        self._zoom_scale = scale
     213
     214    def __scale_ended_cb(self, controller):
     215        if self._zoom_scale > 1.0:
     216            shell.get_model().set_next_zoom_level()
     217
     218        elif self._zoom_scale < 1.0:
     219            shell.get_model().set_previous_zoom_level()
     220
     221        self._zoom_scale = None
     222
    197223    def _transition_completed_cb(self, transition_box):
    198224        self._update_view(shell.get_model().zoom_level)
    199225
  • src/jarabe/model/shell.py

    diff --git a/src/jarabe/model/shell.py b/src/jarabe/model/shell.py
    index 437ff90..b0ef267 100644
    a b class ShellModel(GObject.GObject): 
    351351    ZOOM_HOME = 2
    352352    ZOOM_ACTIVITY = 3
    353353
     354    _ZOOM_LEVELS = [ZOOM_MESH, ZOOM_GROUP, ZOOM_HOME, ZOOM_ACTIVITY]
     355
    354356    def __init__(self):
    355357        GObject.GObject.__init__(self)
    356358
    class ShellModel(GObject.GObject): 
    430432
    431433    zoom_level = property(_get_zoom_level)
    432434
     435    def _get_zoom_level_by_index(self, idx):
     436        # Use the modulo operator to iterate the list as a circular
     437        # list.
     438        return self._ZOOM_LEVELS[(idx) % len(self._ZOOM_LEVELS)]
     439
     440    def set_previous_zoom_level(self):
     441        new_level = self._get_zoom_level_by_index(self.zoom_level - 1)
     442        self.set_zoom_level(new_level)
     443
     444    def set_next_zoom_level(self):
     445        new_level = self._get_zoom_level_by_index(self.zoom_level + 1)
     446        self.set_zoom_level(new_level)
     447
    433448    def _get_activities_with_window(self):
    434449        ret = []
    435450        for i in self._activities: