static VALUE textview_add_child_in_window(VALUE self, VALUE child, VALUE which_window, VALUE xpos, VALUE ypos) { G_CHILD_ADD(self, child); gtk_text_view_add_child_in_window(_SELF(self), GTK_WIDGET(RVAL2GOBJ(child)), RVAL2GENUM(which_window, GTK_TYPE_TEXT_WINDOW_TYPE), NUM2INT(xpos), NUM2INT(ypos)); return self; }
void gglk_textbuffer_put_image(GglkTextBuffer *tb, GdkPixbuf *pic, glui32 align) { int line_height = tb->base.yunits; int height = gdk_pixbuf_get_height(pic); if(align == imagealign_MarginLeft || align == imagealign_MarginRight) { /* FIXME */ gglk_textbuffer_put_image(tb, pic, imagealign_InlineUp); #if 0 GdkRectangle rect; GtkWidget *child, *event_box; event_box = gtk_event_box_new(); child = gtk_image_new_from_pixbuf(pic); gtk_container_add(GTK_CONTAINER(event_box), child); gtk_widget_show_all(event_box); gtk_text_view_get_iter_location(GTK_TEXT_VIEW(tb), &tb->base.iter, &rect); gtk_text_view_add_child_in_window(GTK_TEXT_VIEW(tb), event_box, GTK_TEXT_WINDOW_TEXT, rect.x, rect.y); #endif } else { GtkTextIter start, end; switch(align) { case imagealign_InlineUp: height = 0; break; case imagealign_InlineDown: height -= line_height; break; case imagealign_InlineCenter: height = (height - line_height) / 2; break; default: height = 0; } gtk_text_buffer_insert_pixbuf(tb->base.buffer, &tb->base.iter, pic); start = end = tb->base.iter; gtk_text_iter_backward_char(&start); if(height != 0) { GtkTextTag *tag = gtk_text_buffer_create_tag(tb->base.buffer, NULL, "rise", PANGO_SCALE * (-height), NULL); gtk_text_buffer_apply_tag(tb->base.buffer, tag, &start, &end); } gtk_text_buffer_get_end_iter(tb->base.buffer, &tb->base.iter); } }
int main (int argc, char **argv) { GtkWidget *window, *textview, *sw, *button, *button2; GtkTextBuffer *buffer; GtkTextChildAnchor *anchor; gtk_init (); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); sw = gtk_scrolled_window_new (NULL, NULL); textview = g_object_new (my_text_view_get_type (), NULL); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview)); button = gtk_button_new_with_label ("Fixed Child"); button2 = gtk_button_new_with_label ("Flowed Child"); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_window_set_default_size (GTK_WINDOW (window), 400, 400); create_tags (buffer); anchor = insert_text (buffer); gtk_container_add (GTK_CONTAINER (window), sw); gtk_container_add (GTK_CONTAINER (sw), textview); gtk_text_view_add_child_in_window (GTK_TEXT_VIEW (textview), button, GTK_TEXT_WINDOW_TEXT, 50, 150); gtk_text_view_add_child_at_anchor (GTK_TEXT_VIEW (textview), button2, anchor); gtk_widget_show (window); gtk_main (); return 0; }