[Xfce4-commits] <ristretto:ristretto-0.0> Add printing button

Stephan Arts noreply at xfce.org
Sun Oct 23 19:14:24 CEST 2011


Updating branch refs/heads/ristretto-0.0
         to feebe0cf4c3df003121cb97768ef2d7e7e3f36c3 (commit)
       from 89880a545af123dac21c238051def0054a06f76e (commit)

commit feebe0cf4c3df003121cb97768ef2d7e7e3f36c3
Author: Stephan Arts <stephan at thor.(none)>
Date:   Sun May 17 11:40:47 2009 +0200

    Add printing button

 configure.in.in        |    2 +
 src/Makefile.am        |    2 +
 src/main_window.c      |   61 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/main_window_ui.xml |    2 +
 4 files changed, 67 insertions(+), 0 deletions(-)

diff --git a/configure.in.in b/configure.in.in
index 64493a2..e935ab8 100644
--- a/configure.in.in
+++ b/configure.in.in
@@ -63,6 +63,8 @@ XDT_CHECK_PACKAGE([LIBXFCEGUI4], [libxfcegui4-1.0], [4.6.0])
 
 XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.6.0])
 
+XDT_CHECK_PACKAGE([CAIRO], [cairo], [1.8.0])
+
 dnl **************************
 dnl *** Check for xsltproc ***
 dnl **************************
diff --git a/src/Makefile.am b/src/Makefile.am
index bf1f55c..0f31f46 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -21,6 +21,7 @@ ristretto_CFLAGS = \
 	$(GIO_CFLAGS) \
 	$(LIBEXIF_CFLAGS) \
 	$(XFCONF_CFLAGS) \
+	$(CAIRO_CFLAGS) \
 	$(LIBXFCE4UTIL_CFLAGS) \
 	$(LIBXFCEGUI4_CFLAGS) \
 	-DDATADIR=\"$(datadir)\" \
@@ -33,6 +34,7 @@ ristretto_LDADD = \
 	$(GTHREAD_LIBS) \
 	$(GIO_LIBS) \
 	$(LIBEXIF_LIBS) \
+	$(CAIRO_LIBS) \
 	$(XFCONF_LIBS) \
 	$(LIBXFCE4UTIL_LIBS) \
 	$(LIBXFCEGUI4_LIBS)
diff --git a/src/main_window.c b/src/main_window.c
index b66554c..b6e39d5 100644
--- a/src/main_window.c
+++ b/src/main_window.c
@@ -26,6 +26,8 @@
 #include <libxfcegui4/libxfcegui4.h>
 #include <libexif/exif-data.h>
 
+#include <cairo/cairo.h>
+
 #include "image.h"
 
 #include "settings.h"
@@ -165,6 +167,14 @@ static void
 cb_rstto_main_window_save_as (GtkWidget *widget, RsttoMainWindow *window);
 
 static void
+cb_rstto_main_window_print (GtkWidget *widget, RsttoMainWindow *window);
+static void
+rstto_main_window_print_draw_page (GtkPrintOperation *operation,
+           GtkPrintContext   *print_context,
+           gint               page_nr,
+          RsttoMainWindow *window);
+
+static void
 cb_rstto_main_window_play (GtkWidget *widget, RsttoMainWindow *window);
 static void
 cb_rstto_main_window_pause(GtkWidget *widget, RsttoMainWindow *window);
@@ -205,6 +215,7 @@ static GtkActionEntry action_entries[] =
   { "open", GTK_STOCK_OPEN, N_ ("_Open"), "<control>O", N_ ("Open an image"), G_CALLBACK (cb_rstto_main_window_open_image), },
   { "open-folder", NULL, N_ ("Open _Folder"), NULL, N_ ("Open a folder"), G_CALLBACK (cb_rstto_main_window_open_folder), },
   { "save-as", GTK_STOCK_SAVE_AS, N_ ("_Save as"), "<control>s", N_ ("Save the image"), G_CALLBACK (cb_rstto_main_window_save_as), },
+  { "print", GTK_STOCK_PRINT, N_ ("_Print"), "<control>p", N_ ("Print the image"), G_CALLBACK (cb_rstto_main_window_print), },
   { "close", GTK_STOCK_CLOSE, N_ ("_Close"), "<control>W", N_ ("Close this image"), G_CALLBACK (cb_rstto_main_window_close), },
   { "close-all", NULL, N_ ("_Close All"), NULL, N_ ("Close all images"), G_CALLBACK (cb_rstto_main_window_close_all), },
   { "quit", GTK_STOCK_QUIT, N_ ("_Quit"), "<control>Q", N_ ("Quit Ristretto"), G_CALLBACK (cb_rstto_main_window_quit), },
@@ -1159,6 +1170,56 @@ cb_rstto_main_window_save_as (GtkWidget *widget, RsttoMainWindow *window)
 }
 
 /**
+ * cb_rstto_main_window_print:
+ * @widget:
+ * @window:
+ *
+ *
+ */
+static void
+cb_rstto_main_window_print (GtkWidget *widget, RsttoMainWindow *window)
+{
+
+    GtkPrintSettings *print_settings = gtk_print_settings_new ();
+    g_object_set (print_settings,
+                  "export-filename", "test.pdf",
+                  NULL);
+    GtkPrintOperation *print_operation = gtk_print_operation_new (); 
+    gtk_print_operation_set_print_settings (print_operation, print_settings);
+    
+    g_signal_connect (print_operation, "draw-page", G_CALLBACK (rstto_main_window_print_draw_page), window);
+
+    gtk_print_operation_run (print_operation, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, window, NULL);
+    
+}
+
+static void
+rstto_main_window_print_draw_page (GtkPrintOperation *operation,
+           GtkPrintContext   *print_context,
+           gint               page_nr,
+           RsttoMainWindow *window)
+{
+    g_debug ("%s", __FUNCTION__);
+    RsttoImage *image = rstto_navigator_iter_get_image (window->priv->iter);
+    GdkPixbuf *pixbuf = rstto_image_get_pixbuf (image);
+
+    guchar *data = gdk_pixbuf_get_pixels (pixbuf);
+    gint width = gdk_pixbuf_get_width (pixbuf);
+    gint height = gdk_pixbuf_get_height (pixbuf);
+    gint rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+
+    cairo_surface_t *surface = cairo_image_surface_create_for_data (data,
+                                                                    CAIRO_FORMAT_RGB24,
+                                                                    width,
+                                                                    height,
+                                                                    rowstride);
+    cairo_t *context = gtk_print_context_get_cairo_context (print_context);
+
+    cairo_set_source_surface (context, surface, 0, 0);
+}
+
+
+/**
  * cb_rstto_main_window_play:
  * @widget:
  * @window:
diff --git a/src/main_window_ui.xml b/src/main_window_ui.xml
index c2aaf0b..c244100 100644
--- a/src/main_window_ui.xml
+++ b/src/main_window_ui.xml
@@ -11,6 +11,8 @@
             <separator/>
             <menuitem action="save-as"/>
             <separator/>
+            <menuitem action="print"/>
+            <separator/>
             <menuitem action="close"/>
             <menuitem action="close-all"/>
             <menuitem action="quit"/>


More information about the Xfce4-commits mailing list