aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-07-06 04:36:22 +0800
committerGitHub <noreply@github.com>2023-07-06 04:36:22 +0800
commita0c9c04f006dbc6cb38d620ec036e32ccb8e76cc (patch)
tree14de663b366f4789041354b3e35a902f8a2a4d6d
parent1de82e16c1216e1dbe22cf7a8ec9ea9e9e69b631 (diff)
downloadrneovim-a0c9c04f006dbc6cb38d620ec036e32ccb8e76cc.tar.gz
rneovim-a0c9c04f006dbc6cb38d620ec036e32ccb8e76cc.tar.bz2
rneovim-a0c9c04f006dbc6cb38d620ec036e32ccb8e76cc.zip
refactor(plines.c): update outdated comments (#24264)
-rw-r--r--src/nvim/plines.c58
-rw-r--r--src/nvim/window.c8
2 files changed, 41 insertions, 25 deletions
diff --git a/src/nvim/plines.c b/src/nvim/plines.c
index 615ce9100b..476e5b2b7d 100644
--- a/src/nvim/plines.c
+++ b/src/nvim/plines.c
@@ -94,8 +94,8 @@ int plines_win_nofill(win_T *wp, linenr_T lnum, bool winheight)
return lines;
}
-/// @Return number of window lines physical line "lnum" will occupy in window
-/// "wp". Does not care about folding, 'wrap' or 'diff'.
+/// Get number of window lines physical line "lnum" will occupy in window "wp".
+/// Does not care about folding, 'wrap' or filler lines.
int plines_win_nofold(win_T *wp, linenr_T lnum)
{
char *s = ml_get_buf(wp->w_buffer, lnum, false);
@@ -179,10 +179,12 @@ int plines_win_col(win_T *wp, linenr_T lnum, long column)
return lines;
}
-/// Get the number of screen lines lnum takes up. This takes care of
-/// both folds and topfill, and limits to the current window height.
+/// Get the number of screen lines buffer line "lnum" will take in window "wp".
+/// This takes care of both folds and topfill.
///
-/// @param[in] wp window line is in
+/// XXX: Because of topfill, this only makes sense when lnum >= wp->w_topline.
+///
+/// @param[in] wp window the line is in
/// @param[in] lnum line number
/// @param[out] nextp if not NULL, the line after a fold
/// @param[out] foldedp if not NULL, whether lnum is on a fold
@@ -201,6 +203,16 @@ int plines_win_full(win_T *wp, linenr_T lnum, linenr_T *const nextp, bool *const
(lnum == wp->w_topline ? wp->w_topfill : win_get_fill(wp, lnum)));
}
+/// Get the number of screen lines a range of buffer lines will take in window "wp".
+/// This takes care of both folds and topfill.
+///
+/// XXX: Because of topfill, this only makes sense when first >= wp->w_topline.
+/// XXX: This limits the size of each line to current window height.
+///
+/// @param first first line number
+/// @param last last line number
+///
+/// @see win_text_height
int plines_m_win(win_T *wp, linenr_T first, linenr_T last)
{
int count = 0;
@@ -282,7 +294,7 @@ unsigned win_linetabsize(win_T *wp, linenr_T lnum, char *line, colnr_T len)
}
/// Return the number of cells line "lnum" of window "wp" will take on the
-/// screen, taking into account the size of a tab and text properties.
+/// screen, taking into account the size of a tab and inline virtual text.
unsigned linetabsize(win_T *wp, linenr_T lnum)
{
return win_linetabsize(wp, lnum, ml_get_buf(wp->w_buffer, lnum, false), (colnr_T)MAXCOL);
@@ -294,7 +306,7 @@ void win_linetabsize_cts(chartabsize_T *cts, colnr_T len)
MB_PTR_ADV(cts->cts_ptr)) {
cts->cts_vcol += win_lbr_chartabsize(cts, NULL);
}
- // check for a virtual text after the end of the line
+ // check for inline virtual text after the end of the line
if (len == MAXCOL && cts->cts_has_virt_text && *cts->cts_ptr == NUL) {
(void)win_lbr_chartabsize(cts, NULL);
cts->cts_vcol += cts->cts_cur_text_width_left + cts->cts_cur_text_width_right;
@@ -333,9 +345,7 @@ void clear_chartabsize_arg(chartabsize_T *cts)
/// like win_chartabsize(), but also check for line breaks on the screen
///
-/// @param line
-/// @param s
-/// @param col
+/// @param cts
///
/// @return The number of characters taken up on the screen.
int lbr_chartabsize(chartabsize_T *cts)
@@ -352,9 +362,7 @@ int lbr_chartabsize(chartabsize_T *cts)
/// Call lbr_chartabsize() and advance the pointer.
///
-/// @param line
-/// @param s
-/// @param col
+/// @param cts
///
/// @return The number of characters take up on the screen.
int lbr_chartabsize_adv(chartabsize_T *cts)
@@ -399,7 +407,7 @@ int win_lbr_chartabsize(chartabsize_T *cts, int *headp)
return win_chartabsize(wp, s, vcol);
}
- // First get normal size, without 'linebreak' or virtual text
+ // First get normal size, without 'linebreak' or inline virtual text
int size = win_chartabsize(wp, s, vcol);
if (cts->cts_has_virt_text) {
@@ -561,9 +569,7 @@ int win_lbr_chartabsize(chartabsize_T *cts, int *headp)
/// 'wrap' is on. This means we need to check for a double-byte character that
/// doesn't fit at the end of the screen line.
///
-/// @param wp
-/// @param s
-/// @param col
+/// @param cts
/// @param headp
///
/// @return The number of characters take up on the screen.
@@ -592,8 +598,18 @@ static int win_nolbr_chartabsize(chartabsize_T *cts, int *headp)
return n;
}
-int64_t win_get_text_height(win_T *const wp, const linenr_T first, const linenr_T last,
- const int64_t start_vcol, const int64_t end_vcol)
+/// Get the number of screen lines a range of text will take in window "wp".
+///
+/// @param start_lnum first line number
+/// @param start_vcol >= 0: virtual column on "start_lnum" where counting starts,
+/// rounded down to full screen lines
+/// < 0: count a full "start_lnum", including filler lines above
+/// @param end_lnum last line number
+/// @param end_vcol >= 0: virtual column on "end_lnum" where counting ends,
+/// rounded up to full screen lines
+/// < 0: count a full "end_lnum", not including fillers lines below
+int64_t win_text_height(win_T *const wp, const linenr_T start_lnum, const int64_t start_vcol,
+ const linenr_T end_lnum, const int64_t end_vcol)
{
int width1 = 0;
int width2 = 0;
@@ -606,7 +622,7 @@ int64_t win_get_text_height(win_T *const wp, const linenr_T first, const linenr_
int64_t size = 0;
int64_t height_nofill = 0;
- linenr_T lnum = first;
+ linenr_T lnum = start_lnum;
if (start_vcol >= 0) {
linenr_T lnum_next = lnum;
@@ -620,7 +636,7 @@ int64_t win_get_text_height(win_T *const wp, const linenr_T first, const linenr_
lnum = lnum_next + 1;
}
- while (lnum <= last) {
+ while (lnum <= end_lnum) {
linenr_T lnum_next = lnum;
const bool folded = hasFoldingWin(wp, lnum, &lnum, &lnum_next, true, NULL);
height_nofill = folded ? 1 : plines_win_nofill(wp, lnum, false);
diff --git a/src/nvim/window.c b/src/nvim/window.c
index 7ac6652cc2..1a78918b09 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -1052,19 +1052,19 @@ void ui_ext_win_viewport(win_T *wp)
|| (cur_topline == last_topline && wp->w_skipcol < last_skipcol)) {
if (last_topline > 0 && cur_botline < last_topline) {
// Scrolling too many lines: only give an approximate "scroll_delta".
- delta -= win_get_text_height(wp, cur_topline, cur_botline, wp->w_skipcol, 0);
+ delta -= win_text_height(wp, cur_topline, wp->w_skipcol, cur_botline, 0);
delta -= last_topline - cur_botline;
} else {
- delta -= win_get_text_height(wp, cur_topline, last_topline, wp->w_skipcol, last_skipcol);
+ delta -= win_text_height(wp, cur_topline, wp->w_skipcol, last_topline, last_skipcol);
}
} else if (cur_topline > last_topline
|| (cur_topline == last_topline && wp->w_skipcol > last_skipcol)) {
if (last_botline > 0 && cur_topline > last_botline) {
// Scrolling too many lines: only give an approximate "scroll_delta".
- delta += win_get_text_height(wp, last_topline, last_botline, last_skipcol, 0);
+ delta += win_text_height(wp, last_topline, last_skipcol, last_botline, 0);
delta += cur_topline - last_botline;
} else {
- delta += win_get_text_height(wp, last_topline, cur_topline, last_skipcol, wp->w_skipcol);
+ delta += win_text_height(wp, last_topline, last_skipcol, cur_topline, wp->w_skipcol);
}
}
delta += last_topfill;