| 129 uitext->last_selection_state = 0; |
129 uitext->last_selection_state = 0; |
| 130 uitext->onchange = args->onchange; |
130 uitext->onchange = args->onchange; |
| 131 uitext->onchangedata = args->onchangedata; |
131 uitext->onchangedata = args->onchangedata; |
| 132 |
132 |
| 133 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext); |
133 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext); |
| |
134 g_object_set_data(G_OBJECT(text_area), "ui_textarea_widget", text_area); |
| 134 |
135 |
| 135 g_signal_connect( |
136 g_signal_connect( |
| 136 text_area, |
137 text_area, |
| 137 "destroy", |
138 "destroy", |
| 138 G_CALLBACK(ui_textarea_destroy), |
139 G_CALLBACK(ui_textarea_destroy), |
| 142 gtk_scrolled_window_set_policy( |
143 gtk_scrolled_window_set_policy( |
| 143 GTK_SCROLLED_WINDOW(scroll_area), |
144 GTK_SCROLLED_WINDOW(scroll_area), |
| 144 GTK_POLICY_AUTOMATIC, |
145 GTK_POLICY_AUTOMATIC, |
| 145 GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS |
146 GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS |
| 146 SCROLLEDWINDOW_SET_CHILD(scroll_area, text_area); |
147 SCROLLEDWINDOW_SET_CHILD(scroll_area, text_area); |
| |
148 g_object_set_data(G_OBJECT(scroll_area), "ui_textarea_widget", text_area); |
| 147 |
149 |
| 148 ui_widget_size_request(scroll_area, args->width, args->height); |
150 ui_widget_size_request(scroll_area, args->width, args->height); |
| 149 |
151 |
| 150 // font and padding |
152 // font and padding |
| 151 //PangoFontDescription *font; |
153 //PangoFontDescription *font; |
| 184 value->set = ui_textarea_set; |
186 value->set = ui_textarea_set; |
| 185 value->getsubstr = ui_textarea_getsubstr; |
187 value->getsubstr = ui_textarea_getsubstr; |
| 186 value->insert = ui_textarea_insert; |
188 value->insert = ui_textarea_insert; |
| 187 value->setposition = ui_textarea_setposition; |
189 value->setposition = ui_textarea_setposition; |
| 188 value->position = ui_textarea_position; |
190 value->position = ui_textarea_position; |
| |
191 value->showposition = ui_textarea_showposition; |
| 189 value->setselection = ui_textarea_setselection; |
192 value->setselection = ui_textarea_setselection; |
| 190 value->selection = ui_textarea_selection; |
193 value->selection = ui_textarea_selection; |
| 191 value->length = ui_textarea_length; |
194 value->length = ui_textarea_length; |
| 192 value->remove = ui_textarea_remove; |
195 value->remove = ui_textarea_remove; |
| 193 value->data1 = buf; |
196 value->data1 = buf; |
| 209 ui_destroy_boundvar(textarea->ctx, textarea->var); |
212 ui_destroy_boundvar(textarea->ctx, textarea->var); |
| 210 } |
213 } |
| 211 free(textarea); |
214 free(textarea); |
| 212 } |
215 } |
| 213 |
216 |
| |
217 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { |
| |
218 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
| |
219 if(!widget) { |
| |
220 fprintf(stderr, "Error: ui_textarea_scroll_to: widget is not a textarea\n"); |
| |
221 } |
| |
222 GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget)); |
| |
223 |
| |
224 GtkTextIter offset; |
| |
225 gtk_text_buffer_get_iter_at_offset(buf, &offset, pos); |
| |
226 |
| |
227 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(widget), &offset, 0.2, FALSE, 0, 0); |
| |
228 } |
| |
229 |
| 214 UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea) { |
230 UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea) { |
| 215 return SCROLLEDWINDOW_GET_CHILD(textarea); |
231 return g_object_get_data(G_OBJECT(textarea), "ui_textarea_widget"); |
| 216 } |
232 } |
| 217 |
233 |
| 218 void ui_textarea_save(UiText *text) { |
234 void ui_textarea_save(UiText *text) { |
| 219 // NOOP |
235 // NOOP |
| 220 } |
236 } |
| 292 GtkTextIter begin; |
308 GtkTextIter begin; |
| 293 GtkTextIter end; |
309 GtkTextIter end; |
| 294 gtk_text_buffer_get_selection_bounds(text->data1, &begin, &end); |
310 gtk_text_buffer_get_selection_bounds(text->data1, &begin, &end); |
| 295 text->pos = gtk_text_iter_get_offset(&begin); |
311 text->pos = gtk_text_iter_get_offset(&begin); |
| 296 return text->pos; |
312 return text->pos; |
| |
313 } |
| |
314 |
| |
315 void ui_textarea_showposition(UiText *text, int pos) { |
| |
316 ui_textarea_scroll_to(text->obj, pos); |
| 297 } |
317 } |
| 298 |
318 |
| 299 void ui_textarea_setselection(UiText *text, int begin, int end) { |
319 void ui_textarea_setselection(UiText *text, int begin, int end) { |
| 300 GtkTextBuffer *buf = text->data1; |
320 GtkTextBuffer *buf = text->data1; |
| 301 GtkTextIter ib; |
321 GtkTextIter ib; |