r3334 - in trunk/src/target/OM-2007.2/applications/openmoko-worldclock2: . src
chris at sita.openmoko.org
chris at sita.openmoko.org
Fri Nov 2 13:01:08 CET 2007
Author: chris
Date: 2007-11-02 13:01:06 +0100 (Fri, 02 Nov 2007)
New Revision: 3334
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-worldclock2/ChangeLog
trunk/src/target/OM-2007.2/applications/openmoko-worldclock2/src/worldclock-main.c
Log:
* src/worldclock-main.c: (hadjust_changed_cb),
(vadjust_changed_cb), (zoom_map), (main):
Zoom into the centre of the map rather than the top-left
Modified: trunk/src/target/OM-2007.2/applications/openmoko-worldclock2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-worldclock2/ChangeLog 2007-11-02 10:59:47 UTC (rev 3333)
+++ trunk/src/target/OM-2007.2/applications/openmoko-worldclock2/ChangeLog 2007-11-02 12:01:06 UTC (rev 3334)
@@ -1,3 +1,9 @@
+2007-11-02 Chris Lord <chris at openedhand.com>
+
+ * src/worldclock-main.c: (hadjust_changed_cb),
+ (vadjust_changed_cb), (zoom_map), (main):
+ Zoom into the centre of the map rather than the top-left
+
2007-11-01 Chris Lord <chris at openedhand.com>
* src/worldclock-main.c: (set_time), (close_clicked_cb),
Modified: trunk/src/target/OM-2007.2/applications/openmoko-worldclock2/src/worldclock-main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-worldclock2/src/worldclock-main.c 2007-11-02 10:59:47 UTC (rev 3333)
+++ trunk/src/target/OM-2007.2/applications/openmoko-worldclock2/src/worldclock-main.c 2007-11-02 12:01:06 UTC (rev 3334)
@@ -34,6 +34,7 @@
GtkWidget *window;
GtkWidget *map;
GtkWidget *map_aspect;
+ GtkWidget *map_viewport;
GtkWidget *load_window;
GtkWidget *load_bar;
@@ -42,6 +43,8 @@
gchar *location;
gdouble zoom_level;
+ gdouble xpos;
+ gdouble ypos;
gboolean map_entered;
} WorldClockData;
@@ -55,16 +58,52 @@
}
static void
+hadjust_changed_cb (GtkAdjustment *hadjust, WorldClockData *data)
+{
+ g_signal_handlers_disconnect_by_func (
+ hadjust, hadjust_changed_cb, data);
+ gtk_adjustment_set_value (hadjust,
+ (hadjust->upper * data->xpos) -
+ (data->map_viewport->allocation.width/2));
+}
+
+static void
+vadjust_changed_cb (GtkAdjustment *vadjust, WorldClockData *data)
+{
+ g_signal_handlers_disconnect_by_func (
+ vadjust, vadjust_changed_cb, data);
+ gtk_adjustment_set_value (vadjust,
+ (vadjust->upper * data->ypos) -
+ (data->map_viewport->allocation.height/2));
+}
+
+static void
zoom_map (WorldClockData *data)
{
if (data->zoom_level <= 0.95) {
data->zoom_level = 1;
gtk_widget_set_size_request (data->map_aspect, -1, -1);
} else {
+ GtkAdjustment *hadjust, *vadjust;
gint width, height;
- gtk_window_get_size (GTK_WINDOW (data->window),
- &width, &height);
+
+ hadjust = gtk_viewport_get_hadjustment (
+ GTK_VIEWPORT (data->map_viewport));
+ vadjust = gtk_viewport_get_vadjustment (
+ GTK_VIEWPORT (data->map_viewport));
+ data->xpos = (hadjust->value + (data->map_viewport->
+ allocation.width/2.0)) / hadjust->upper;
+ data->ypos = (vadjust->value + (data->map_viewport->
+ allocation.height/2.0)) / vadjust->upper;
+
+ width = data->map_viewport->allocation.width;
+ height = data->map_viewport->allocation.height;
width *= data->zoom_level;
+ g_signal_connect (hadjust, "changed",
+ G_CALLBACK (hadjust_changed_cb), data);
+ g_signal_connect (vadjust, "changed",
+ G_CALLBACK (vadjust_changed_cb), data);
+
gtk_widget_set_size_request (data->map_aspect,
width, (height > (width/2)) ? -1 : width / 2);
}
@@ -559,9 +598,13 @@
data.map_aspect), GTK_SHADOW_NONE);
gtk_container_add (GTK_CONTAINER (data.map_aspect), data.map);
+ data.map_viewport = gtk_viewport_new (NULL, NULL);
+ gtk_viewport_set_shadow_type (GTK_VIEWPORT (
+ data.map_viewport), GTK_SHADOW_NONE);
+ gtk_container_add (GTK_CONTAINER (data.map_viewport), data.map_aspect);
+
scroll = moko_finger_scroll_new ();
- moko_finger_scroll_add_with_viewport (MOKO_FINGER_SCROLL (scroll),
- data.map_aspect);
+ gtk_container_add (GTK_CONTAINER (scroll), data.map_viewport);
g_object_set (G_OBJECT (scroll), "mode", MOKO_FINGER_SCROLL_MODE_PUSH,
NULL);
gtk_widget_show_all (scroll);
More information about the commitlog
mailing list