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);
23 on_tview_focus_out (GtkWidget *view, GdkEventFocus *event, gpointer data)
25 set_key_binder (TRUE);
31 on_text_change (GtkTextBuffer *buf, gpointer data)
33 GtkTextIter start, end;
34 gtk_text_buffer_get_start_iter (buf, &start);
35 gtk_text_buffer_get_end_iter (buf, &end);
39 tbo_text_set_text (TEXT_SELECTED, gtk_text_buffer_get_text (buf, &start, &end, FALSE));
45 on_font_change (GtkFontButton *fbutton, TboWindow *tbo)
49 tbo_text_change_font (TEXT_SELECTED, text_tool_get_pango_font ());
56 on_color_change (GtkColorButton *cbutton, TboWindow *tbo)
61 text_tool_get_color (&r, &g, &b);
62 tbo_text_change_color (TEXT_SELECTED, r, g, b);
69 setup_toolarea (TboWindow *tbo)
73 GtkWidget *font_color_label = gtk_label_new (_("Text color:"));
74 GtkWidget *font_label = gtk_label_new (_("Font:"));
78 gtk_misc_set_alignment (GTK_MISC (font_label), 0, 0);
79 gtk_misc_set_alignment (GTK_MISC (font_color_label), 0, 0);
81 FONT = gtk_font_button_new ();
82 g_signal_connect (FONT, "font-set", G_CALLBACK (on_font_change), tbo);
83 FONT_COLOR = gtk_color_button_new ();
84 g_signal_connect (FONT_COLOR, "color-set", G_CALLBACK (on_color_change), tbo);
86 vbox = gtk_vbox_new (FALSE, 5);
88 hbox = gtk_hbox_new (FALSE, 5);
89 gtk_box_pack_start (GTK_BOX (hbox), font_label, TRUE, TRUE, 5);
90 gtk_box_pack_start (GTK_BOX (hbox), FONT, TRUE, TRUE, 5);
91 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
93 hbox = gtk_hbox_new (FALSE, 5);
94 gtk_box_pack_start (GTK_BOX (hbox), font_color_label, TRUE, TRUE, 5);
95 gtk_box_pack_start (GTK_BOX (hbox), FONT_COLOR, TRUE, TRUE, 5);
96 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
98 scroll = gtk_scrolled_window_new (NULL, NULL);
99 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
100 view = gtk_text_view_new ();
101 gtk_widget_add_events (view, GDK_FOCUS_CHANGE_MASK);
102 g_signal_connect (view, "focus-in-event", G_CALLBACK (on_tview_focus_in), tbo);
103 g_signal_connect (view, "focus-out-event", G_CALLBACK (on_tview_focus_out), tbo);
105 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
106 TEXT_BUFFER = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
107 gtk_text_buffer_set_text (TEXT_BUFFER, "", -1);
108 g_signal_connect (TEXT_BUFFER, "changed", G_CALLBACK (on_text_change), tbo);
109 gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll), view);
110 gtk_box_pack_start (GTK_BOX (vbox), scroll, FALSE, FALSE, 5);
115 void text_tool_on_select (TboWindow *tbo)
117 GtkWidget *toolarea = setup_toolarea (tbo);
118 gtk_widget_show_all (GTK_WIDGET (toolarea));
119 tbo_empty_tool_area (tbo);
120 gtk_container_add (GTK_CONTAINER (tbo->toolarea), toolarea);
123 void text_tool_on_unselect (TboWindow *tbo)
127 gtk_widget_destroy (GTK_WIDGET (FONT));
129 gtk_widget_destroy (GTK_WIDGET (FONT_COLOR));
131 tbo_empty_tool_area (tbo);
132 set_key_binder (TRUE);
135 void text_tool_on_move (GtkWidget *widget, GdkEventMotion *event, TboWindow *tbo)
138 void text_tool_on_click (GtkWidget *widget, GdkEventButton *event, TboWindow *tbo)
140 Frame *frame = get_frame_view ();
142 int x = (int)event->x;
143 int y = (int)event->y;
144 gboolean found = FALSE;
149 for (obj_list = g_list_first (frame->objects); obj_list; obj_list = obj_list->next)
151 obj = (tbo_object *)obj_list->data;
152 if (obj->type == TEXTOBJ && tbo_frame_point_inside_obj (obj, x, y))
154 text = (TextObj *)obj;
160 x = tbo_frame_get_base_x (x);
161 y = tbo_frame_get_base_y (y);
162 text_tool_get_color (&r, &g, &b);
163 text = tbo_text_new_with_params (x, y, 100, 0,
165 (char *)text_tool_get_pango_font (),
167 tbo_frame_add_obj (frame, text);
169 text_tool_set_selected (text);
172 void text_tool_on_release (GtkWidget *widget, GdkEventButton *event, TboWindow *tbo)
175 void text_tool_on_key (GtkWidget *widget, GdkEventKey *event, TboWindow *tbo)
178 void text_tool_drawing (cairo_t *cr)
180 const double dashes[] = {5, 5};
185 tbo_object *OBJ = TEXT_SELECTED;
186 cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
187 cairo_set_line_width (cr, 1);
188 cairo_set_dash (cr, dashes, G_N_ELEMENTS (dashes), 0);
189 cairo_set_source_rgb (cr, 0.9, 0, 0);
191 tbo_frame_get_obj_relative (OBJ, &ox, &oy, &ow, &oh);
193 cairo_translate (cr, ox, oy);
194 cairo_rotate (cr, OBJ->angle);
195 cairo_rectangle (cr, 0, 0, ow, oh);
198 cairo_set_antialias (cr, CAIRO_ANTIALIAS_DEFAULT);
203 text_tool_get_font_name ()
205 PangoFontDescription *pango_font = NULL;
209 pango_font = pango_font_description_from_string (
210 gtk_font_button_get_font_name (GTK_FONT_BUTTON (FONT)));
211 return pango_font_description_get_family (pango_font);
218 text_tool_get_pango_font ()
222 return (char *)gtk_font_button_get_font_name (GTK_FONT_BUTTON (FONT));
225 return "Sans Normal 27";
229 text_tool_get_color (double *r, double *g, double *b)
232 gtk_color_button_get_color (GTK_COLOR_BUTTON (FONT_COLOR), &color);
233 *r = color.red / 65535.0;
234 *g = color.green / 65535.0;
235 *b = color.blue / 65535.0;
239 text_tool_set_selected (TextObj *text)
242 char *str = tbo_text_get_text (text);
243 TEXT_SELECTED = NULL;
244 gtk_font_button_set_font_name (GTK_FONT_BUTTON (FONT), tbo_text_get_string (text));
245 tbo_text_get_color (text, &color);
246 gtk_color_button_set_color (GTK_COLOR_BUTTON (FONT_COLOR), &color);
247 gtk_text_buffer_set_text (TEXT_BUFFER, str, -1);
248 TEXT_SELECTED = text;