diff options
author | Jiří Techet <techet@gmail.com> | 2014-10-18 20:35:26 +0200 |
---|---|---|
committer | Jiří Techet <techet@gmail.com> | 2014-10-18 20:35:26 +0200 |
commit | c16cbc9279aef8d720a7e559f4bbaed1d328de83 (patch) | |
tree | d703789625a90866c6e61a679c20c60e3bc070b2 | |
parent | a64f8a8f9a0f2d0640be468c8192f366c133f27f (diff) | |
download | libchamplain-c16cbc9279aef8d720a7e559f4bbaed1d328de83.tar.gz |
Add demo demonstrating custom keyboard mapping for various map actions
-rw-r--r-- | demos/Makefile.am | 2 | ||||
-rwxr-xr-x | demos/keyboard-mapping.py | 60 |
2 files changed, 61 insertions, 1 deletions
diff --git a/demos/Makefile.am b/demos/Makefile.am index 811fa61..bc210a1 100644 --- a/demos/Makefile.am +++ b/demos/Makefile.am @@ -58,5 +58,5 @@ launcher_vala_LDADD = \ $(top_builddir)/champlain/libchamplain-@CHAMPLAIN_API_VERSION@.la endif -EXTRA_DIST = markers.h launcher.js minimal.py launcher-gtk.py polygons.py default-rules.xml high-contrast.xml las_palmas.osm schaffhausen.osm +EXTRA_DIST = markers.h launcher.js minimal.py launcher-gtk.py polygons.py keyboard-mapping.py default-rules.xml high-contrast.xml las_palmas.osm schaffhausen.osm diff --git a/demos/keyboard-mapping.py b/demos/keyboard-mapping.py new file mode 100755 index 0000000..85444c1 --- /dev/null +++ b/demos/keyboard-mapping.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python + +# To run this example, you need to set the GI_TYPELIB_PATH environment +# variable to point to the gir directory: +# +# export GI_TYPELIB_PATH=$GI_TYPELIB_PATH:/usr/local/lib/girepository-1.0/ + +from gi.repository import GtkClutter +from gi.repository import GObject, Gtk, Gdk, GtkChamplain + +class KeyboardMapping: + + def __init__(self): + GtkClutter.init([]) + + window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL) + window.connect("destroy", Gtk.main_quit) + window.connect("key-press-event", self.on_key_press) + + self.widget = GtkChamplain.Embed() + self.widget.set_size_request(640, 480) + self.view = self.widget.get_view() + + window.add(self.widget) + window.show_all() + + def on_key_press(self, widget, ev): + delta = self.widget.get_allocation().width / 4 + if ev.keyval == Gdk.KEY_Left: + self.scroll(-delta, 0) + elif ev.keyval == Gdk.KEY_Right: + self.scroll(delta, 0) + elif ev.keyval == Gdk.KEY_Up: + self.scroll(0, -delta) + elif ev.keyval == Gdk.KEY_Down: + self.scroll(0, delta) + elif ev.keyval == Gdk.KEY_plus or ev.keyval == Gdk.KEY_KP_Add: + self.view.zoom_in() + elif ev.keyval == Gdk.KEY_minus or ev.keyval == Gdk.KEY_KP_Subtract: + self.view.zoom_out() + else: + return False + return True + + def scroll(self, deltax, deltay): + lat = self.view.get_center_latitude() + lon = self.view.get_center_longitude() + + x = self.view.longitude_to_x(lon) + deltax + y = self.view.latitude_to_y(lat) + deltay + + lon = self.view.x_to_longitude(x) + lat = self.view.y_to_latitude(y) + + self.view.center_on(lat, lon) + #self.view.go_to(lat, lon) + +if __name__ == "__main__": + KeyboardMapping() + Gtk.main() |