From 75cc4a06be412fa89fedfec13f524296aa106462 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Tue, 31 Jul 2012 22:30:39 +0100 Subject: Factor out some repeated code. --- framebuffer/fbtk/text.c | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) (limited to 'framebuffer') diff --git a/framebuffer/fbtk/text.c b/framebuffer/fbtk/text.c index 879d88888..d71b162f6 100644 --- a/framebuffer/fbtk/text.c +++ b/framebuffer/fbtk/text.c @@ -282,6 +282,7 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) plot_font_style_t font_style; int fh; int border; + bool caret_moved = false; fb_text_font_style(widget, &fh, &border, &font_style); @@ -324,13 +325,8 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) nsfont.font_width(&font_style, widget->u.text.text, widget->u.text.len, &widget->u.text.width); - nsfont.font_width(&font_style, widget->u.text.text, - widget->u.text.idx, &widget->u.text.idx_offset); - fbtk_set_caret(widget, true, - widget->u.text.idx_offset + border, - border, - widget->height - border - border, - fb_text_input_remove_caret_cb); + + caret_moved = true; break; case NSFB_KEY_RETURN: @@ -340,27 +336,14 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) case NSFB_KEY_RIGHT: if (widget->u.text.idx < widget->u.text.len) widget->u.text.idx++; - - nsfont.font_width(&font_style, widget->u.text.text, - widget->u.text.idx, &widget->u.text.idx_offset); - fbtk_set_caret(widget, true, - widget->u.text.idx_offset + border, - border, - widget->height - border - border, - fb_text_input_remove_caret_cb); + caret_moved = true; break; case NSFB_KEY_LEFT: if (widget->u.text.idx > 0) widget->u.text.idx--; - nsfont.font_width(&font_style, widget->u.text.text, - widget->u.text.idx, &widget->u.text.idx_offset); - fbtk_set_caret(widget, true, - widget->u.text.idx_offset + border, - border, - widget->height - border - border, - fb_text_input_remove_caret_cb); + caret_moved = true; break; case NSFB_KEY_PAGEUP: @@ -398,6 +381,11 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) nsfont.font_width(&font_style, widget->u.text.text, widget->u.text.len, &widget->u.text.width); + caret_moved = true; + break; + } + + if (caret_moved) { nsfont.font_width(&font_style, widget->u.text.text, widget->u.text.idx, &widget->u.text.idx_offset); fbtk_set_caret(widget, true, @@ -405,7 +393,6 @@ text_input(fbtk_widget_t *widget, fbtk_callback_info *cbi) border, widget->height - border - border, fb_text_input_remove_caret_cb); - break; } fbtk_request_redraw(widget); -- cgit v1.2.3