[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