]> git.donarmstrong.com Git - xournal.git/blobdiff - src/xo-paint.c
paste images and text directly from and to other applications
[xournal.git] / src / xo-paint.c
index 33576f8a21cca3fc5ccbef072e631fb5d9f4e361..15b1fe86f65aacbb9958aa71cd57b16f35da77ec 100644 (file)
@@ -608,9 +608,9 @@ void finalize_selectrect(void)
   }
   
   if (ui.selection->items == NULL) {
-    // if we clicked inside a text zone ?  
-    item = click_is_in_text(ui.selection->layer, x1, y1);
-    if (item!=NULL && item==click_is_in_text(ui.selection->layer, x2, y2)) {
+    // if we clicked inside a text zone or image?  
+    item = click_is_in_text_or_image(ui.selection->layer, x1, y1);
+    if (item!=NULL && item==click_is_in_text_or_image(ui.selection->layer, x2, y2)) {
       ui.selection->items = g_list_append(ui.selection->items, item);
       g_memmove(&(ui.selection->bbox), &(item->bbox), sizeof(struct BBox));
       gnome_canvas_item_set(ui.selection->canvas_item,
@@ -1259,6 +1259,22 @@ struct Item *click_is_in_text(struct Layer *layer, double x, double y)
   return val;
 }
 
+struct Item *click_is_in_text_or_image(struct Layer *layer, double x, double y)
+{
+  GList *itemlist;
+  struct Item *item, *val;
+  
+  val = NULL;
+  for (itemlist = layer->items; itemlist!=NULL; itemlist = itemlist->next) {
+    item = (struct Item *)itemlist->data;
+    if (item->type != ITEM_TEXT && item->type != ITEM_IMAGE) continue;
+    if (x<item->bbox.left || x>item->bbox.right) continue;
+    if (y<item->bbox.top || y>item->bbox.bottom) continue;
+    val = item;
+  }
+  return val;
+}
+
 void refont_text_item(struct Item *item, gchar *font_name, double font_size)
 {
   if (!strcmp(font_name, item->font_name) && font_size==item->font_size) return;