3 * Copyright (C) 2010 Benjamin Otte <otte@gnome.ogr>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
22 #include "prop-editor.h"
24 /* This is exactly the style information you've been looking for */
25 #define GTK_STYLE_PROVIDER_PRIORITY_FORCE G_MAXUINT
30 " background-image: none;\n" \
31 " background-color: red;\n" \
32 " border-color: black;\n" \
33 " border-radius: 0;\n" \
36 ".play:nth-child(even) {\n" \
37 " background-color: yellow;\n" \
41 ".play:nth-child(first) {\n" \
42 " border-radius: 5 0 0 5;\n" \
45 ".play:nth-child(last) {\n" \
46 " border-radius: 0 5 5 0;\n" \
51 show_parsing_error (GtkCssProvider *provider,
52 GtkCssSection *section,
54 GtkTextBuffer *buffer)
56 GtkTextIter start, end;
59 gtk_text_buffer_get_iter_at_line_index (buffer,
61 gtk_css_section_get_start_line (section),
62 gtk_css_section_get_start_position (section));
63 gtk_text_buffer_get_iter_at_line_index (buffer,
65 gtk_css_section_get_end_line (section),
66 gtk_css_section_get_end_position (section));
68 if (g_error_matches (error, GTK_CSS_PROVIDER_ERROR, GTK_CSS_PROVIDER_ERROR_DEPRECATED))
73 gtk_text_buffer_apply_tag_by_name (buffer, tag_name, &start, &end);
77 css_text_changed (GtkTextBuffer *buffer,
78 GtkCssProvider *provider)
80 GtkTextIter start, end;
83 gtk_text_buffer_get_start_iter (buffer, &start);
84 gtk_text_buffer_get_end_iter (buffer, &end);
85 gtk_text_buffer_remove_all_tags (buffer, &start, &end);
87 text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
88 gtk_css_provider_load_from_data (provider, text, -1, NULL);
91 gtk_style_context_reset_widgets (gdk_screen_get_default ());
95 remove_widget (GtkWidget *widget)
97 gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (widget)), widget);
100 static int count = 0;
103 add_button (GtkBox *box)
108 text = g_strdup_printf ("Remove %d", ++count);
109 button = (GtkWidget *)gtk_button_new_from_stock (text);
111 gtk_style_context_add_class (gtk_widget_get_style_context (button), "play");
112 g_signal_connect_swapped (button,
114 G_CALLBACK (remove_widget),
116 gtk_widget_show (button);
117 gtk_container_add (GTK_CONTAINER (box), button);
121 add_toolbutton (GtkToolbar *toolbar)
126 text = g_strdup_printf ("Remove %d", ++count);
127 button = (GtkWidget *)gtk_tool_button_new (NULL, text);
129 gtk_style_context_add_class (gtk_widget_get_style_context (button), "play");
130 g_signal_connect_swapped (button,
132 G_CALLBACK (remove_widget),
134 gtk_widget_show (button);
135 gtk_container_add (GTK_CONTAINER (toolbar), button);
139 set_orientation (GtkSwitch *switch_)
141 gtk_widget_set_default_direction (gtk_switch_get_active (switch_) ? GTK_TEXT_DIR_LTR : GTK_TEXT_DIR_RTL);
145 main (gint argc, gchar **argv)
147 GtkWidget *window, *main_box, *container, *child;
148 GtkWidget *box, *toolbar;
149 GtkStyleProvider *provider;
152 gtk_init (&argc, &argv);
154 css = gtk_text_buffer_new (NULL);
155 gtk_text_buffer_create_tag (css,
157 "background", "rgba(255,255,0,0.3)",
159 gtk_text_buffer_create_tag (css,
161 "background", "rgba(255,0,0,0.3)",
164 provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
165 gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
167 GTK_STYLE_PROVIDER_PRIORITY_FORCE);
169 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
171 g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
172 g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
174 main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
175 gtk_container_add (GTK_CONTAINER (window), main_box);
177 toolbar = gtk_toolbar_new ();
178 gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_TEXT);
179 gtk_box_pack_start (GTK_BOX (main_box), toolbar, FALSE, TRUE, 0);
181 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
182 gtk_box_pack_start (GTK_BOX (main_box), box, FALSE, TRUE, 0);
184 container = gtk_scrolled_window_new (NULL, NULL);
185 gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (container), 200);
186 gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (container), 200);
187 gtk_box_pack_start (GTK_BOX (main_box), container, TRUE, TRUE, 0);
188 child = gtk_text_view_new_with_buffer (css);
189 gtk_container_add (GTK_CONTAINER (container), child);
190 g_signal_connect (css,
192 G_CALLBACK (css_text_changed),
194 gtk_text_buffer_set_text (css,
197 g_signal_connect (provider,
199 G_CALLBACK (show_parsing_error),
200 gtk_text_view_get_buffer (GTK_TEXT_VIEW (child)));
202 container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
203 gtk_box_pack_start (GTK_BOX (main_box), container, FALSE, TRUE, 0);
204 child = gtk_switch_new ();
205 gtk_switch_set_active (GTK_SWITCH (child), gtk_widget_get_default_direction () == GTK_TEXT_DIR_LTR);
206 g_signal_connect (child,
208 G_CALLBACK (set_orientation),
210 gtk_box_pack_start (GTK_BOX (container), child, FALSE, FALSE, 0);
211 child = gtk_label_new ("left-to-right");
212 gtk_box_pack_start (GTK_BOX (container), child, FALSE, FALSE, 0);
213 child = gtk_button_new_with_label ("Add button");
214 g_signal_connect_swapped (child,
216 G_CALLBACK (add_button),
218 gtk_box_pack_end (GTK_BOX (container), child, FALSE, FALSE, 0);
219 child = gtk_button_new_with_label ("Add toolbutton");
220 g_signal_connect_swapped (child,
222 G_CALLBACK (add_toolbutton),
224 gtk_box_pack_end (GTK_BOX (container), child, FALSE, FALSE, 0);
226 add_toolbutton (GTK_TOOLBAR (toolbar));
227 add_toolbutton (GTK_TOOLBAR (toolbar));
228 add_toolbutton (GTK_TOOLBAR (toolbar));
229 add_toolbutton (GTK_TOOLBAR (toolbar));
231 add_button (GTK_BOX (box));
232 add_button (GTK_BOX (box));
233 add_button (GTK_BOX (box));
234 add_button (GTK_BOX (box));
236 gtk_widget_show_all (window);