From: Matthias Clasen Date: Wed, 16 Mar 2016 18:03:44 +0000 (-0400) Subject: gtk-demo: Improve markup demo X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~24^2~5155 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=73fe852be00604324d6e7aeb98a9a1e557b9c8ea;p=gtk4.git gtk-demo: Improve markup demo Add squiggly underlines and background, and make the markup editable. https://bugzilla.gnome.org/show_bug.cgi?id=763741 --- diff --git a/demos/gtk-demo/markup.c b/demos/gtk-demo/markup.c index 08b0689214..898df8c345 100644 --- a/demos/gtk-demo/markup.c +++ b/demos/gtk-demo/markup.c @@ -8,6 +8,34 @@ #include +static GtkWidget *stack; +static GtkWidget *view; +static GtkWidget *view2; + +static void +source_toggled (GtkToggleButton *button) +{ + if (gtk_toggle_button_get_active (button)) + gtk_stack_set_visible_child_name (GTK_STACK (stack), "source"); + else + { + GtkTextBuffer *buffer; + GtkTextIter start, end; + gchar *markup; + + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view2)); + gtk_text_buffer_get_bounds (buffer, &start, &end); + markup = gtk_text_buffer_get_text (buffer, &start, &end, FALSE); + + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); + gtk_text_buffer_get_start_iter (buffer, &start); + gtk_text_buffer_insert_markup (buffer, &start, markup, -1); + g_free (markup); + + gtk_stack_set_visible_child_name (GTK_STACK (stack), "formatted"); + } +} + GtkWidget * do_markup (GtkWidget *do_widget) { @@ -15,12 +43,13 @@ do_markup (GtkWidget *do_widget) if (!window) { - GtkWidget *view; GtkWidget *sw; GtkTextBuffer *buffer; GtkTextIter iter; GBytes *bytes; const gchar *markup; + GtkWidget *header; + GtkWidget *show_source; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_screen (GTK_WINDOW (window), @@ -29,19 +58,49 @@ do_markup (GtkWidget *do_widget) g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); + stack = gtk_stack_new (); + gtk_widget_show (stack); + gtk_container_add (GTK_CONTAINER (window), stack); + + show_source = gtk_check_button_new_with_label ("Source"); + gtk_widget_set_valign (show_source, GTK_ALIGN_CENTER); + g_signal_connect (show_source, "toggled", G_CALLBACK (source_toggled), stack); + + header = gtk_header_bar_new (); + gtk_header_bar_pack_start (GTK_HEADER_BAR (header), show_source); + gtk_widget_show_all (header); + gtk_window_set_titlebar (GTK_WINDOW (window), header); + gtk_window_set_title (GTK_WINDOW (window), "Markup"); view = gtk_text_view_new (); + gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD); gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 10); gtk_text_view_set_right_margin (GTK_TEXT_VIEW (view), 10); sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), - GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_container_add (GTK_CONTAINER (window), sw); gtk_container_add (GTK_CONTAINER (sw), view); + gtk_widget_show_all (sw); + + gtk_stack_add_named (GTK_STACK (stack), sw, "formatted"); + + view2 = gtk_text_view_new (); + gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view2), GTK_WRAP_WORD); + gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view2), 10); + gtk_text_view_set_right_margin (GTK_TEXT_VIEW (view2), 10); + + sw = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (sw), view2); + gtk_widget_show_all (sw); + + gtk_stack_add_named (GTK_STACK (stack), sw, "source"); bytes = g_resources_lookup_data ("/markup/markup.txt", 0, NULL); markup = (const gchar *)g_bytes_get_data (bytes, NULL); @@ -50,9 +109,13 @@ do_markup (GtkWidget *do_widget) gtk_text_buffer_get_start_iter (buffer, &iter); gtk_text_buffer_insert_markup (buffer, &iter, markup, -1); + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view2)); + gtk_text_buffer_get_start_iter (buffer, &iter); + gtk_text_buffer_insert (buffer, &iter, markup, -1); + g_bytes_unref (bytes); - gtk_widget_show_all (sw); + gtk_widget_show (stack); } if (!gtk_widget_get_visible (window)) diff --git a/demos/gtk-demo/markup.txt b/demos/gtk-demo/markup.txt index feece2cc95..92da324a15 100644 --- a/demos/gtk-demo/markup.txt +++ b/demos/gtk-demo/markup.txt @@ -1,9 +1,9 @@ Text sizes: tiny very small small normal large very large huge -Text colors +Text colors and backgrounds -Colorful underlines +Colorful underlines and more Colorful strikethroughs