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

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

README
src/selector-tool.c
src/svgimage.c
src/svgimage.h
src/tbo-types.h
src/textobj.c
src/textobj.h

diff --git a/README b/README
index 50735be..4121e67 100644 (file)
--- a/README
+++ b/README
@@ -28,6 +28,7 @@ the frame with "selector" tool. In frame view you can draw:
  * With arrows keys you can move the selected object
  * To flip the current object use "v" key and "h" key
  * You can remove a frame object selecting it and pressing "del" key
+ * 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
index b05f1e1..309b61b 100644 (file)
@@ -500,6 +500,16 @@ frame_view_on_key (GtkWidget *widget, GdkEventKey *event, TboWindow *tbo)
             case GDK_Right:
                 tbo_object_move (OBJ, MOVE_RIGHT);
                 break;
+            case GDK_d:
+                if (event->state & GDK_CONTROL_MASK)
+                {
+                    tbo_object *cloned_obj = OBJ->clone (OBJ);
+                    cloned_obj->x += 10;
+                    cloned_obj->y -= 10;
+                    tbo_frame_add_obj (SELECTED, cloned_obj);
+                    set_selected_obj (cloned_obj, tbo);
+                }
+                break;
             default:
                 break;
         }
index c722e8c..fe9c364 100644 (file)
@@ -21,6 +21,7 @@ tbo_svgimage_new ()
     image->free = tbo_svg_image_free;
     image->draw = tbo_svg_image_draw;
     image->save = tbo_svg_image_save;
+    image->clone = tbo_svg_image_clone;
     image->type = SVGOBJ;
     image->flipv = FALSE;
     image->fliph = FALSE;
@@ -123,3 +124,20 @@ tbo_svg_image_save (SVGImage *self, FILE *file)
     snprintf (buffer, 1024, "   </svgimage>\n");
     fwrite (buffer, sizeof (char), strlen (buffer), file);
 }
+
+SVGImage *
+tbo_svg_image_clone (SVGImage *self)
+{
+    SVGImage *newimage;
+
+    newimage = tbo_svgimage_new_width_params (self->x,
+                                              self->y,
+                                              self->width,
+                                              self->height,
+                                              self->data);
+    newimage->angle = self->angle;
+    newimage->flipv = self->flipv;
+    newimage->fliph = self->fliph;
+
+    return newimage;
+}
index 3812c61..7405f3c 100644 (file)
@@ -12,5 +12,6 @@ SVGImage * tbo_svgimage_new_width_params (int x, int y, int width, int height, c
 void tbo_svg_image_free (SVGImage *self);
 void tbo_svg_image_draw (SVGImage *self, Frame *frame, cairo_t *cr);
 void tbo_svg_image_save (SVGImage *self, FILE *file);
+SVGImage * tbo_svg_image_clone (SVGImage *self);
 
 #endif
index 422fe9b..2838927 100644 (file)
@@ -58,6 +58,7 @@ struct tbo_object
     void (*free) (struct tbo_object *);
     void (*draw) (struct tbo_object *, Frame *, cairo_t *);
     void (*save) (struct tbo_object *, FILE *);
+    struct tbo_object * (*clone) (struct tbo_object *);
     enum TYPE type;
     gpointer data;
 };
index 8c49e02..2abb663 100644 (file)
@@ -63,6 +63,7 @@ tbo_text_new ()
     text->free = tbo_text_free;
     text->draw = tbo_text_draw;
     text->save = tbo_text_save;
+    text->clone = tbo_text_clone;
     text->type = TEXTOBJ;
     text->flipv = FALSE;
     text->fliph = FALSE;
@@ -203,3 +204,27 @@ tbo_text_save (TextObj *self, FILE *file)
     snprintf (buffer, 1024, "\n   </text>\n");
     fwrite (buffer, sizeof (char), strlen (buffer), file);
 }
+
+TextObj *
+tbo_text_clone (TextObj *self)
+{
+    TextObj *newtext;
+    text_data *data;
+    data = (text_data*)self->data;
+
+    newtext = tbo_text_new ();
+    newtext->flipv = self->flipv;
+    newtext->fliph = self->fliph;
+    tbo_text_change_color (newtext, data->font_color->r,
+                                    data->font_color->g,
+                                    data->font_color->b);
+    tbo_text_change_font (newtext, tbo_text_get_string (self));
+    tbo_text_set_text (newtext, data->text->str);
+    newtext->angle = self->angle;
+    newtext->x = self->x;
+    newtext->y = self->y;
+    newtext->width = self->width;
+    newtext->height = self->height;
+
+    return newtext;
+}
index 0095cce..c1e3066 100644 (file)
@@ -18,5 +18,6 @@ void tbo_text_change_color (TextObj *self, double r, double g, double b);
 void tbo_text_get_color (TextObj *self, GdkColor *color);
 char * tbo_text_get_string (TextObj *self);
 void tbo_text_save (TextObj *self, FILE *file);
+TextObj * tbo_text_clone (TextObj *self);
 
 #endif