Now it's abaliable to clone frames with ctrl+d
authordanigm <dani@danigm.net>
Wed, 17 Mar 2010 21:55:25 +0000 (21:55 +0000)
committerdanigm <danigm@aa302d1f-72b1-406a-902b-8593ca2b2744>
Wed, 17 Mar 2010 21:55:25 +0000 (21:55 +0000)
From: danigm <dani@danigm.net>

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

README
TODO
src/frame.c
src/frame.h
src/page.c
src/page.h
src/selector-tool.c

diff --git a/README b/README
index 4121e67..5198e03 100644 (file)
--- a/README
+++ b/README
@@ -16,6 +16,7 @@ When you run TBO you are in "page view", and here you can:
  * Delete current page
  * Select/move/resize current page frames with select tool
  * You can remove a frame selecting it and pressing "del" key
+ * You can clone a frame pressing ctrl+d
  * Create new page frames
 
 When you have a frame you can go to "frame view" by double clicking in
diff --git a/TODO b/TODO
index 64d0d7a..f078892 100644 (file)
--- a/TODO
+++ b/TODO
@@ -10,8 +10,6 @@ TBO TODO things:
     * 't' for text
     ...
 
- * Copy and paste frame and objects in frame (easy)
-
  * Ask for size at export as png, pdf and svg. (easy)
 
  * Zoom levels: (easy)
index 921b2fc..a949596 100644 (file)
@@ -292,3 +292,24 @@ tbo_frame_save (Frame *frame, FILE *file)
     snprintf (buffer, 255, "  </frame>\n");
     fwrite (buffer, sizeof (char), strlen (buffer), file);
 }
+
+Frame *
+tbo_frame_clone (Frame *frame)
+{
+    GList *o;
+    tbo_object *cur_object;
+    Frame *newframe = tbo_frame_new (frame->x, frame->y,
+                                     frame->width, frame->height);
+
+    for (o=g_list_first (frame->objects); o; o = g_list_next(o))
+    {
+        cur_object = (tbo_object *) o->data;
+        tbo_frame_add_obj (newframe, cur_object->clone (cur_object));
+    }
+    newframe->border = frame->border;
+    newframe->color->r = frame->color->r;
+    newframe->color->g = frame->color->g;
+    newframe->color->b = frame->color->b;
+
+    return newframe;
+}
index 6c23af6..169cdf2 100644 (file)
@@ -26,6 +26,7 @@ int tbo_frame_get_base_y (int y);
 int tbo_frame_get_base_x (int x);
 void tbo_frame_set_color (Frame *frame, GdkColor *color);
 void tbo_frame_save (Frame *frame, FILE *file);
+Frame *tbo_frame_clone (Frame *frame);
 
 #endif
 
index da6785e..3b3813b 100644 (file)
@@ -45,6 +45,12 @@ tbo_page_new_frame (Page *page, int x, int y,
 }
 
 void
+tbo_page_add_frame (Page *page, Frame *frame)
+{
+    page->frames = g_list_append (page->frames, frame);
+}
+
+void
 tbo_page_del_frame_by_index (Page *page, int nth)
 {
     Frame *frame;
index fadb0e3..479eb5d 100644 (file)
@@ -8,6 +8,7 @@
 Page *tbo_page_new (Comic *comic);
 void tbo_page_free (Page *page);
 Frame *tbo_page_new_frame (Page *page, int x, int y, int w, int h);
+void tbo_page_add_frame (Page *page, Frame *frame);
 void tbo_page_del_frame_by_index (Page *page, int nth);
 void tbo_page_del_frame (Page *page, Frame *frame);
 int tbo_page_len (Page *page);
index 309b61b..234ba7b 100644 (file)
@@ -686,13 +686,28 @@ page_view_on_key (GtkWidget *widget, GdkEventKey *event, TboWindow *tbo)
         set_selected (NULL, tbo);
     }
 
-    if (event->keyval == GDK_Tab)
+    switch (event->keyval)
     {
-        set_selected (tbo_page_next_frame (page), tbo);
-        if (SELECTED == NULL)
-        {
-            set_selected (tbo_page_first_frame (page), tbo);
-        }
+        case GDK_Tab:
+            set_selected (tbo_page_next_frame (page), tbo);
+            if (SELECTED == NULL)
+            {
+                set_selected (tbo_page_first_frame (page), tbo);
+            }
+            break;
+
+        case GDK_d:
+            if ((event->state & GDK_CONTROL_MASK) && SELECTED)
+            {
+                Frame *cloned_frame = tbo_frame_clone (SELECTED);
+                cloned_frame->x += 10;
+                cloned_frame->y -= 10;
+                tbo_page_add_frame (page, cloned_frame);
+                set_selected (cloned_frame, tbo);
+            }
+            break;
+        default:
+            break;
     }
 }