add a method to return textbox caret position
This commit is contained in:
parent
f4924ef2f8
commit
aef37436b0
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user