[libchamplain] Add demo demonstrating custom keyboard mapping for various map actions



commit c16cbc9279aef8d720a7e559f4bbaed1d328de83
Author: Jiří Techet <techet gmail com>
Date:   Sat Oct 18 20:35:26 2014 +0200

    Add demo demonstrating custom keyboard mapping for various map actions

 demos/Makefile.am         |    2 +-
 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()


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]