#ifdef WITH_OPENCV
GtkToggleButton *show_flow_button;
#endif
-int button_down = 0, button_down_x = -1000, button_down_y = -1000, shift_pressed = 0, button_num = 1;
+int button_down = 0, button_down_x = -1000, button_down_y = -1000, shift_pressed = 0, ctrl_pressed = 0, button_num = 1;
+int last_x = 0, last_y = 0; /* where mouse is over scrolled view */
int brush_size;
int mark = 1, highlight = 0, preview = 0, rendered = 0, draw_mode = 1, move_mode = 0, fill_mode = 0, pick_mode = 0, flowview = 0;
int mouse_over_palette_area = 0, mouse_over_drawing_area = 0, mouse_over_timeline_area = 0;
case GDK_Shift_R:
shift_pressed = 1;
break;
+ case GDK_Control_L:
+ case GDK_Control_R:
+ ctrl_pressed = 1;
+ break;
// default:
// printf("press %x\n", event->keyval);
}
case GDK_Shift_R:
shift_pressed = 0;
break;
+ case GDK_Control_L:
+ case GDK_Control_R:
+ ctrl_pressed = 0;
+ break;
// default:
// printf("release %x\n", event->keyval);
}
y = event->y;
state = event->state;
}
+ last_x = x;
+ last_y = y;
if ((state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK))) {
if (mark || highlight) {
return TRUE;
}
+static gint scroll_event (GtkWidget *widget, GdkEventScroll *event)
+{
+ if (!ctrl_pressed)
+ return FALSE;
+
+#if 0
+int x,y;
+GtkAdjustment *hadjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(img_scroll));
+GtkAdjustment *vadjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(img_scroll));
+
+x = last_x;
+y = last_y;
+printf("mouse over pixmap: %d, %d\n", x, y);
+x -= (int)gtk_adjustment_get_value(hadjustment);
+y -= (int)gtk_adjustment_get_value(vadjustment);
+printf("mouse over widget: %d, %d\n", x, y);
+
+
+
+
+GdkDrawable *draw = gtk_widget_get_window(img_drawing_area);
+int window_width, window_height;
+gdk_drawable_get_size (draw, &window_width, &window_height);
+
+/* we need to calculate an offset, since the drawing area is now larger */
+x -= (window_width - img_width*img_scale_x/16) / 2;
+y -= (window_height - img_height*img_scale_y/16) / 2;
+
+x = x*16/img_scale_x;
+y = y*16/img_scale_y;
+
+printf("real coordinates: %d, %d\n", x, y);
+
+if (x < 0 || x >= img_width || y < 0 || y >= img_height)
+ return FALSE;
+
+#endif
+
+
+
+ switch (event->direction) {
+ case GDK_SCROLL_UP:
+ zoom_in_event(NULL);
+ return TRUE;
+ case GDK_SCROLL_DOWN:
+ zoom_out_event(NULL);
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
/* redraw event of image area */
static gint img_expose_event (GtkWidget *widget, GdkEventExpose *event)
{
img_drawing_area = gtk_drawing_area_new ();
gtk_signal_connect(GTK_OBJECT(img_drawing_area), "motion_notify_event", (GtkSignalFunc)motion_notify_event, NULL);
gtk_signal_connect(GTK_OBJECT (img_drawing_area), "button_press_event", (GtkSignalFunc)button_press_event, NULL);
+ gtk_signal_connect(GTK_OBJECT (img_drawing_area), "scroll_event", (GtkSignalFunc)scroll_event, NULL);
gtk_signal_connect(GTK_OBJECT (img_drawing_area), "expose_event", (GtkSignalFunc)img_expose_event, NULL);
g_signal_connect(img_drawing_area, "enter_notify_event", G_CALLBACK(enter_drawing_area), NULL);
g_signal_connect(img_drawing_area, "leave_notify_event", G_CALLBACK(leave_drawing_area), NULL);
| GDK_ENTER_NOTIFY_MASK
| GDK_LEAVE_NOTIFY_MASK
| GDK_BUTTON_PRESS_MASK
+ | GDK_SCROLL_MASK
| GDK_POINTER_MOTION_MASK
| GDK_POINTER_MOTION_HINT_MASK);
gtk_widget_show(img_drawing_area);