[Goodies-commits] r3629 - ristretto/trunk/src
Stephan Arts
stephan at xfce.org
Sat Nov 24 20:02:26 CET 2007
Author: stephan
Date: 2007-11-24 19:02:26 +0000 (Sat, 24 Nov 2007)
New Revision: 3629
Modified:
ristretto/trunk/src/picture_viewer.c
Log:
Added box to picture viewer (now for the zoom part)
Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c 2007-11-24 17:26:29 UTC (rev 3628)
+++ ristretto/trunk/src/picture_viewer.c 2007-11-24 19:02:26 UTC (rev 3629)
@@ -24,7 +24,14 @@
#include "navigator.h"
#include "picture_viewer.h"
+typedef enum
+{
+ RSTTO_PICTURE_VIEWER_STATE_NONE,
+ RSTTO_PICTURE_VIEWER_STATE_MOVE,
+ RSTTO_PICTURE_VIEWER_STATE_BOX_ZOOM
+} RsttoPictureViewerState;
+
struct _RsttoPictureViewerPriv
{
RsttoNavigator *navigator;
@@ -42,6 +49,7 @@
gdouble current_y;
gint h_val;
gint v_val;
+ RsttoPictureViewerState state;
} motion;
struct
{
@@ -326,6 +334,41 @@
y2,
GDK_RGB_DITHER_NONE,
0,0);
+ if(viewer->priv->motion.state == RSTTO_PICTURE_VIEWER_STATE_BOX_ZOOM)
+ {
+ gdk_gc_set_foreground(gc,
+ &(widget->style->fg[GTK_STATE_SELECTED]));
+ gdouble x1, x2, y1, y2;
+
+ if (viewer->priv->motion.x < viewer->priv->motion.current_x)
+ {
+ x1 = viewer->priv->motion.x;
+ x2 = viewer->priv->motion.current_x;
+ }
+ else
+ {
+ x1 = viewer->priv->motion.current_x;
+ x2 = viewer->priv->motion.x;
+ }
+ if (viewer->priv->motion.y < viewer->priv->motion.current_y)
+ {
+ y1 = viewer->priv->motion.y;
+ y2 = viewer->priv->motion.current_y;
+ }
+ else
+ {
+ y1 = viewer->priv->motion.current_y;
+ y2 = viewer->priv->motion.y;
+ }
+ gdk_draw_rectangle(GDK_DRAWABLE(buffer),
+ gc,
+ FALSE,
+ x1,
+ y1,
+ x2 - x1,
+ y2 - y1);
+ }
+
if(viewer->priv->show_border)
{
gdk_gc_set_foreground(gc, &line_color);
@@ -750,36 +793,46 @@
viewer->priv->refresh.idle_id = 0;
}
- if (viewer->priv->motion.x != viewer->priv->motion.current_x)
+ switch (viewer->priv->motion.state)
{
- 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);
- }
+ case RSTTO_PICTURE_VIEWER_STATE_MOVE:
+ 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);
+ 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);
+ }
+ break;
+ case RSTTO_PICTURE_VIEWER_STATE_BOX_ZOOM:
+ viewer->priv->refresh.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_repaint, viewer);
+ break;
+ default:
+ break;
}
}
return FALSE;
@@ -800,15 +853,32 @@
{
if(event->button == 1)
{
- GtkWidget *widget = GTK_WIDGET(viewer);
- GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR);
- gdk_window_set_cursor(widget->window, cursor);
- gdk_cursor_unref(cursor);
-
viewer->priv->motion.x = event->x;
viewer->priv->motion.y = event->y;
viewer->priv->motion.h_val = viewer->hadjustment->value;
viewer->priv->motion.v_val = viewer->vadjustment->value;
+
+ if (!(event->state & GDK_MODIFIER_MASK))
+ {
+ GtkWidget *widget = GTK_WIDGET(viewer);
+ GdkCursor *cursor = gdk_cursor_new(GDK_FLEUR);
+ gdk_window_set_cursor(widget->window, cursor);
+ gdk_cursor_unref(cursor);
+
+ viewer->priv->motion.state = RSTTO_PICTURE_VIEWER_STATE_MOVE;
+ }
+
+ if (event->state & GDK_CONTROL_MASK)
+ {
+ GtkWidget *widget = GTK_WIDGET(viewer);
+ GdkCursor *cursor = gdk_cursor_new(GDK_UL_ANGLE);
+ gdk_window_set_cursor(widget->window, cursor);
+ gdk_cursor_unref(cursor);
+
+ viewer->priv->motion.state = RSTTO_PICTURE_VIEWER_STATE_BOX_ZOOM;
+ }
+
+
}
if(event->button == 3)
{
@@ -833,6 +903,23 @@
{
GtkWidget *widget = GTK_WIDGET(viewer);
gdk_window_set_cursor(widget->window, NULL);
+ switch (viewer->priv->motion.state)
+ {
+ case RSTTO_PICTURE_VIEWER_STATE_NONE:
+ break;
+ case RSTTO_PICTURE_VIEWER_STATE_MOVE:
+ break;
+ case RSTTO_PICTURE_VIEWER_STATE_BOX_ZOOM:
+ viewer->priv->motion.state = RSTTO_PICTURE_VIEWER_STATE_NONE;
+
+ if (viewer->priv->refresh.idle_id > 0)
+ {
+ g_source_remove(viewer->priv->refresh.idle_id);
+ }
+ viewer->priv->refresh.idle_id = g_idle_add((GSourceFunc)cb_rstto_picture_viewer_queued_repaint, viewer);
+ break;
+ }
+
}
}
More information about the Goodies-commits
mailing list