?? textview.c
字號:
/* Text Widget/Multiple Views * * The GtkTextView widget displays a GtkTextBuffer. One GtkTextBuffer * can be displayed by multiple GtkTextViews. This demo has two views * displaying a single buffer, and shows off the widget's text * formatting features. * */#include <gtk/gtk.h>#include <stdlib.h> /* for exit() */#include "demo-common.h"static void easter_egg_callback (GtkWidget *button, gpointer data);#define gray50_width 2#define gray50_height 2static char gray50_bits[] = { 0x02, 0x01};static voidcreate_tags (GtkTextBuffer *buffer){ GdkBitmap *stipple; /* Create a bunch of tags. Note that it's also possible to * create tags with gtk_text_tag_new() then add them to the * tag table for the buffer, gtk_text_buffer_create_tag() is * just a convenience function. Also note that you don't have * to give tags a name; pass NULL for the name to create an * anonymous tag. * * In any real app, another useful optimization would be to create * a GtkTextTagTable in advance, and reuse the same tag table for * all the buffers with the same tag set, instead of creating * new copies of the same tags for every buffer. * * Tags are assigned default priorities in order of addition to the * tag table. That is, tags created later that affect the same text * property affected by an earlier tag will override the earlier * tag. You can modify tag priorities with * gtk_text_tag_set_priority(). */ gtk_text_buffer_create_tag (buffer, "heading", "weight", PANGO_WEIGHT_BOLD, "size", 15 * PANGO_SCALE, NULL); gtk_text_buffer_create_tag (buffer, "italic", "style", PANGO_STYLE_ITALIC, NULL); gtk_text_buffer_create_tag (buffer, "bold", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_buffer_create_tag (buffer, "big", /* points times the PANGO_SCALE factor */ "size", 20 * PANGO_SCALE, NULL); gtk_text_buffer_create_tag (buffer, "xx-small", "scale", PANGO_SCALE_XX_SMALL, NULL); gtk_text_buffer_create_tag (buffer, "x-large", "scale", PANGO_SCALE_X_LARGE, NULL); gtk_text_buffer_create_tag (buffer, "monospace", "family", "monospace", NULL); gtk_text_buffer_create_tag (buffer, "blue_foreground", "foreground", "blue", NULL); gtk_text_buffer_create_tag (buffer, "red_background", "background", "red", NULL); stipple = gdk_bitmap_create_from_data (NULL, gray50_bits, gray50_width, gray50_height); gtk_text_buffer_create_tag (buffer, "background_stipple", "background_stipple", stipple, NULL); gtk_text_buffer_create_tag (buffer, "foreground_stipple", "foreground_stipple", stipple, NULL); g_object_unref (stipple); gtk_text_buffer_create_tag (buffer, "big_gap_before_line", "pixels_above_lines", 30, NULL); gtk_text_buffer_create_tag (buffer, "big_gap_after_line", "pixels_below_lines", 30, NULL); gtk_text_buffer_create_tag (buffer, "double_spaced_line", "pixels_inside_wrap", 10, NULL); gtk_text_buffer_create_tag (buffer, "not_editable", "editable", FALSE, NULL); gtk_text_buffer_create_tag (buffer, "word_wrap", "wrap_mode", GTK_WRAP_WORD, NULL); gtk_text_buffer_create_tag (buffer, "char_wrap", "wrap_mode", GTK_WRAP_CHAR, NULL); gtk_text_buffer_create_tag (buffer, "no_wrap", "wrap_mode", GTK_WRAP_NONE, NULL); gtk_text_buffer_create_tag (buffer, "center", "justification", GTK_JUSTIFY_CENTER, NULL); gtk_text_buffer_create_tag (buffer, "right_justify", "justification", GTK_JUSTIFY_RIGHT, NULL); gtk_text_buffer_create_tag (buffer, "wide_margins", "left_margin", 50, "right_margin", 50, NULL); gtk_text_buffer_create_tag (buffer, "strikethrough", "strikethrough", TRUE, NULL); gtk_text_buffer_create_tag (buffer, "underline", "underline", PANGO_UNDERLINE_SINGLE, NULL); gtk_text_buffer_create_tag (buffer, "double_underline", "underline", PANGO_UNDERLINE_DOUBLE, NULL); gtk_text_buffer_create_tag (buffer, "superscript", "rise", 10 * PANGO_SCALE, /* 10 pixels */ "size", 8 * PANGO_SCALE, /* 8 points */ NULL); gtk_text_buffer_create_tag (buffer, "subscript", "rise", -10 * PANGO_SCALE, /* 10 pixels */ "size", 8 * PANGO_SCALE, /* 8 points */ NULL); gtk_text_buffer_create_tag (buffer, "rtl_quote", "wrap_mode", GTK_WRAP_WORD, "direction", GTK_TEXT_DIR_RTL, "indent", 30, "left_margin", 20, "right_margin", 20, NULL);}static voidinsert_text (GtkTextBuffer *buffer){ GtkTextIter iter; GtkTextIter start, end; GdkPixbuf *pixbuf; GdkPixbuf *scaled; GtkTextChildAnchor *anchor; char *filename; /* demo_find_file() looks in the the current directory first, * so you can run gtk-demo without installing GTK, then looks * in the location where the file is installed. */ pixbuf = NULL; filename = demo_find_file ("gtk-logo-rgb.gif", NULL); if (filename) { pixbuf = gdk_pixbuf_new_from_file (filename, NULL); g_free (filename); } if (pixbuf == NULL) { g_printerr ("Failed to load image file gtk-logo-rgb.gif\n"); exit (1); } scaled = gdk_pixbuf_scale_simple (pixbuf, 32, 32, GDK_INTERP_BILINEAR); g_object_unref (pixbuf); pixbuf = scaled; /* get start of buffer; each insertion will revalidate the * iterator to point to just after the inserted text. */ gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); gtk_text_buffer_insert (buffer, &iter, "The text widget can display text with all kinds of nifty attributes. It also supports multiple views of the same buffer; this demo is showing the same buffer in two places.\n\n", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Font styles. ", -1, "heading", NULL); gtk_text_buffer_insert (buffer, &iter, "For example, you can have ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "italic", -1, "italic", NULL); gtk_text_buffer_insert (buffer, &iter, ", ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "bold", -1, "bold", NULL); gtk_text_buffer_insert (buffer, &iter, ", or ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "monospace (typewriter)", -1, "monospace", NULL); gtk_text_buffer_insert (buffer, &iter, ", or ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "big", -1, "big", NULL); gtk_text_buffer_insert (buffer, &iter, " text. ", -1); gtk_text_buffer_insert (buffer, &iter, "It's best not to hardcode specific text sizes; you can use relative sizes as with CSS, such as ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "xx-small", -1, "xx-small", NULL); gtk_text_buffer_insert (buffer, &iter, " or ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "x-large", -1, "x-large", NULL); gtk_text_buffer_insert (buffer, &iter, " to ensure that your program properly adapts if the user changes the default font size.\n\n", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Colors. ", -1, "heading", NULL); gtk_text_buffer_insert (buffer, &iter, "Colors such as ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "a blue foreground", -1, "blue_foreground", NULL); gtk_text_buffer_insert (buffer, &iter, " or ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "a red background", -1, "red_background", NULL); gtk_text_buffer_insert (buffer, &iter, " or even ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "a stippled red background", -1, "red_background", "background_stipple", NULL); gtk_text_buffer_insert (buffer, &iter, " or ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "a stippled blue foreground on solid red background", -1, "blue_foreground", "red_background", "foreground_stipple", NULL); gtk_text_buffer_insert (buffer, &iter, " (select that to read it) can be used.\n\n", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Underline, strikethrough, and rise. ", -1, "heading", NULL); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Strikethrough", -1, "strikethrough", NULL); gtk_text_buffer_insert (buffer, &iter, ", ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "underline", -1, "underline", NULL); gtk_text_buffer_insert (buffer, &iter, ", ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "double underline", -1, "double_underline", NULL); gtk_text_buffer_insert (buffer, &iter, ", ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "superscript", -1, "superscript", NULL); gtk_text_buffer_insert (buffer, &iter, ", and ", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "subscript", -1, "subscript", NULL); gtk_text_buffer_insert (buffer, &iter, " are all supported.\n\n", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Images. ", -1, "heading", NULL); gtk_text_buffer_insert (buffer, &iter, "The buffer can have images in it: ", -1); gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); gtk_text_buffer_insert_pixbuf (buffer, &iter, pixbuf); gtk_text_buffer_insert (buffer, &iter, " for example.\n\n", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Spacing. ", -1, "heading", NULL); gtk_text_buffer_insert (buffer, &iter, "You can adjust the amount of space before each line.\n", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "This line has a whole lot of space before it.\n", -1, "big_gap_before_line", "wide_margins", NULL); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "You can also adjust the amount of space after each line; this line has a whole lot of space after it.\n", -1, "big_gap_after_line", "wide_margins", NULL); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "You can also adjust the amount of space between wrapped lines; this line has extra space between each wrapped line in the same paragraph. To show off wrapping, some filler text: the quick brown fox jumped over the lazy dog. Blah blah blah blah blah blah blah blah blah.\n", -1, "double_spaced_line", "wide_margins", NULL); gtk_text_buffer_insert (buffer, &iter, "Also note that those lines have extra-wide margins.\n\n", -1); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "Editability. ", -1, "heading", NULL); gtk_text_buffer_insert_with_tags_by_name (buffer, &iter, "This line is 'locked down' and can't be edited by the user - just try it! You can't delete this line.\n\n", -1,
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -