[Goodies-commits] r2471 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Tue Jan 30 00:37:25 CET 2007


Author: stephan
Date: 2007-01-29 23:37:25 +0000 (Mon, 29 Jan 2007)
New Revision: 2471

Modified:
   ristretto/trunk/src/main.c
   ristretto/trunk/src/picture_viewer.c
   ristretto/trunk/src/picture_viewer.h
Log:
zoom-buttons zoom

Modified: ristretto/trunk/src/main.c
===================================================================
--- ristretto/trunk/src/main.c	2007-01-29 10:57:44 UTC (rev 2470)
+++ ristretto/trunk/src/main.c	2007-01-29 23:37:25 UTC (rev 2471)
@@ -21,6 +21,15 @@
 
 #include "picture_viewer.h"
 
+static void
+cb_rstto_zoom_fit(GtkToolItem *item, RsttoPictureViewer *viewer);
+static void
+cb_rstto_zoom_100(GtkToolItem *item, RsttoPictureViewer *viewer);
+static void
+cb_rstto_zoom_in(GtkToolItem *item, RsttoPictureViewer *viewer);
+static void
+cb_rstto_zoom_out(GtkToolItem *item, RsttoPictureViewer *viewer);
+
 int main(int argc, char **argv)
 {
 	GdkPixbuf *pixbuf;
@@ -38,17 +47,64 @@
 
 	GtkWidget *viewer = rstto_picture_viewer_new();
 	GtkWidget *s_window = gtk_scrolled_window_new(NULL,NULL);
+	GtkWidget *main_vbox = gtk_vbox_new(0, FALSE);
+	GtkWidget *tool_bar = gtk_toolbar_new();
 
+	GtkToolItem *zoom_fit= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_FIT);
+	GtkToolItem *zoom_100= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_100);
+	GtkToolItem *zoom_out= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_OUT);
+	GtkToolItem *zoom_in= gtk_tool_button_new_from_stock(GTK_STOCK_ZOOM_IN);
+
 	rstto_picture_viewer_set_pixbuf(RSTTO_PICTURE_VIEWER(viewer), pixbuf);
-	rstto_picture_viewer_set_scale(RSTTO_PICTURE_VIEWER(viewer), 5);
 
 
 	gtk_container_add(GTK_CONTAINER(s_window), viewer);
-	gtk_container_add(GTK_CONTAINER(window), s_window);
 
+	gtk_box_pack_start(GTK_BOX(main_vbox), s_window, TRUE, TRUE, 0);
+	gtk_box_pack_start(GTK_BOX(main_vbox), tool_bar, FALSE, TRUE, 0);
+	rstto_picture_viewer_set_scale(RSTTO_PICTURE_VIEWER(viewer), 1);
+
+	gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), zoom_fit, 0);
+	gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), zoom_100, 0);
+	gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), zoom_out, 0);
+	gtk_toolbar_insert(GTK_TOOLBAR(tool_bar), zoom_in, 0);
+
+	g_signal_connect(G_OBJECT(zoom_fit), "clicked", G_CALLBACK(cb_rstto_zoom_fit), viewer);
+	g_signal_connect(G_OBJECT(zoom_100), "clicked", G_CALLBACK(cb_rstto_zoom_100), viewer);
+	g_signal_connect(G_OBJECT(zoom_in), "clicked", G_CALLBACK(cb_rstto_zoom_in), viewer);
+	g_signal_connect(G_OBJECT(zoom_out), "clicked", G_CALLBACK(cb_rstto_zoom_out), viewer);
+
+	gtk_container_add(GTK_CONTAINER(window), main_vbox);
+
 	gtk_widget_show_all(window);
 	gtk_widget_show(viewer);
 
 	gtk_main();
 	return 0;
 }
+
+static void
+cb_rstto_zoom_fit(GtkToolItem *item, RsttoPictureViewer *viewer)
+{
+	rstto_picture_viewer_set_scale(viewer, 0);
+}
+
+static void
+cb_rstto_zoom_100(GtkToolItem *item, RsttoPictureViewer *viewer)
+{
+	rstto_picture_viewer_set_scale(viewer, 1);
+}
+
+static void
+cb_rstto_zoom_in(GtkToolItem *item, RsttoPictureViewer *viewer)
+{
+	gdouble scale = rstto_picture_viewer_get_scale(viewer);
+	rstto_picture_viewer_set_scale(viewer, scale*2);
+}
+
+static void
+cb_rstto_zoom_out(GtkToolItem *item, RsttoPictureViewer *viewer)
+{
+	gdouble scale = rstto_picture_viewer_get_scale(viewer);
+	rstto_picture_viewer_set_scale(viewer, scale/2);
+}

Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-01-29 10:57:44 UTC (rev 2470)
+++ ristretto/trunk/src/picture_viewer.c	2007-01-29 23:37:25 UTC (rev 2471)
@@ -42,6 +42,8 @@
 
 static void
 rstto_picture_viewer_paint(GtkWidget *widget);
+static void
+rstto_picture_viewer_refresh(RsttoPictureViewer *viewer);
 
 static void
 rstto_picture_viewer_set_scroll_adjustments(RsttoPictureViewer *, GtkAdjustment *, GtkAdjustment *);
@@ -143,59 +145,8 @@
 	if(viewer->scale_fts)
 		rstto_picture_viewer_set_scale(viewer, 0);
 
-	if(viewer->src_pixbuf)
-	{
-		gdouble width = (gdouble)gdk_pixbuf_get_width(viewer->src_pixbuf);
-		gdouble height = (gdouble)gdk_pixbuf_get_height(viewer->src_pixbuf);
+	rstto_picture_viewer_refresh(viewer);
 
-		viewer->hadjustment->page_size = allocation->width;
-		viewer->vadjustment->page_size = allocation->height;
-		viewer->hadjustment->upper = width * viewer->scale;
-		viewer->vadjustment->upper = height * viewer->scale;
-		viewer->hadjustment->lower = 0;
-		viewer->vadjustment->lower = 0;
-		viewer->hadjustment->step_increment = 1;
-		viewer->hadjustment->page_increment = 100;
-		viewer->vadjustment->step_increment = 1;
-		viewer->vadjustment->page_increment = 100;
-
-		if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
-		{
-			viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
-			gtk_adjustment_value_changed(viewer->vadjustment);
-		}
-		if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
-		{
-			viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
-			gtk_adjustment_value_changed(viewer->hadjustment);
-		}
-
-
-		GdkPixbuf *tmp_pixbuf = NULL;
-		tmp_pixbuf = gdk_pixbuf_new_subpixbuf(viewer->src_pixbuf,
-														 viewer->hadjustment->value / viewer->scale >= 0? viewer->hadjustment->value / viewer->scale : 0,
-														 viewer->vadjustment->value / viewer->scale >= 0? viewer->vadjustment->value / viewer->scale : 0,
-														 ((allocation->width/viewer->scale)+1) < width?allocation->width/viewer->scale+1:width,
-														 ((allocation->height/viewer->scale)+1)< height?allocation->height/viewer->scale+1:height);
-
-		if(viewer->dst_pixbuf)
-		{
-			g_object_unref(viewer->dst_pixbuf);
-			viewer->dst_pixbuf = NULL;
-		}
-		viewer->dst_pixbuf = gdk_pixbuf_scale_simple(tmp_pixbuf, gdk_pixbuf_get_width(tmp_pixbuf)*viewer->scale, gdk_pixbuf_get_height(tmp_pixbuf)*viewer->scale, GDK_INTERP_BILINEAR);
-
-		if(tmp_pixbuf)
-		{
-			g_object_unref(tmp_pixbuf);
-			tmp_pixbuf = NULL;
-		}
-
-		gtk_adjustment_changed(viewer->hadjustment);
-		gtk_adjustment_changed(viewer->vadjustment);
-	}
-
-
 	if (GTK_WIDGET_REALIZED (widget))
 	{
  		gdk_window_move_resize (widget->window,
@@ -373,10 +324,82 @@
 		else
 			viewer->scale = 0;
 	}
+	rstto_picture_viewer_refresh(viewer);
+	rstto_picture_viewer_paint(GTK_WIDGET(viewer));
 }
 
+gdouble
+rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer)
+{
+	return viewer->scale;
+}
+
 void
 rstto_picture_viewer_set_pixbuf(RsttoPictureViewer *viewer, GdkPixbuf *pixbuf)
 {
 	viewer->src_pixbuf = pixbuf;
 }
+
+static void
+rstto_picture_viewer_refresh(RsttoPictureViewer *viewer)
+{
+	GtkWidget *widget = GTK_WIDGET(viewer);
+	if(viewer->src_pixbuf)
+	{
+		gdouble width = (gdouble)gdk_pixbuf_get_width(viewer->src_pixbuf);
+		gdouble height = (gdouble)gdk_pixbuf_get_height(viewer->src_pixbuf);
+		
+		if(viewer->hadjustment)
+		{
+			viewer->hadjustment->page_size = widget->allocation.width;
+			viewer->hadjustment->upper = width * viewer->scale;
+			viewer->hadjustment->lower = 0;
+			viewer->hadjustment->step_increment = 1;
+			viewer->hadjustment->page_increment = 100;
+		}
+		if(viewer->vadjustment)
+		{
+			viewer->vadjustment->page_size = widget->allocation.height;
+			viewer->vadjustment->upper = height * viewer->scale;
+			viewer->vadjustment->lower = 0;
+			viewer->vadjustment->step_increment = 1;
+			viewer->vadjustment->page_increment = 100;
+		}
+
+		if((viewer->vadjustment->value + viewer->vadjustment->page_size) > viewer->vadjustment->upper)
+		{
+			viewer->vadjustment->value = viewer->vadjustment->upper - viewer->vadjustment->page_size;
+			gtk_adjustment_value_changed(viewer->vadjustment);
+		}
+		if((viewer->hadjustment->value + viewer->hadjustment->page_size) > viewer->hadjustment->upper)
+		{
+			viewer->hadjustment->value = viewer->hadjustment->upper - viewer->hadjustment->page_size;
+			gtk_adjustment_value_changed(viewer->hadjustment);
+		}
+
+
+		GdkPixbuf *tmp_pixbuf = NULL;
+		tmp_pixbuf = gdk_pixbuf_new_subpixbuf(viewer->src_pixbuf,
+														 viewer->hadjustment->value / viewer->scale >= 0? viewer->hadjustment->value / viewer->scale : 0,
+														 viewer->vadjustment->value / viewer->scale >= 0? viewer->vadjustment->value / viewer->scale : 0,
+														 ((widget->allocation.width/viewer->scale)+1) < width?widget->allocation.width/viewer->scale+1:width,
+														 ((widget->allocation.height/viewer->scale)+1)< height?widget->allocation.height/viewer->scale+1:height);
+
+		if(viewer->dst_pixbuf)
+		{
+			g_object_unref(viewer->dst_pixbuf);
+			viewer->dst_pixbuf = NULL;
+		}
+		viewer->dst_pixbuf = gdk_pixbuf_scale_simple(tmp_pixbuf, gdk_pixbuf_get_width(tmp_pixbuf)*viewer->scale, gdk_pixbuf_get_height(tmp_pixbuf)*viewer->scale, GDK_INTERP_BILINEAR);
+
+		if(tmp_pixbuf)
+		{
+			g_object_unref(tmp_pixbuf);
+			tmp_pixbuf = NULL;
+		}
+
+		gtk_adjustment_changed(viewer->hadjustment);
+		gtk_adjustment_changed(viewer->vadjustment);
+	}
+
+}

Modified: ristretto/trunk/src/picture_viewer.h
===================================================================
--- ristretto/trunk/src/picture_viewer.h	2007-01-29 10:57:44 UTC (rev 2470)
+++ ristretto/trunk/src/picture_viewer.h	2007-01-29 23:37:25 UTC (rev 2471)
@@ -71,6 +71,7 @@
 GtkWidget *rstto_picture_viewer_new();
 void       rstto_picture_viewer_set_pixbuf(RsttoPictureViewer *viewer, GdkPixbuf *pixbuf);
 void       rstto_picture_viewer_set_scale(RsttoPictureViewer *viewer, gdouble scale);
+gdouble    rstto_picture_viewer_get_scale(RsttoPictureViewer *viewer);
 
 
 G_END_DECLS




More information about the Goodies-commits mailing list