aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/mouse.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-01-22 10:00:11 +0800
committerGitHub <noreply@github.com>2024-01-22 10:00:11 +0800
commit8c6de9147cabbf99d18afbdbed2f11f30c1d0dfc (patch)
treeb05e873236f53b2b9dc244c00f538eb47f45ab2f /src/nvim/mouse.c
parenta25aeee856e2fb02f93ffa5c2e5d43fd75ead2cf (diff)
parentfd08de4b85ae42fe3ad5b480b58df9f7fff76269 (diff)
downloadrneovim-8c6de9147cabbf99d18afbdbed2f11f30c1d0dfc.tar.gz
rneovim-8c6de9147cabbf99d18afbdbed2f11f30c1d0dfc.tar.bz2
rneovim-8c6de9147cabbf99d18afbdbed2f11f30c1d0dfc.zip
Merge pull request #26813 from VanaIgr/screen-pos-speedup
perf: make screen size and position calculations more efficient N/A patches for version.c: vim-patch:9.1.0037: Calling get_breakindent_win() repeatedly when computing virtcol vim-patch:9.1.0038: Unnecessary loop in getvcol()
Diffstat (limited to 'src/nvim/mouse.c')
-rw-r--r--src/nvim/mouse.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c
index a6da7dd3c7..86de182aee 100644
--- a/src/nvim/mouse.c
+++ b/src/nvim/mouse.c
@@ -1755,22 +1755,23 @@ colnr_T vcol2col(win_T *wp, linenr_T lnum, colnr_T vcol, colnr_T *coladdp)
{
// try to advance to the specified column
char *line = ml_get_buf(wp->w_buffer, lnum);
- chartabsize_T cts;
- init_chartabsize_arg(&cts, wp, lnum, 0, line, line);
- while (cts.cts_vcol < vcol && *cts.cts_ptr != NUL) {
- int size = win_lbr_chartabsize(&cts, NULL);
- if (cts.cts_vcol + size > vcol) {
+ CharsizeArg arg;
+ CSType cstype = init_charsize_arg(&arg, wp, lnum, line);
+ StrCharInfo ci = utf_ptr2StrCharInfo(line);
+ int cur_vcol = 0;
+ while (cur_vcol < vcol && *ci.ptr != NUL) {
+ int next_vcol = cur_vcol + win_charsize(cstype, cur_vcol, ci.ptr, ci.chr.value, &arg).width;
+ if (next_vcol > vcol) {
break;
}
- cts.cts_vcol += size;
- MB_PTR_ADV(cts.cts_ptr);
+ cur_vcol = next_vcol;
+ ci = utfc_next(ci);
}
- clear_chartabsize_arg(&cts);
if (coladdp != NULL) {
- *coladdp = vcol - cts.cts_vcol;
+ *coladdp = vcol - cur_vcol;
}
- return (colnr_T)(cts.cts_ptr - line);
+ return (colnr_T)(ci.ptr - line);
}
/// Set UI mouse depending on current mode and 'mouse'.