[Goodies-commits] r3422 - ristretto/trunk/src
Stephan Arts
stephan at xfce.org
Sun Oct 21 09:41:14 CEST 2007
Author: stephan
Date: 2007-10-21 07:41:14 +0000 (Sun, 21 Oct 2007)
New Revision: 3422
Modified:
ristretto/trunk/src/picture_viewer.c
Log:
Improve motion of image a bit
Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c 2007-10-20 23:14:26 UTC (rev 3421)
+++ ristretto/trunk/src/picture_viewer.c 2007-10-21 07:41:14 UTC (rev 3422)
@@ -46,10 +46,17 @@
{
gdouble x;
gdouble y;
+ gdouble current_x;
+ gdouble current_y;
gint h_val;
gint v_val;
gint32 time;
+ gint idle_id;
} motion;
+ struct
+ {
+ gint idle_id;
+ } zoom;
GtkMenu *menu;
};
@@ -60,6 +67,9 @@
static void
rstto_picture_viewer_destroy(GtkObject *object);
+static gboolean
+cb_rstto_picture_viewer_queued_redraw (RsttoPictureViewer *viewer);
+
static void
rstto_picture_viewer_size_request(GtkWidget *, GtkRequisition *);
static void
@@ -506,11 +516,11 @@
gtk_adjustment_changed(viewer->vadjustment);
viewer->hadjustment->value = (((viewer->hadjustment->value +
- (viewer->hadjustment->page_size / 2)) /
- old_scale) * scale) - (viewer->hadjustment->page_size / 2);
+ (viewer->hadjustment->page_size / 2)) *
+ scale) / old_scale) - (viewer->hadjustment->page_size / 2);
viewer->vadjustment->value = (((viewer->vadjustment->value +
- (viewer->vadjustment->page_size / 2)) /
- old_scale) * scale) - (viewer->vadjustment->page_size / 2);
+ (viewer->vadjustment->page_size / 2)) *
+ scale) / old_scale) - (viewer->vadjustment->page_size / 2);
if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
{
@@ -860,18 +870,21 @@
case GDK_SCROLL_LEFT:
if (scale <= 0.05)
return;
+ if (viewer->priv->motion.idle_id > 0)
+ {
+ g_source_remove(viewer->priv->motion.idle_id);
+ }
break;
case GDK_SCROLL_DOWN:
case GDK_SCROLL_RIGHT:
if (scale >= 16)
return;
+ if (viewer->priv->motion.idle_id > 0)
+ {
+ g_source_remove(viewer->priv->motion.idle_id);
+ }
break;
}
-
- if(rstto_picture_viewer_refresh(viewer))
- {
- rstto_picture_viewer_paint(GTK_WIDGET(viewer));
- }
}
void
@@ -1047,43 +1060,54 @@
if (viewer->priv->motion.time == 0)
viewer->priv->motion.time = gtk_get_current_event_time();
+ viewer->priv->motion.current_x = event->x;
+ viewer->priv->motion.current_y = event->y;
- if (((event->time - viewer->priv->motion.time) > RSTTO_PICTURE_VIEWER_DRAG_MOTION_TIMEOUT))
+ if (viewer->priv->motion.idle_id > 0)
{
- if (viewer->priv->motion.x != event->x)
- {
- gint val = viewer->hadjustment->value;
- viewer->hadjustment->value = viewer->priv->motion.h_val + (viewer->priv->motion.x - event->x);
- if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
- {
- viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
- }
- if((viewer->hadjustment->value) < viewer->hadjustment->lower)
- {
- viewer->hadjustment->value = viewer->hadjustment->lower;
- }
- if (val != viewer->hadjustment->value)
- gtk_adjustment_value_changed(viewer->hadjustment);
- }
+ g_source_remove(viewer->priv->motion.idle_id);
+ }
- if (viewer->priv->motion.y != event->y)
- {
- gint val = viewer->vadjustment->value;
- viewer->vadjustment->value = viewer->priv->motion.v_val + (viewer->priv->motion.y - event->y);
- if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
- {
- viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
- }
- if((viewer->vadjustment->value) < viewer->vadjustment->lower)
- {
- viewer->vadjustment->value = viewer->vadjustment->lower;
- }
- if (val != viewer->vadjustment->value)
- gtk_adjustment_value_changed(viewer->vadjustment);
- }
- viewer->priv->motion.time = event->time;
+ viewer->priv->motion.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_redraw, viewer);
+ }
+ return FALSE;
+}
+
+static gboolean
+cb_rstto_picture_viewer_queued_redraw (RsttoPictureViewer *viewer)
+{
+ if (viewer->priv->motion.x != viewer->priv->motion.current_x)
+ {
+ gint val = viewer->hadjustment->value;
+ viewer->hadjustment->value = viewer->priv->motion.h_val + (viewer->priv->motion.x - viewer->priv->motion.current_x);
+ if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
+ {
+ viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
}
+ if((viewer->hadjustment->value) < viewer->hadjustment->lower)
+ {
+ viewer->hadjustment->value = viewer->hadjustment->lower;
+ }
+ if (val != viewer->hadjustment->value)
+ gtk_adjustment_value_changed(viewer->hadjustment);
}
+
+ if (viewer->priv->motion.y != viewer->priv->motion.current_y)
+ {
+ gint val = viewer->vadjustment->value;
+ viewer->vadjustment->value = viewer->priv->motion.v_val + (viewer->priv->motion.y - viewer->priv->motion.current_y);
+ if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
+ {
+ viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
+ }
+ if((viewer->vadjustment->value) < viewer->vadjustment->lower)
+ {
+ viewer->vadjustment->value = viewer->vadjustment->lower;
+ }
+ if (val != viewer->vadjustment->value)
+ gtk_adjustment_value_changed(viewer->vadjustment);
+ }
+ viewer->priv->motion.idle_id = -1;
return FALSE;
}
More information about the Goodies-commits
mailing list