add a method to return textbox caret position

This commit is contained in:
Jinhao 2015-08-05 00:33:16 +08:00
parent f4924ef2f8
commit aef37436b0
4 changed files with 34 additions and 5 deletions

View File

@ -231,8 +231,9 @@ namespace nana{ namespace widgets
void move_ns(bool to_north); //Moves up and down void move_ns(bool to_north); //Moves up and down
void move_left(); void move_left();
void move_right(); void move_right();
nana::upoint mouse_caret(const point& screen_pos); upoint mouse_caret(const point& screen_pos);
nana::upoint caret() const; upoint caret() const;
point caret_screen_pos() const;
bool scroll(bool upwards, bool vertical); bool scroll(bool upwards, bool vertical);
bool mouse_enter(bool); bool mouse_enter(bool);
bool mouse_down(::nana::mouse, const point& screen_pos); bool mouse_down(::nana::mouse, const point& screen_pos);

View File

@ -144,7 +144,10 @@ namespace nana
bool saved() const; bool saved() const;
/// Read the text from a specified line. It returns true for success. /// Read the text from a specified line. It returns true for success.
bool getline(std::size_t line_index, nana::string&) const; bool getline(std::size_t pos, nana::string&) const;
/// Gets the caret position
bool caret_pos(point& pos, bool text_coordinate) const;
/// Appends an string. If `at_caret` is `true`, the string is inserted at the position of caret, otherwise, it is appended at end of the textbox. /// Appends an string. If `at_caret` is `true`, the string is inserted at the position of caret, otherwise, it is appended at end of the textbox.
textbox& append(const nana::string& text, bool at_caret); textbox& append(const nana::string& text, bool at_caret);

View File

@ -2359,7 +2359,7 @@ namespace nana{ namespace widgets
} }
} }
nana::upoint text_editor::mouse_caret(const point& scrpos) //From screen position upoint text_editor::mouse_caret(const point& scrpos) //From screen position
{ {
points_.caret = behavior_->screen_to_caret(scrpos); points_.caret = behavior_->screen_to_caret(scrpos);
@ -2370,11 +2370,16 @@ namespace nana{ namespace widgets
return points_.caret; return points_.caret;
} }
nana::upoint text_editor::caret() const upoint text_editor::caret() const
{ {
return points_.caret; return points_.caret;
} }
point text_editor::caret_screen_pos() const
{
return behavior_->caret_to_screen(points_.caret);
}
bool text_editor::scroll(bool upwards, bool vert) bool text_editor::scroll(bool upwards, bool vert)
{ {
if(vert && attributes_.vscroll) if(vert && attributes_.vscroll)

View File

@ -294,6 +294,26 @@ namespace drawerbase {
return (editor ? editor->getline(line_index, text) : false); return (editor ? editor->getline(line_index, text) : false);
} }
/// Gets the caret position
bool textbox::caret_pos(point& pos, bool text_coordinate) const
{
internal_scope_guard lock;
auto editor = get_drawer_trigger().editor();
auto scr_pos = editor->caret_screen_pos();
if (text_coordinate)
{
auto upos = editor->caret();
pos.x = static_cast<int>(upos.x);
pos.y = static_cast<int>(upos.y);
}
else
pos = scr_pos;
return editor->hit_text_area(scr_pos);
}
textbox& textbox::append(const nana::string& text, bool at_caret) textbox& textbox::append(const nana::string& text, bool at_caret)
{ {
internal_scope_guard lock; internal_scope_guard lock;