Added zoom fit tool
authordanigm <dani@danigm.net>
Fri, 16 Apr 2010 20:56:34 +0000 (20:56 +0000)
committerdanigm <danigm@aa302d1f-72b1-406a-902b-8593ca2b2744>
Fri, 16 Apr 2010 20:56:34 +0000 (20:56 +0000)
From: danigm <dani@danigm.net>

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

README
TODO
data/ui/tbo-toolbar-ui.xml
src/ui-drawing.c
src/ui-drawing.h
src/ui-toolbar.c

diff --git a/README b/README
index ceb2129..fd4979c 100644 (file)
--- a/README
+++ b/README
@@ -33,7 +33,8 @@ the frame with "selector" tool. In frame view you can draw:
  * You can clone an object pressing "ctrl+d"
  * To return to "page view" press "esc" key
 
-You can control the zoom with "+" and "-" keys or with zoom tools
+You can control the zoom with "+" and "-" keys or with zoom tools. You
+can set the 1:1 zoom with "1" key or fit to window with "2" key.
 
 .tbo files
 ----------
diff --git a/TODO b/TODO
index 0a4530a..aa86212 100644 (file)
--- a/TODO
+++ b/TODO
@@ -6,8 +6,6 @@ TBO TODO things:
  * Ask for size at export as png, pdf and svg. (easy)
 
  * Zoom levels: (easy)
-    * no zoom, '1' key
-    * fit drawing to window, '2' key
     * fit to select, '3' key
 
  * Edit menu: (middle)
index db8cf38..147e36a 100644 (file)
@@ -21,6 +21,7 @@
        <toolitem name="zoom100" action="Zoom100"/>
        <toolitem name="zoomout" action="Zoomout"/>
        <toolitem name="zoomin" action="Zoomin"/>
+       <toolitem name="zoomfit" action="Zoomfit"/>
      </placeholder>
     </toolbar>
 </ui>
index 3b65f49..c81881d 100644 (file)
@@ -4,6 +4,7 @@
 #include <gdk/gdkkeysyms.h>
 #include <stdlib.h>
 #include <glib/gi18n.h>
+#include <math.h>
 
 #include "ui-toolbar.h"
 
@@ -23,8 +24,6 @@
 Frame *FRAME_VIEW = NULL;
 float ZOOM_STEP = 0.05;
 float ZOOM = 1;
-int DRAWING_W = 0;
-int DRAWING_H = 0;
 gboolean KEY_BINDER = TRUE;
 
 void
@@ -112,6 +111,9 @@ on_key_cb (GtkWidget    *widget,
             case GDK_1:
                 tbo_drawing_zoom_100 (tbo);
                 break;
+            case GDK_2:
+                tbo_drawing_zoom_fit (tbo);
+                break;
             case GDK_s:
                 set_selected_tool_and_action (SELECTOR, tbo);
                 break;
@@ -142,11 +144,9 @@ on_expose_cb (GtkWidget      *widget,
 
     cr = gdk_cairo_create(GTK_LAYOUT (widget)->bin_window);
 
-    window = gtk_widget_get_parent_window (GTK_WIDGET (widget));
-    gdk_drawable_get_size (GDK_DRAWABLE (GTK_LAYOUT (widget)->bin_window), &DRAWING_W, &DRAWING_H);
-
     cairo_set_source_rgb (cr, 0, 0, 0);
-    cairo_rectangle (cr, 0, 0, DRAWING_W, DRAWING_H);
+    cairo_rectangle (cr, 0, 0, widget->allocation.width,
+                               widget->allocation.height);
     cairo_fill (cr);
 
     tbo_drawing_draw (cr, tbo);
@@ -279,7 +279,8 @@ update_drawing (TboWindow *tbo)
 {
     gtk_widget_queue_draw_area (tbo->drawing,
             0, 0,
-            DRAWING_W, DRAWING_H);
+            tbo->drawing->allocation.width,
+            tbo->drawing->allocation.height);
 }
 
 void
@@ -315,6 +316,21 @@ void tbo_drawing_zoom_100 (TboWindow *tbo)
     update_drawing (tbo);
 }
 
+void tbo_drawing_zoom_fit (TboWindow *tbo)
+{
+    float z1, z2;
+    int w, h;
+    w = tbo->drawing->allocation.width;
+    h = tbo->drawing->allocation.height;
+
+    z1 = fabs ((float)w / (float)tbo->comic->width);
+    z2 = fabs ((float)h / (float)tbo->comic->height);
+    ZOOM = z1 < z2 ? z1 : z2;
+
+    gtk_layout_set_size (GTK_LAYOUT (tbo->drawing), tbo->comic->width*ZOOM, tbo->comic->height*ZOOM);
+    update_drawing (tbo);
+}
+
 float
 tbo_drawing_get_zoom ()
 {
index 4020f60..f0d4356 100644 (file)
@@ -22,6 +22,7 @@ void tbo_drawing_draw_page (cairo_t *cr, Page *page, int w, int h);
 void tbo_drawing_zoom_in (TboWindow *tbo);
 void tbo_drawing_zoom_out (TboWindow *tbo);
 void tbo_drawing_zoom_100 (TboWindow *tbo);
+void tbo_drawing_zoom_fit (TboWindow *tbo);
 float tbo_drawing_get_zoom ();
 void set_key_binder (gboolean binder);
 
index a563dfd..2a4529b 100644 (file)
@@ -234,6 +234,13 @@ zoom_100 (GtkAction *action, TboWindow *tbo)
 }
 
 gboolean
+zoom_fit (GtkAction *action, TboWindow *tbo)
+{
+    tbo_drawing_zoom_fit (tbo);
+    return FALSE;
+}
+
+gboolean
 zoom_in (GtkAction *action, TboWindow *tbo)
 {
     tbo_drawing_zoom_in (tbo);
@@ -321,6 +328,9 @@ static const GtkActionEntry tbo_tools_entries [] = {
     { "Zoom100", GTK_STOCK_ZOOM_100, N_("Zoom 1:1"), "",
       N_("Zoom 1:1"),
       G_CALLBACK (zoom_100) },
+    { "Zoomfit", GTK_STOCK_ZOOM_FIT, N_("Zoom fit"), "",
+      N_("Zoom fit"),
+      G_CALLBACK (zoom_fit) },
     { "Zoomout", GTK_STOCK_ZOOM_OUT, N_("Zoom out"), "",
       N_("Zoom out"),
       G_CALLBACK (zoom_out) },