Commit 3583a8f5 authored by twanvl's avatar twanvl

correct selection drawing, fixed cursor position around <line>

parent cfd59072
...@@ -509,7 +509,7 @@ void TextValueEditor::moveSelection(IndexType t, size_t new_end, bool also_move_ ...@@ -509,7 +509,7 @@ void TextValueEditor::moveSelection(IndexType t, size_t new_end, bool also_move_
// editor.refreshEditor(); // editor.refreshEditor();
// } else { // } else {
// draw new selection // draw new selection
v.drawSelection(rdc, style(), selection_start, selection_end); v.drawSelection(rdc, style(), selection_start_i, selection_end_i);
// } // }
showCaret(); showCaret();
// TODO; DEBUG!! // TODO; DEBUG!!
......
...@@ -169,22 +169,29 @@ size_t index_to_cursor(const String& str, size_t index, Movement dir) { ...@@ -169,22 +169,29 @@ size_t index_to_cursor(const String& str, size_t index, Movement dir) {
// after the loop, cursor corresponds to index end // after the loop, cursor corresponds to index end
for (size_t i = 0 ; i < str.size() ; ) { for (size_t i = 0 ; i < str.size() ; ) {
Char c = str.GetChar(i); Char c = str.GetChar(i);
bool has_width = true;
if (c == _('<')) { if (c == _('<')) {
// a tag // a tag
if (is_substr(str, i, _("<atom")) || is_substr(str, i, _("<sep"))) { if (is_substr(str, i, _("<atom")) || is_substr(str, i, _("<sep"))) {
// skip tag contents, tag counts as a single 'character' // skip tag contents, tag counts as a single 'character'
i = skip_tag(str, match_close_tag(str, i)); i = skip_tag(str, match_close_tag(str, i));
cursor++; } else if (is_substr(str, i, _("<line"))) {
start = end; // no contents, but has width
end = i; i = skip_tag(str, i);
if (end > index) break; if (i > index) {
// HACK: Don't walk past <line>
dir = dir == MOVE_RIGHT ? MOVE_LEFT : MOVE_RIGHT;
}
} else { } else {
i = skip_tag(str, i); i = skip_tag(str, i);
end = i; end = i;
has_width = false;
} }
} else { } else {
cursor++;
i++; i++;
}
if (has_width) {
cursor++;
start = end; start = end;
end = i; end = i;
if (end > index) break; if (end > index) break;
...@@ -204,19 +211,24 @@ void cursor_to_index_range(const String& str, size_t cursor, size_t& start, size ...@@ -204,19 +211,24 @@ void cursor_to_index_range(const String& str, size_t cursor, size_t& start, size
size_t i = 0; size_t i = 0;
while (cur <= cursor && i < str.size()) { while (cur <= cursor && i < str.size()) {
Char c = str.GetChar(i); Char c = str.GetChar(i);
bool has_width = true;
if (c == _('<')) { if (c == _('<')) {
// a tag // a tag
if (is_substr(str, i, _("<atom")) || is_substr(str, i, _("<sep"))) { if (is_substr(str, i, _("<atom")) || is_substr(str, i, _("<sep"))) {
// skip tag contents, tag counts as a single 'character' // skip tag contents, tag counts as a single 'character'
i = skip_tag(str, match_close_tag(str, i)); i = skip_tag(str, match_close_tag(str, i));
cur++; } else if (is_substr(str, i, _("<line"))) {
if (cur == cursor) start = i; // no contents, but has width
i = skip_tag(str, i);
} else { } else {
i = skip_tag(str, i); i = skip_tag(str, i);
has_width = false;
} }
} else { } else {
cur++;
i++; i++;
}
if (has_width) {
cur++;
if (cur == cursor) start = i; if (cur == cursor) start = i;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment