2 #include <glib/gi18n.h>
4 #include "tbo-window.h"
8 #include "ui-drawing.h"
10 static GtkWidget *FONT = NULL;
11 static GtkWidget *FONT_COLOR = NULL;
12 static TextObj *TEXT_SELECTED = NULL;
13 static GtkTextBuffer *TEXT_BUFFER = NULL;
16 on_tview_focus_in (GtkWidget *view, GdkEventFocus *event, gpointer data)
18 set_key_binder (FALSE);
22 on_tview_focus_out (GtkWidget *view, GdkEventFocus *event, gpointer data)
24 set_key_binder (TRUE);
29 on_text_change (GtkTextBuffer *buf, gpointer data)
31 GtkTextIter start, end;
32 gtk_text_buffer_get_start_iter (buf, &start);
33 gtk_text_buffer_get_end_iter (buf, &end);
37 tbo_text_set_text (TEXT_SELECTED, gtk_text_buffer_get_text (buf, &start, &end, FALSE));
42 on_font_change (GtkFontButton *fbutton, TboWindow *tbo)
46 tbo_text_change_font (TEXT_SELECTED, text_tool_get_pango_font ());
52 on_color_change (GtkColorButton *cbutton, TboWindow *tbo)
57 text_tool_get_color (&r, &g, &b);
58 tbo_text_change_color (TEXT_SELECTED, r, g, b);
64 setup_toolarea (TboWindow *tbo)
68 GtkWidget *font_color_label = gtk_label_new (_("Text color:"));
69 GtkWidget *font_label = gtk_label_new (_("Font:"));
73 gtk_misc_set_alignment (GTK_MISC (font_label), 0, 0);
74 gtk_misc_set_alignment (GTK_MISC (font_color_label), 0, 0);
76 FONT = gtk_font_button_new ();
77 g_signal_connect (FONT, "font-set", G_CALLBACK (on_font_change), tbo);
78 FONT_COLOR = gtk_color_button_new ();
79 g_signal_connect (FONT_COLOR, "color-set", G_CALLBACK (on_color_change), tbo);
81 vbox = gtk_vbox_new (FALSE, 5);
83 hbox = gtk_hbox_new (FALSE, 5);
84 gtk_box_pack_start (GTK_BOX (hbox), font_label, TRUE, TRUE, 5);
85 gtk_box_pack_start (GTK_BOX (hbox), FONT, TRUE, TRUE, 5);
86 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
88 hbox = gtk_hbox_new (FALSE, 5);
89 gtk_box_pack_start (GTK_BOX (hbox), font_color_label, TRUE, TRUE, 5);
90 gtk_box_pack_start (GTK_BOX (hbox), FONT_COLOR, TRUE, TRUE, 5);
91 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
93 scroll = gtk_scrolled_window_new (NULL, NULL);
94 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
95 view = gtk_text_view_new ();
96 gtk_widget_add_events (view, GDK_FOCUS_CHANGE_MASK);
97 g_signal_connect (view, "focus-in-event", G_CALLBACK (on_tview_focus_in), tbo);
98 g_signal_connect (view, "focus-out-event", G_CALLBACK (on_tview_focus_out), tbo);
100 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
101 TEXT_BUFFER = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
102 gtk_text_buffer_set_text (TEXT_BUFFER, "", -1);
103 g_signal_connect (TEXT_BUFFER, "changed", G_CALLBACK (on_text_change), tbo);
104 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll), view);
105 gtk_box_pack_start (GTK_BOX (vbox), scroll, FALSE, FALSE, 5);
110 void text_tool_on_select (TboWindow *tbo)
112 GtkWidget *toolarea = setup_toolarea (tbo);
113 gtk_widget_show_all (GTK_WIDGET (toolarea));
114 tbo_empty_tool_area (tbo);
115 gtk_container_add (GTK_CONTAINER (tbo->toolarea), toolarea);
118 void text_tool_on_unselect (TboWindow *tbo)
122 gtk_widget_destroy (GTK_WIDGET (FONT));
124 gtk_widget_destroy (GTK_WIDGET (FONT_COLOR));
126 tbo_empty_tool_area (tbo);
127 set_key_binder (TRUE);
130 void text_tool_on_move (GtkWidget *widget, GdkEventMotion *event, TboWindow *tbo)
133 void text_tool_on_click (GtkWidget *widget, GdkEventButton *event, TboWindow *tbo)
135 Frame *frame = get_frame_view ();
137 int x = (int)event->x;
138 int y = (int)event->y;
139 gboolean found = FALSE;
144 for (obj_list = g_list_first (frame->objects); obj_list; obj_list = obj_list->next)
146 obj = (tbo_object *)obj_list->data;
147 if (obj->type == TEXTOBJ && tbo_frame_point_inside_obj (obj, x, y))
149 text = (TextObj *)obj;
155 x = tbo_frame_get_base_x (x);
156 y = tbo_frame_get_base_y (y);
157 text_tool_get_color (&r, &g, &b);
158 text = tbo_text_new_width_params (x, y, 100, 0,
160 (char *)text_tool_get_pango_font (),
162 tbo_frame_add_obj (frame, text);
164 text_tool_set_selected (text);
167 void text_tool_on_release (GtkWidget *widget, GdkEventButton *event, TboWindow *tbo)
170 void text_tool_on_key (GtkWidget *widget, GdkEventKey *event, TboWindow *tbo)
173 void text_tool_drawing (cairo_t *cr)
175 const double dashes[] = {5, 5};
180 tbo_object *OBJ = TEXT_SELECTED;
181 cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
182 cairo_set_line_width (cr, 1);
183 cairo_set_dash (cr, dashes, G_N_ELEMENTS (dashes), 0);
184 cairo_set_source_rgb (cr, 0.9, 0, 0);
186 tbo_frame_get_obj_relative (OBJ, &ox, &oy, &ow, &oh);
188 cairo_translate (cr, ox, oy);
189 cairo_rotate (cr, OBJ->angle);
190 cairo_rectangle (cr, 0, 0, ow, oh);
193 cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
198 text_tool_get_font_name ()
200 PangoFontDescription *pango_font = NULL;
204 pango_font = pango_font_description_from_string (
205 gtk_font_button_get_font_name (GTK_FONT_BUTTON (FONT)));
206 return pango_font_description_get_family (pango_font);
213 text_tool_get_pango_font ()
217 return (char *)gtk_font_button_get_font_name (GTK_FONT_BUTTON (FONT));
220 return "Sans Normal 27";
224 text_tool_get_color (double *r, double *g, double *b)
227 gtk_color_button_get_color (GTK_COLOR_BUTTON (FONT_COLOR), &color);
228 *r = color.red / 65535.0;
229 *g = color.green / 65535.0;
230 *b = color.blue / 65535.0;
234 text_tool_set_selected (TextObj *text)
237 char *str = tbo_text_get_text (text);
238 TEXT_SELECTED = NULL;
239 gtk_font_button_set_font_name (GTK_FONT_BUTTON (FONT), tbo_text_get_string (text));
240 tbo_text_get_color (text, &color);
241 gtk_color_button_set_color (GTK_COLOR_BUTTON (FONT_COLOR), &color);
242 gtk_text_buffer_set_text (TEXT_BUFFER, str, -1);
243 TEXT_SELECTED = text;