Merge branch 'dudztroyer-hotfix-1.6.2' into hotfix-1.6.2

This commit is contained in:
Jinhao 2018-11-05 02:50:17 +08:00
commit 840d6b775d
4 changed files with 3445 additions and 3416 deletions

View File

@ -167,6 +167,8 @@ namespace nana{ namespace widgets
bool select(bool); bool select(bool);
bool select_points(nana::upoint arg_a, nana::upoint arg_b);
/// Sets the end position of a selected string. /// Sets the end position of a selected string.
void set_end_caret(bool stay_in_view); void set_end_caret(bool stay_in_view);

View File

@ -224,6 +224,8 @@ namespace nana
/// Selects/unselects all text. /// Selects/unselects all text.
void select(bool); void select(bool);
void select_points(nana::upoint arg_a, nana::upoint arg_b);
/// Returns the bounds of a text selection /// Returns the bounds of a text selection
/** /**
* @return no selection if pair.first == pair.second. * @return no selection if pair.first == pair.second.

View File

@ -25,7 +25,8 @@
#include <algorithm> #include <algorithm>
#include <map> #include <map>
namespace nana{ namespace widgets namespace nana {
namespace widgets
{ {
namespace skeletons namespace skeletons
{ {
@ -1632,14 +1633,20 @@ namespace nana{ namespace widgets
select_.a = select_.b = points_.caret; select_.a = select_.b = points_.caret;
const auto& line = impl_->textbase.getline(select_.b.y); const auto& line = impl_->textbase.getline(select_.b.y);
if (select_.a.x < line.size() && !std::isalnum(line[select_.a.x]) && line[select_.a.x] != '_') {
++select_.b.x;
}
else {
// Expand the selection forward to the word's end. // Expand the selection forward to the word's end.
while (select_.b.x < line.size() && !std::iswspace(line[select_.b.x])) while (select_.b.x < line.size() && !std::iswspace(line[select_.b.x]) && (std::isalnum(line[select_.b.x]) || line[select_.b.x] == '_'))
++select_.b.x; ++select_.b.x;
// Expand the selection backward to the word's start. // Expand the selection backward to the word's start.
while (select_.a.x > 0 && !std::iswspace(line[select_.a.x - 1])) while (select_.a.x > 0 && !std::iswspace(line[select_.a.x - 1]) && (std::isalnum(line[select_.a.x - 1]) || line[select_.a.x - 1] == '_'))
--select_.a.x; --select_.a.x;
}
select_.mode_selection = selection::mode::method_selected; select_.mode_selection = selection::mode::method_selected;
impl_->try_refresh = sync_graph::refresh; impl_->try_refresh = sync_graph::refresh;
return true; return true;
@ -1865,6 +1872,15 @@ namespace nana{ namespace widgets
return false; return false;
} }
bool text_editor::select_points(nana::upoint arg_a, nana::upoint arg_b)
{
select_.a = arg_a;
select_.b = arg_b;
select_.mode_selection = selection::mode::method_selected;
impl_->try_refresh = sync_graph::refresh;
return true;
}
void text_editor::set_end_caret(bool stay_in_view) void text_editor::set_end_caret(bool stay_in_view)
{ {
bool new_sel_end = (select_.b != points_.caret); bool new_sel_end = (select_.b != points_.caret);

View File

@ -588,6 +588,15 @@ namespace drawerbase {
API::refresh_window(*this); API::refresh_window(*this);
} }
void textbox::select_points(nana::upoint arg_a, nana::upoint arg_b)
{
auto editor = get_drawer_trigger().editor();
internal_scope_guard lock;
if (editor && editor->select_points(arg_a, arg_b))
API::refresh_window(*this);
}
std::pair<upoint, upoint> textbox::selection() const std::pair<upoint, upoint> textbox::selection() const
{ {
std::pair<upoint, upoint> points; std::pair<upoint, upoint> points;