gtk-demo: Add a demo for tabs

One of the least-appreciated features in pango.
It deserves a demo.
This commit is contained in:
Matthias Clasen 2016-11-29 16:39:21 -05:00
parent 0037d4d257
commit ee1ae7f9ed
3 changed files with 65 additions and 0 deletions

View File

@ -62,6 +62,7 @@ demos_base = \
spinbutton.c \ spinbutton.c \
spinner.c \ spinner.c \
stack.c \ stack.c \
tabs.c \
textmask.c \ textmask.c \
textview.c \ textview.c \
textscroll.c \ textscroll.c \

View File

@ -190,6 +190,7 @@
<file>stack.c</file> <file>stack.c</file>
<file>spinbutton.c</file> <file>spinbutton.c</file>
<file>spinner.c</file> <file>spinner.c</file>
<file>tabs.c</file>
<file>textview.c</file> <file>textview.c</file>
<file>textscroll.c</file> <file>textscroll.c</file>
<file>theming_style_classes.c</file> <file>theming_style_classes.c</file>

63
demos/gtk-demo/tabs.c Normal file
View File

@ -0,0 +1,63 @@
/* Text View/Tabs
*
* GtkTextView can position text at fixed positions, using tabs.
*/
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
GtkWidget *
do_tabs (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *view;
GtkWidget *sw;
GtkTextBuffer *buffer;
PangoTabArray *tabs;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Tabs");
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_default_size (GTK_WINDOW (window), 450, 450);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
view = gtk_text_view_new ();
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 20);
gtk_text_view_set_right_margin (GTK_TEXT_VIEW (view), 20);
tabs = pango_tab_array_new (3, TRUE);
pango_tab_array_set_tab (tabs, 0, PANGO_TAB_LEFT, 0);
pango_tab_array_set_tab (tabs, 1, PANGO_TAB_LEFT, 150);
pango_tab_array_set_tab (tabs, 2, PANGO_TAB_LEFT, 300);
gtk_text_view_set_tabs (GTK_TEXT_VIEW (view), tabs);
pango_tab_array_free (tabs);
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
gtk_text_buffer_set_text (buffer, "one\ttwo\tthree\nfour\tfive\tsix\nseven\teight\tnine", -1);
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 (window), sw);
gtk_container_add (GTK_CONTAINER (sw), view);
gtk_widget_show_all (sw);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show (window);
else
gtk_widget_destroy (window);
return window;
}