]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/entry.cpp
Rebuild Entry when the slider is moved
[libs/gltk.git] / source / entry.cpp
index 8b638dea2206f07fd4fb6bace8353c336fcc67c5..b00fc6bcdb3e4f4781b7bcb12dcd154a1de8cb61 100644 (file)
@@ -269,14 +269,20 @@ bool Entry::key_press(unsigned key, unsigned mod)
                if(selection_active)
                        erase_selection(true);
                else if(edit_pos>0)
-                       erase(edit_pos-1, 1);
+               {
+                       unsigned start_pos = text.move_offset(edit_pos, -1);
+                       erase(start_pos, edit_pos-start_pos);
+               }
        }
        else if(key==Input::KEY_DELETE)
        {
                if(selection_active)
                        erase_selection(true);
                else
-                       erase(edit_pos, 1);
+               {
+                       unsigned end_pos = text.move_offset(edit_pos, 1);
+                       erase(edit_pos, end_pos-edit_pos);
+               }
        }
        else if(key==Input::KEY_ENTER && multiline)
                insert(edit_pos, "\n");
@@ -292,6 +298,18 @@ bool Entry::key_press(unsigned key, unsigned mod)
                text.offset_to_coords(edit_pos, row, col);
                set_edit_position(text.coords_to_offset(row, 0), mod==MOD_SHIFT);
        }
+       else if(key==Input::KEY_PGUP)
+       {
+               unsigned row, col;
+               text.offset_to_coords(edit_pos, row, col);
+               set_edit_position(text.coords_to_offset((row<visible_rows ? 0 : row-visible_rows), col), mod==MOD_SHIFT);
+       }
+       else if(key==Input::KEY_PGDN)
+       {
+               unsigned row, col;
+               text.offset_to_coords(edit_pos, row, col);
+               set_edit_position(text.coords_to_offset(row+visible_rows, col), mod==MOD_SHIFT);
+       }
        else if(key==Input::KEY_LEFT && mod==MOD_SHIFT)
                move_edit_position(NAV_LEFT, true);
        else if(key==Input::KEY_RIGHT && mod==MOD_SHIFT)
@@ -351,7 +369,7 @@ void Entry::animate(const Time::TimeDelta &)
        rebuild();
 }
 
-void Entry::on_geometry_change()
+void Entry::on_size_change()
 {
        if(multiline)
                check_view_range();
@@ -378,15 +396,9 @@ void Entry::on_style_change()
 void Entry::move_edit_position(Navigation nav, bool select)
 {
        if(nav==NAV_LEFT)
-       {
-               if(edit_pos>0)
-                       set_edit_position(edit_pos-1, select);
-       }
+               set_edit_position(text.move_offset(edit_pos, -1), select);
        else if(nav==NAV_RIGHT)
-       {
-               if(edit_pos<text.size())
-                       set_edit_position(edit_pos+1, select);
-       }
+               set_edit_position(text.move_offset(edit_pos, 1), select);
        else if(nav==NAV_DOWN)
        {
                unsigned row, col;
@@ -399,6 +411,8 @@ void Entry::move_edit_position(Navigation nav, bool select)
                text.offset_to_coords(edit_pos, row, col);
                set_edit_position((row>0 ? text.coords_to_offset(row-1, col) : 0), select);
        }
+       else
+               throw invalid_argument("Entry::move_edit_position");
 }
 
 void Entry::set_edit_position(unsigned ep, bool select)
@@ -481,6 +495,7 @@ void Entry::slider_value_changed(double value)
                first_row = text.get_n_lines()-visible_rows-static_cast<unsigned>(value);
                if(first_row!=old_first_row)
                        signal_scroll_position_changed.emit(first_row);
+               rebuild();
        }
 }