add textbox:indexByPos and :lineY methods
This commit is contained in:
parent
1e16ab5464
commit
65b4ac8262
@ -37,7 +37,9 @@ namespace gui {
|
|||||||
virtual void scrolled(int value) override;
|
virtual void scrolled(int value) override;
|
||||||
virtual void setScrollable(bool flag);
|
virtual void setScrollable(bool flag);
|
||||||
void listenInterval(float interval, OnTimeOut callback, int repeat=-1);
|
void listenInterval(float interval, OnTimeOut callback, int repeat=-1);
|
||||||
virtual glm::vec2 getContentOffset() override {return glm::vec2(0.0f, scroll);};
|
virtual glm::vec2 getContentOffset() const override {
|
||||||
|
return glm::vec2(0.0f, scroll);
|
||||||
|
};
|
||||||
virtual void setSize(const glm::vec2& size) override;
|
virtual void setSize(const glm::vec2& size) override;
|
||||||
virtual int getScrollStep() const;
|
virtual int getScrollStep() const;
|
||||||
virtual void setScrollStep(int step);
|
virtual void setScrollStep(int step);
|
||||||
|
|||||||
@ -671,6 +671,11 @@ int TextBox::calcIndexAt(int x, int y) const {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TextBox::getLineYOffset(int line) const {
|
||||||
|
if (rawTextCache.fontId == 0) return 0;
|
||||||
|
return label->getLineYOffset(line) + getContentOffset().y;
|
||||||
|
}
|
||||||
|
|
||||||
static inline std::wstring get_alphabet(wchar_t c) {
|
static inline std::wstring get_alphabet(wchar_t c) {
|
||||||
std::wstring alphabet {c};
|
std::wstring alphabet {c};
|
||||||
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_') {
|
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_') {
|
||||||
|
|||||||
@ -74,7 +74,6 @@ namespace gui {
|
|||||||
|
|
||||||
size_t normalizeIndex(int index);
|
size_t normalizeIndex(int index);
|
||||||
|
|
||||||
int calcIndexAt(int x, int y) const;
|
|
||||||
void setTextOffset(uint x);
|
void setTextOffset(uint x);
|
||||||
bool eraseSelected();
|
bool eraseSelected();
|
||||||
void resetSelection();
|
void resetSelection();
|
||||||
@ -186,6 +185,9 @@ namespace gui {
|
|||||||
/// @return line position in text
|
/// @return line position in text
|
||||||
virtual size_t getLinePos(uint line) const;
|
virtual size_t getLinePos(uint line) const;
|
||||||
|
|
||||||
|
int calcIndexAt(int x, int y) const;
|
||||||
|
int getLineYOffset(int line) const;
|
||||||
|
|
||||||
/// @brief Check text with validator set with setTextValidator
|
/// @brief Check text with validator set with setTextValidator
|
||||||
/// @return true if text is valid
|
/// @return true if text is valid
|
||||||
virtual bool validate();
|
virtual bool validate();
|
||||||
|
|||||||
@ -267,7 +267,7 @@ namespace gui {
|
|||||||
virtual glm::vec4 calcColor() const;
|
virtual glm::vec4 calcColor() const;
|
||||||
|
|
||||||
/// @brief Get inner content offset. Used for scroll
|
/// @brief Get inner content offset. Used for scroll
|
||||||
virtual glm::vec2 getContentOffset() {return glm::vec2(0.0f);};
|
virtual glm::vec2 getContentOffset() const {return glm::vec2(0.0f);};
|
||||||
/// @brief Calculate screen position of the element
|
/// @brief Calculate screen position of the element
|
||||||
virtual glm::vec2 calcPos() const;
|
virtual glm::vec2 calcPos() const;
|
||||||
virtual void setPos(const glm::vec2& pos);
|
virtual void setPos(const glm::vec2& pos);
|
||||||
|
|||||||
@ -178,6 +178,24 @@ static int l_get_line_at(lua::State* L) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int l_get_index_by_pos(lua::State* L) {
|
||||||
|
auto node = get_document_node(L, 1);
|
||||||
|
auto position = lua::tovec2(L, 2);
|
||||||
|
if (auto box = dynamic_cast<TextBox*>(node.node.get())) {
|
||||||
|
return lua::pushinteger(L, box->calcIndexAt(position.x, position.y));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int l_get_line_y(lua::State* L) {
|
||||||
|
auto node = get_document_node(L, 1);
|
||||||
|
auto line = lua::tointeger(L, 2);
|
||||||
|
if (auto box = dynamic_cast<TextBox*>(node.node.get())) {
|
||||||
|
return lua::pushinteger(L, box->getLineYOffset(line));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int l_get_line_pos(lua::State* L) {
|
static int l_get_line_pos(lua::State* L) {
|
||||||
auto node = get_document_node(L, 1);
|
auto node = get_document_node(L, 1);
|
||||||
auto line = lua::tointeger(L, 2);
|
auto line = lua::tointeger(L, 2);
|
||||||
@ -509,6 +527,12 @@ static int p_get_focused(UINode* node, lua::State* L) {
|
|||||||
static int p_get_line_at(UINode*, lua::State* L) {
|
static int p_get_line_at(UINode*, lua::State* L) {
|
||||||
return lua::pushcfunction(L, l_get_line_at);
|
return lua::pushcfunction(L, l_get_line_at);
|
||||||
}
|
}
|
||||||
|
static int p_get_index_by_pos(UINode*, lua::State* L) {
|
||||||
|
return lua::pushcfunction(L, l_get_index_by_pos);
|
||||||
|
}
|
||||||
|
static int p_get_line_y(UINode*, lua::State* L) {
|
||||||
|
return lua::pushcfunction(L, l_get_line_y);
|
||||||
|
}
|
||||||
static int p_get_line_pos(UINode*, lua::State* L) {
|
static int p_get_line_pos(UINode*, lua::State* L) {
|
||||||
return lua::pushcfunction(L, l_get_line_pos);
|
return lua::pushcfunction(L, l_get_line_pos);
|
||||||
}
|
}
|
||||||
@ -619,6 +643,8 @@ static int l_gui_getattr(lua::State* L) {
|
|||||||
{"edited", p_get_edited},
|
{"edited", p_get_edited},
|
||||||
{"lineNumbers", p_get_line_numbers},
|
{"lineNumbers", p_get_line_numbers},
|
||||||
{"lineAt", p_get_line_at},
|
{"lineAt", p_get_line_at},
|
||||||
|
{"indexByPos", p_get_index_by_pos},
|
||||||
|
{"lineY", p_get_line_y},
|
||||||
{"linePos", p_get_line_pos},
|
{"linePos", p_get_line_pos},
|
||||||
{"syntax", p_get_syntax},
|
{"syntax", p_get_syntax},
|
||||||
{"markup", p_get_markup},
|
{"markup", p_get_markup},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user