cx_bprintf(out, "", attachment->name);
}
+static void editor_insert_image(NoteEditor *editor, Attachment *attachment, GtkTextIter *iter) {
+ GtkTextView *textview = GTK_TEXT_VIEW(editor->textview);
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer(textview);
+
+ GdkPixbuf *pixbuf = attachment->ui->img->value;
+ if(!pixbuf) {
+ fprintf(stderr, "Error: editor_insert_image: no pixbuf\n");
+ return;
+ }
+
+ GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(buffer, iter);
+ GtkWidget *image = embedded_image_create(pixbuf);
+ gtk_text_view_add_child_at_anchor(textview, image, anchor);
+#if GTK_MAJOR_VERSION < 4
+ gtk_widget_show_all(image);
+#endif
+
+ // remember widget and store a reference in the textbuffer
+ // TODO: we need a cleanup strategy
+ EmbeddedWidget *em = malloc(sizeof(EmbeddedWidget));
+ em->widget = image;
+ em->anchor = anchor;
+ em->data1 = attachment;
+ em->data2 = NULL;
+ em->serialize = md_serialize_image;
+ g_object_ref(image);
+ g_object_ref(anchor);
+
+ g_object_set_data(G_OBJECT(anchor), "em", em);
+
+ BufferEmbeddedObjects *embedded_objects = g_object_get_data(G_OBJECT(buffer), "embedded");
+ cxListAdd(embedded_objects->objects, em);
+}
+
static void editor_attach_image(NoteEditor *editor, GdkPixbuf *pixbuf, char *attachment_path) {
MainWindow *wdata = editor->obj->window;
Resource *note = wdata->current_notebook->current_note;
GtkTextIter iter;
gtk_text_buffer_get_iter_at_mark(buffer, &iter, cursor);
- GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(buffer, &iter);
- GtkWidget *image = embedded_image_create(pixbuf);
- gtk_text_view_add_child_at_anchor(textview, image, anchor);
-#if GTK_MAJOR_VERSION < 4
- gtk_widget_show_all(image);
-#endif
-
- // remember widget and store a reference in the textbuffer
- // TODO: we need a cleanup strategy
- EmbeddedWidget *em = malloc(sizeof(EmbeddedWidget));
- em->widget = image;
- em->anchor = anchor;
- em->data1 = attachment;
- em->data2 = NULL;
- em->serialize = md_serialize_image;
- g_object_ref(image);
- g_object_ref(anchor);
-
- g_object_set_data(G_OBJECT(anchor), "em", em);
-
- BufferEmbeddedObjects *embedded_objects = g_object_get_data(G_OBJECT(buffer), "embedded");
- cxListAdd(embedded_objects->objects, em);
+ editor_insert_image(editor, attachment, &iter);
// add attachment to note
note_add_attachment(note, attachment);
void editor_apply_styles(Resource *note, UIWIDGET textview, UiText *text, CxList /* MDDocStyleSection */ *styles) {
GtkTextBuffer *buffer = text->data1;
GtkTextTagTable *tagtable = gtk_text_buffer_get_tag_table(buffer);
+ NoteEditor *editor = g_object_get_data(G_OBJECT(textview), "editor");
CxIterator i = cxListIterator(styles);
cx_foreach(MDDocStyleSection*, sec, i) {
if(attachment && attachment->ui->img->value) {
GdkPixbuf *pixbuf = attachment->ui->img->value;
- // TODO: remove code dup
GtkTextIter iter;
gtk_text_buffer_get_iter_at_offset(buffer, &iter, sec->pos);
- GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(buffer, &iter);
- GtkWidget *image = embedded_image_create(pixbuf);
- gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(textview), image, anchor);
-
- EmbeddedWidget *em = malloc(sizeof(EmbeddedWidget));
- em->widget = image;
- em->anchor = anchor;
- em->data1 = attachment;
- em->data2 = NULL;
- em->serialize = md_serialize_image;
- g_object_ref(image);
- g_object_ref(anchor);
-
- BufferEmbeddedObjects *embedded_objects = g_object_get_data(G_OBJECT(buffer), "embedded");
- cxListAdd(embedded_objects->objects, em);
-
- g_object_set_data(G_OBJECT(anchor), "em", em);
+ editor_insert_image(editor, attachment, &iter);
} else {
// TODO: what do we do in this case?
}