#include #include void create_tags (GtkTextBuffer * buffer); void on_button_clear_clicked (GtkButton * button, gpointer user_data); void on_button_cut_clicked (GtkButton * button, gpointer user_data); void on_button_copy_clicked (GtkButton * button, gpointer user_data); void on_button_paste_clicked (GtkButton * button, gpointer user_data); void on_button_bold_clicked (GtkButton * button, gpointer user_data); void on_button_underline_clicked (GtkButton * button, gpointer user_data); void on_button_strikethrough_clicked (GtkButton * button, gpointer user_data); void on_button_color_clicked (GtkButton * button, gpointer user_data); void on_button_clear_clicked (GtkButton * button, gpointer user_data) { GtkTextBuffer *textbuffer = NULL; g_assert (GTK_IS_TEXT_VIEW (user_data)); textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (user_data)); gtk_text_buffer_delete_selection (textbuffer, TRUE, TRUE); } void on_button_cut_clicked (GtkButton * button, gpointer user_data) { GtkTextBuffer *textbuffer = NULL; g_assert (GTK_IS_TEXT_VIEW (user_data)); textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (user_data)); gtk_text_buffer_cut_clipboard (textbuffer, gtk_clipboard_get (GDK_NONE), TRUE); } void on_button_copy_clicked (GtkButton * button, gpointer user_data) { GtkTextBuffer *textbuffer = NULL; g_assert (GTK_IS_TEXT_VIEW (user_data)); textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (user_data)); gtk_text_buffer_copy_clipboard (textbuffer, gtk_clipboard_get (GDK_NONE)); } void on_button_paste_clicked (GtkButton * button, gpointer user_data) { GtkTextBuffer *textbuffer = NULL; g_assert (GTK_IS_TEXT_VIEW (user_data)); textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (user_data)); gtk_text_buffer_paste_clipboard (textbuffer, gtk_clipboard_get (GDK_NONE), NULL, TRUE); } void on_button_bold_clicked (GtkButton * button, gpointer user_data) { GtkTextBuffer *textbuffer = NULL; GtkTextIter start, end; g_assert (GTK_IS_TEXT_VIEW (user_data)); textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (user_data)); gtk_text_buffer_get_selection_bounds (textbuffer, &start, &end); gtk_text_buffer_apply_tag_by_name (textbuffer, "bold", &start, &end); } void on_button_underline_clicked (GtkButton * button, gpointer user_data) { GtkTextBuffer *textbuffer = NULL; GtkTextIter start, end; g_assert (GTK_IS_TEXT_VIEW (user_data)); textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (user_data)); gtk_text_buffer_get_selection_bounds (textbuffer, &start, &end); gtk_text_buffer_apply_tag_by_name (textbuffer, "underline", &start, &end); } void on_button_strikethrough_clicked (GtkButton * button, gpointer user_data) { GtkTextBuffer *textbuffer = NULL; GtkTextIter start, end; g_assert (GTK_IS_TEXT_VIEW (user_data)); textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (user_data)); gtk_text_buffer_get_selection_bounds (textbuffer, &start, &end); gtk_text_buffer_apply_tag_by_name (textbuffer, "strike", &start, &end); } void on_button_color_clicked (GtkButton * button, gpointer user_data) { GtkTextBuffer *textbuffer = NULL; GtkTextIter start, end; g_assert (GTK_IS_TEXT_VIEW (user_data)); textbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (user_data)); gtk_text_buffer_get_selection_bounds (textbuffer, &start, &end); gtk_text_buffer_apply_tag_by_name (textbuffer, "color", &start, &end); } void create_tags (GtkTextBuffer * buffer) { g_assert (GTK_IS_TEXT_BUFFER (buffer)); gtk_text_buffer_create_tag (buffer, "bold", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_buffer_create_tag (buffer, "underline", "underline", PANGO_UNDERLINE_SINGLE, NULL); gtk_text_buffer_create_tag (buffer, "strike", "strikethrough", TRUE, NULL); gtk_text_buffer_create_tag (buffer, "color", "foreground", "blue", NULL); } int main (int argc, char *argv[]) { GladeXML *xml_main_window; GtkWidget *textview; GtkTextBuffer *buffer; gtk_init (&argc, &argv); xml_main_window = glade_xml_new("editor.glade", NULL, NULL); textview = glade_xml_get_widget (xml_main_window, "textview1"); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview)); create_tags (buffer); /* connect signal handlers */ glade_xml_signal_autoconnect(xml_main_window); /* start the event loop */ gtk_main (); return 0; }