ui/gtk/text.c

changeset 1067
4243fcc0aa5c
parent 1065
cb3c1fcecaa0
equal deleted inserted replaced
1066:afe02792303d 1067:4243fcc0aa5c
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;

mercurial