Exportación a PNG... DONE xD
authordanigm <dani@danigm.net>
Tue, 9 Mar 2010 20:00:41 +0000 (20:00 +0000)
committerdanigm <danigm@aa302d1f-72b1-406a-902b-8593ca2b2744>
Tue, 9 Mar 2010 20:00:41 +0000 (20:00 +0000)
From: danigm <dani@danigm.net>

git-svn-id: https://forja.rediris.es/svn/cusl4-tbo@84 aa302d1f-72b1-406a-902b-8593ca2b2744

data/ui/tbo-menu-ui.xml
po/POTFILES.in
src/Makefile.am
src/export.c [new file with mode: 0644]
src/export.h [new file with mode: 0644]
src/ui-drawing.c
src/ui-drawing.h
src/ui-menu.c

index 8d40e9d..9a0df75 100644 (file)
@@ -5,6 +5,9 @@
        <menuitem name="Open" action="OpenFile" />
        <menuitem name="Save" action="SaveFile" />
        <menuitem name="SaveAs" action="SaveFileAs" />
+       <separator/>
+       <menuitem name="Export as png" action="ToPNG" />
+       <separator/>
        <menuitem name="Quit" action="Quit" />
      </menu>
     </menubar>
index 1c07cbf..41122ca 100644 (file)
@@ -8,6 +8,7 @@ src/custom-stock.c
 src/dnd.c
 src/doodle-tool.c
 src/doodle-treeview.c
+src/export.c
 src/frame.c
 src/frame-tool.c
 src/page.c
@@ -22,3 +23,27 @@ src/text-tool.c
 src/ui-drawing.c
 src/ui-menu.c
 src/ui-toolbar.c
+src/comic.h
+src/comic-load.h
+src/comic-new-dialog.h
+src/comic-open-dialog.h
+src/comic-saveas-dialog.h
+src/custom-stock.h
+src/dnd.h
+src/doodle-tool.h
+src/doodle-treeview.h
+src/export.h
+src/frame.h
+src/frame-tool.h
+src/page.h
+src/selector-tool.h
+src/svgimage.h
+src/tbo-object.h
+src/tbo-types.h
+src/tbo-utils.h
+src/tbo-window.h
+src/textobj.h
+src/text-tool.h
+src/ui-drawing.h
+src/ui-menu.h
+src/ui-toolbar.h
index 2571426..68035a8 100644 (file)
@@ -27,6 +27,7 @@ tbo_SOURCES = \
        doodle-treeview.c \
        text-tool.c \
        textobj.c \
+       export.c \
        svgimage.c \
        dnd.c \
        tbo-object.c \
@@ -54,6 +55,7 @@ tbo_SOURCES = \
        tbo-object.h \
        comic-load.h \
        tbo-utils.h \
+       export.h \
        custom-stock.h
 
 tbo_CFLAGS = @GTK_CFLAGS@ \
diff --git a/src/export.c b/src/export.c
new file mode 100644 (file)
index 0000000..c634cad
--- /dev/null
@@ -0,0 +1,55 @@
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <cairo.h>
+
+#include "export.h"
+#include "ui-drawing.h"
+
+
+gboolean
+tbo_export_to_png (TboWindow *tbo)
+{
+    cairo_surface_t *surface;
+    cairo_t *cr;
+    int width = tbo->comic->width;
+    int height = tbo->comic->height;
+    char rpath[255];
+    char *filename;
+    GList *page_list;
+    int i;
+    gint response;
+
+    GtkWidget *filechooser;
+    filechooser = gtk_file_chooser_dialog_new (_("Export as"),
+                                               GTK_WINDOW (tbo->window),
+                                               GTK_FILE_CHOOSER_ACTION_SAVE,
+                                               GTK_STOCK_CANCEL,
+                                               GTK_RESPONSE_CANCEL,
+                                               GTK_STOCK_SAVE,
+                                               GTK_RESPONSE_ACCEPT,
+                                               NULL);
+
+    response = gtk_dialog_run (GTK_DIALOG (filechooser));
+
+    if (response == GTK_RESPONSE_ACCEPT)
+    {
+        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filechooser));
+        for (i=0, page_list = g_list_first (tbo->comic->pages); page_list; i++, page_list = page_list->next)
+        {
+            surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+            cr = cairo_create(surface);
+
+            tbo_drawing_draw_page (cr, (Page *)page_list->data, width, height);
+
+            snprintf (rpath, 255, "%s%02d.png", filename, i);
+            cairo_surface_write_to_png (surface, rpath);
+
+            cairo_destroy(cr);
+            cairo_surface_destroy(surface);
+        }
+    }
+
+    gtk_widget_destroy ((GtkWidget *) filechooser);
+
+    return FALSE;
+}
diff --git a/src/export.h b/src/export.h
new file mode 100644 (file)
index 0000000..44685cf
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __TBO_EXPORT__
+#define __TBO_EXPORT__
+
+#include <gtk/gtk.h>
+#include <cairo.h>
+#include "tbo-window.h"
+
+gboolean tbo_export_to_png (TboWindow *tbo);
+
+#endif
index 3ab49a6..db38b92 100644 (file)
 
 Frame *FRAME_VIEW = NULL;
 
+void
+tbo_drawing_draw_page (cairo_t *cr, Page *page, int w, int h)
+{
+    Frame *frame;
+    GList *frame_list;
+
+    // white background
+    cairo_set_source_rgb(cr, 1, 1, 1);
+    cairo_rectangle(cr, 0, 0, w+2, h+2);
+    cairo_fill(cr);
+
+    for (frame_list = tbo_page_get_frames (page); frame_list; frame_list = frame_list->next)
+    {
+        // draw each frame
+        frame = (Frame *)frame_list->data;
+        tbo_frame_draw (frame, cr);
+    }
+}
+
+void
+tbo_drawing_draw (cairo_t *cr, TboWindow *tbo)
+{
+    Frame *frame;
+    GList *frame_list;
+    Page *page;
+
+    int w, h;
+
+    w = tbo->comic->width;
+    h = tbo->comic->height;
+    // white background
+    cairo_set_source_rgb(cr, 1, 1, 1);
+    cairo_rectangle(cr, 0, 0, w+2, h+2);
+    cairo_fill(cr);
+
+    page = tbo_comic_get_current_page (tbo->comic);
+
+    if (!FRAME_VIEW)
+    {
+        for (frame_list = tbo_page_get_frames (page); frame_list; frame_list = frame_list->next)
+        {
+            // draw each frame
+            frame = (Frame *)frame_list->data;
+            tbo_frame_draw (frame, cr);
+        }
+    }
+    else
+    {
+        tbo_frame_draw_scaled (FRAME_VIEW, cr, w, h);
+    }
+}
 
 gboolean
 on_key_cb (GtkWidget    *widget,
@@ -48,52 +99,22 @@ on_expose_cb(GtkWidget      *widget,
              TboWindow       *tbo)
 {
     cairo_t *cr;
-    int width, height;
-
-    GdkWindow *window;
     int w, h;
-
-    Frame *frame;
-    GList *frame_list;
-    Page *page;
-
     enum Tool tool;
+    GdkWindow *window;
 
-    width = tbo->comic->width;
-    height = tbo->comic->height;
     cr = gdk_cairo_create(GTK_LAYOUT (widget)->bin_window);
 
     window = gtk_widget_get_parent_window (GTK_WIDGET (widget));
     gdk_drawable_get_size (GDK_DRAWABLE (window), &w, &h);
+
     cairo_set_source_rgb (cr, 0, 0, 0);
     cairo_rectangle (cr, 0, 0, w, h);
     cairo_fill (cr);
-    // white background and black border
-    cairo_set_source_rgb(cr, 1, 1, 1);
-    cairo_rectangle(cr, 0, 0, width+2, height+2);
-    cairo_fill(cr);
-    cairo_set_source_rgb(cr, 0.4, 0.4, 0.4);
-    cairo_rectangle (cr, 1, 1, width, height);
-    cairo_stroke (cr);
-
-    page = tbo_comic_get_current_page (tbo->comic);
 
-    if (!FRAME_VIEW)
-    {
-        for (frame_list = tbo_page_get_frames (page); frame_list; frame_list = frame_list->next)
-        {
-            // draw each frame
-            frame = (Frame *)frame_list->data;
-            tbo_frame_draw (frame, cr);
-        }
-    }
-    else
-    {
-        tbo_frame_draw_scaled (FRAME_VIEW, cr, width, height);
-    }
+    tbo_drawing_draw (cr, tbo);
 
     // Update drawing helpers
-
     tool = get_selected_tool ();
     tool_signal (tool, TOOL_DRAWING, cr);
 
index 5e24ba2..970d11d 100644 (file)
@@ -16,5 +16,7 @@ GtkWidget * get_drawing_area (int width, int height);
 void update_drawing (TboWindow *tbo);
 void set_frame_view (Frame *frame);
 Frame *get_frame_view ();
+void tbo_drawing_draw (cairo_t *cr, TboWindow *tbo);
+void tbo_drawing_draw_page (cairo_t *cr, Page *page, int w, int h);
 
 #endif
index cd1c04c..b765180 100644 (file)
@@ -8,6 +8,9 @@
 #include "comic-saveas-dialog.h"
 #include "comic-open-dialog.h"
 #include "tbo-window.h"
+#include "ui-drawing.h"
+#include "export.h"
+
 
 gboolean menu_handler (GtkWidget *widget, gpointer data){
     printf ("Menu :%s\n", ((TboWindow *) data)->comic->title);
@@ -20,6 +23,13 @@ gboolean close_cb (GtkWidget *widget, gpointer data){
     return FALSE;
 }
 
+gboolean
+tbo_menu_to_png (GtkWidget *widget, TboWindow *tbo)
+{
+    tbo_export_to_png (tbo);
+    return FALSE;
+}
+
 static const GtkActionEntry tbo_menu_entries [] = {
     /* Toplevel */
 
@@ -43,6 +53,10 @@ static const GtkActionEntry tbo_menu_entries [] = {
       N_("Save current document as ..."),
       G_CALLBACK (tbo_comic_saveas_dialog) },
 
+    { "ToPNG", GTK_STOCK_FILE, N_("Export as png"), "",
+      N_("Save current document as png"),
+      G_CALLBACK (tbo_menu_to_png) },
+
     { "Quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q",
       N_("Quit"),
       G_CALLBACK (close_cb) },