diff src/image.c @ 127:271afad04d07

implemented split windows TODO: menus and hotkeys, connected zoom, activating on drag
author nadvornik
date Fri, 29 Jun 2007 15:16:46 +0000
parents e2a8b7f2165b
children 98e2632b5d3d
line wrap: on
line diff
--- a/src/image.c	Wed Jan 17 21:52:24 2007 +0000
+++ b/src/image.c	Fri Jun 29 15:16:46 2007 +0000
@@ -1277,6 +1277,38 @@
 	pixbuf_renderer_move(PIXBUF_RENDERER(imd->pr), PIXBUF_RENDERER(source->pr));
 }
 
+void image_sync_scroll_from_image_absolute(ImageWindow *imd, ImageWindow *source)
+{
+	gint src_width, src_height, dst_width, dst_height;
+	gint src_x, src_y;
+	gfloat dst_x, dst_y;
+	GdkRectangle src_rect;
+	GdkRectangle dst_rect;
+	gfloat dst_scale = pixbuf_renderer_zoom_get_scale(PIXBUF_RENDERER(imd->pr));
+	
+	pixbuf_renderer_get_virtual_rect(PIXBUF_RENDERER(source->pr), &src_rect);
+	pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(source->pr), &src_width, &src_height);
+	pixbuf_renderer_get_virtual_rect(PIXBUF_RENDERER(imd->pr), &dst_rect);
+	pixbuf_renderer_get_scaled_size(PIXBUF_RENDERER(imd->pr), &dst_width, &dst_height);
+
+	src_x = src_rect.x + src_rect.width / 2;
+	src_y = src_rect.y + src_rect.height / 2;
+
+	dst_x = (gfloat)src_x * dst_width / src_width - dst_rect.width / 2;
+	dst_y = (gfloat)src_y * dst_height / src_height - dst_rect.height / 2;
+
+	
+
+	image_scroll_to_point(imd, dst_x / dst_scale, dst_y / dst_scale, 0, 0);
+}
+
+void image_sync_zoom_from_image(ImageWindow *imd, ImageWindow *source)
+{
+	image_zoom_set(imd, image_zoom_get(source));
+}
+
+
+
 /* manipulation */
 
 void image_area_changed(ImageWindow *imd, gint x, gint y, gint width, gint height)
@@ -1627,6 +1659,24 @@
 	gdk_flush();
 }
 
+void image_select(ImageWindow *imd, gboolean select)
+{
+	if (imd->has_frame)
+		{
+		if (select)
+			{
+			gtk_frame_set_shadow_type(GTK_FRAME(imd->inner_frame), GTK_SHADOW_IN);
+			gtk_frame_set_shadow_type(GTK_FRAME(imd->widget), GTK_SHADOW_OUT);
+			}
+		else
+			{
+			gtk_frame_set_shadow_type(GTK_FRAME(imd->inner_frame), GTK_SHADOW_NONE);
+			gtk_frame_set_shadow_type(GTK_FRAME(imd->widget), GTK_SHADOW_IN);
+			}
+		}
+}
+
+
 /*
  *-------------------------------------------------------------------
  * prefs sync
@@ -1743,9 +1793,18 @@
 
 	if (imd->has_frame)
 		{
+		imd->inner_frame = gtk_frame_new(NULL);
+		gtk_frame_set_shadow_type(GTK_FRAME(imd->inner_frame), GTK_SHADOW_NONE);
+		gtk_container_add(GTK_CONTAINER(imd->inner_frame), imd->pr);
+		
+		
 		imd->widget = gtk_frame_new(NULL);
 		gtk_frame_set_shadow_type(GTK_FRAME(imd->widget), GTK_SHADOW_IN);
-		gtk_container_add(GTK_CONTAINER(imd->widget), imd->pr);
+		gtk_container_add(GTK_CONTAINER(imd->widget), imd->inner_frame);
+
+		gtk_container_set_border_width (GTK_CONTAINER (imd->inner_frame), 1);
+
+		gtk_widget_show(imd->inner_frame);
 		gtk_widget_show(imd->pr);
 
 		GTK_WIDGET_SET_FLAGS(imd->widget, GTK_CAN_FOCUS);