X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fentry.cpp;h=7ee7a32cdd9e6f8cecb77a2297e55b61fa0a5a07;hb=56c41b294aa47a38ac3e1be70d4868f260cb4274;hp=3212d85b1691a0082670f8dba996f1adc24193fe;hpb=43625734822bdaaea4e42505b7040d404298721c;p=libs%2Fgltk.git diff --git a/source/entry.cpp b/source/entry.cpp index 3212d85..7ee7a32 100644 --- a/source/entry.cpp +++ b/source/entry.cpp @@ -161,7 +161,7 @@ void Entry::rebuild_special(const Part &part) Geometry rgeom = text.coords_to_geometry(*text_part, geom, first_row, row, col); GL::MeshBuilder bld(part_cache.create_mesh(part, *graphic->get_texture())); - bld.matrix() *= GL::Matrix::translation(rgeom.x, rgeom.y, 0); + bld.transform(GL::Matrix::translation(rgeom.x, rgeom.y, 0)); graphic->build(part.get_geometry().w, part.get_geometry().h, bld); } else if(part.get_name()=="selection") @@ -205,7 +205,7 @@ void Entry::rebuild_special(const Part &part) Geometry egeom = text.coords_to_geometry(*text_part, geom, first_row, row, ec); GL::MeshBuilder bld(part_cache.create_mesh(part, *graphic->get_texture())); - bld.matrix() *= GL::Matrix::translation(rgeom.x, rgeom.y, 0); + bld.transform(GL::Matrix::translation(rgeom.x, rgeom.y, 0)); graphic->build(egeom.x-rgeom.x, part.get_geometry().h, bld); } @@ -332,8 +332,6 @@ bool Entry::navigate(Navigation nav) { if(nav==NAV_LEFT || nav==NAV_RIGHT || ((nav==NAV_DOWN || nav==NAV_UP) && multiline)) move_edit_position(nav, false); - else if(nav==NAV_ACCEPT && !signal_enter.empty()) - signal_enter.emit(); else return false; @@ -395,6 +393,7 @@ void Entry::move_edit_position(Navigation nav, bool select) void Entry::adjust_edit_position_for_change(unsigned pos, int change) { unsigned old_edit_pos = edit_pos; + unsigned old_select_pos = selection_pos; if(change>0) { @@ -407,16 +406,23 @@ void Entry::adjust_edit_position_for_change(unsigned pos, int change) { if(edit_pos>=pos) edit_pos -= min(edit_pos-pos, -change); - if(selection_active) + if(selection_active && selection_pos>=pos) selection_pos -= min(selection_pos-pos, -change); } if(edit_pos!=old_edit_pos) signal_edit_position_changed.emit(edit_pos); + if(selection_active && (edit_pos!=old_edit_pos || selection_pos!=old_select_pos)) + { + unsigned start, end; + if(get_selection(start, end)) + signal_selection_changed.emit(start, end); + } } void Entry::set_edit_position(unsigned ep, bool select) { + bool selection_was_active = selection_active; if(select && !selection_active) selection_pos = edit_pos; selection_active = select; @@ -425,7 +431,14 @@ void Entry::set_edit_position(unsigned ep, bool select) edit_pos = min(ep, text.size()); if(edit_pos!=old_edit_pos) + { signal_edit_position_changed.emit(edit_pos); + unsigned start, end; + if(get_selection(start, end)) + signal_selection_changed.emit(start, end); + else if(selection_was_active) + signal_selection_changed.emit(edit_pos, edit_pos); + } if(multiline) check_view_range();