summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Techet <techet@gmail.com>2014-10-18 20:35:26 +0200
committerJiří Techet <techet@gmail.com>2014-10-18 20:35:26 +0200
commitc16cbc9279aef8d720a7e559f4bbaed1d328de83 (patch)
treed703789625a90866c6e61a679c20c60e3bc070b2
parenta64f8a8f9a0f2d0640be468c8192f366c133f27f (diff)
downloadlibchamplain-c16cbc9279aef8d720a7e559f4bbaed1d328de83.tar.gz
Add demo demonstrating custom keyboard mapping for various map actions
-rw-r--r--demos/Makefile.am2
-rwxr-xr-xdemos/keyboard-mapping.py60
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()