Mercurial > vim
view src/proto/move.pro @ 32876:522f16e3e058 v9.0.1747
patch 9.0.1747: screenpos() may cause unnecessary redraw
Commit: https://github.com/vim/vim/commit/6235a109c48ff2559eca3b16578c429ffb61eadc
Author: zeertzjq <zeertzjq@outlook.com>
Date: Sat Aug 19 14:12:42 2023 +0200
patch 9.0.1747: screenpos() may cause unnecessary redraw
Problem: screenpos() may cause unnecessary redraw.
Solution: Don't unnecessarily reset VALID_WROW flag.
VALID_WROW flag is only used by two functions: validate_cursor() and
cursor_valid(), and cursor_valid() is only used once in ex_sleep().
When adjust_plines_for_skipcol() was first added in patch 9.0.0640, it
was called in two functions: comp_botline() and curs_rows().
- comp_botline() is called in two places:
- onepage(), which resets VALID_WROW flag immediately afterwards.
- validate_botline_win(), where resetting a VALID_ flag is strange.
- curs_rows() is called in two places:
- curs_columns(), which sets VALID_WROW flag afterwards.
- validate_cline_row(), which is only used by GUI mouse focus.
Therefore resetting VALID_WROW there doesn't seem to do anything useful.
Also, a w_skipcol check (which resets VALID_WROW flag) was added to
check_cursor_moved() in patch 9.0.0734, which seems to make more sense
than resetting that flag in the middle of a computation.
While at it make adjust_plines_for_skipcol() and textpos2screenpos() a
bit less confusing:
- Make adjust_plines_for_skipcol() return "off" instead of "n - off".
- Use 0-based "row" in textpos2screenpos() until W_WINROW is added.
closes: #12832
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 19 Aug 2023 14:30:02 +0200 |
parents | 695b50472e85 |
children | 7f84a834055a |
line wrap: on
line source
/* move.c */ int adjust_plines_for_skipcol(win_T *wp); void redraw_for_cursorline(win_T *wp); int sms_marker_overlap(win_T *wp, int extra2); void update_topline_redraw(void); void update_topline(void); void update_curswant_force(void); void update_curswant(void); void check_cursor_moved(win_T *wp); void changed_window_setting(void); void changed_window_setting_win(win_T *wp); void changed_window_setting_buf(buf_T *buf); void set_topline(win_T *wp, linenr_T lnum); void changed_cline_bef_curs(void); void changed_cline_bef_curs_win(win_T *wp); void changed_line_abv_curs(void); void changed_line_abv_curs_win(win_T *wp); void changed_line_display_buf(buf_T *buf); void validate_botline(void); void validate_botline_win(win_T *wp); void invalidate_botline(void); void invalidate_botline_win(win_T *wp); void approximate_botline_win(win_T *wp); int cursor_valid(void); void validate_cursor(void); void validate_cline_row(void); void validate_virtcol(void); void validate_virtcol_win(win_T *wp); void validate_cheight(void); void validate_cursor_col(void); int win_col_off(win_T *wp); int curwin_col_off(void); int win_col_off2(win_T *wp); int curwin_col_off2(void); void curs_columns(int may_scroll); void textpos2screenpos(win_T *wp, pos_T *pos, int *rowp, int *scolp, int *ccolp, int *ecolp); void f_screenpos(typval_T *argvars, typval_T *rettv); void f_virtcol2col(typval_T *argvars, typval_T *rettv); void scrolldown(long line_count, int byfold); void scrollup(long line_count, int byfold); void adjust_skipcol(void); void check_topfill(win_T *wp, int down); void scrolldown_clamp(void); void scrollup_clamp(void); void scroll_cursor_top(int min_scroll, int always); void set_empty_rows(win_T *wp, int used); void scroll_cursor_bot(int min_scroll, int set_topbot); void scroll_cursor_halfway(int atend, int prefer_above); void cursor_correct(void); int onepage(int dir, long count); void halfpage(int flag, linenr_T Prenum); void do_check_cursorbind(void); /* vim: set ft=c : */