From 22c6fe8e0c806ea675b8fa4d4c04d5c262b4abd7 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Sun, 13 Nov 2022 22:47:39 +0100 Subject: [PATCH] Remove boolean arguments of scrollToCursor wih an enum This makes the function inent more obvious. No change intended. Related to bug #12491. --- src/BufferView.cpp | 34 +++++++++++++++++----------------- src/BufferView.h | 24 +++++++++++++++++------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 8a8ec183b4..fd4ad50c1c 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -186,7 +186,7 @@ bool gotoInset(BufferView * bv, vector const & codes, tmpcur.clearSelection(); bv->setCursor(tmpcur); - return bv->scrollToCursor(bv->cursor(), false, true); + return bv->scrollToCursor(bv->cursor(), SCROLL_TOP); } @@ -550,13 +550,13 @@ void BufferView::processUpdateFlags(Update::flags flags) if (needsFitCursor()) { // First try to make the selection start visible // (which is just the cursor when there is no selection) - scrollToCursor(d->cursor_.selectionBegin(), false, false); + scrollToCursor(d->cursor_.selectionBegin(), SCROLL_VISIBLE); // Metrics have to be recomputed (maybe again) updateMetrics(); // Is the cursor visible? (only useful if cursor is at end of selection) if (needsFitCursor()) { // then try to make cursor visible instead - scrollToCursor(d->cursor_, false, false); + scrollToCursor(d->cursor_, SCROLL_VISIBLE); // Metrics have to be recomputed (maybe again) updateMetrics(flags); } @@ -750,7 +750,7 @@ void BufferView::scrollDocView(int const pixels, bool update) // cut off at the top if (pixels <= d->scrollbarParameters_.min) { DocIterator dit = doc_iterator_begin(&buffer_); - showCursor(dit, false, false, update); + showCursor(dit, SCROLL_VISIBLE, update); LYXERR(Debug::SCROLLING, "scroll to top"); return; } @@ -759,7 +759,7 @@ void BufferView::scrollDocView(int const pixels, bool update) if (pixels >= d->scrollbarParameters_.max) { DocIterator dit = doc_iterator_end(&buffer_); dit.backwardPos(); - showCursor(dit, false, false, update); + showCursor(dit, SCROLL_VISIBLE, update); LYXERR(Debug::SCROLLING, "scroll to bottom"); return; } @@ -784,7 +784,7 @@ void BufferView::scrollDocView(int const pixels, bool update) DocIterator dit = doc_iterator_begin(&buffer_); dit.pit() = i; LYXERR(Debug::SCROLLING, "pixels = " << pixels << " -> scroll to pit " << i); - showCursor(dit, false, false, update); + showCursor(dit, SCROLL_VISIBLE, update); } @@ -970,33 +970,33 @@ int BufferView::workWidth() const void BufferView::recenter() { - showCursor(d->cursor_, true, false, true); + showCursor(d->cursor_, SCROLL_CENTER, true); } void BufferView::showCursor() { - showCursor(d->cursor_, false, false, true); + showCursor(d->cursor_, SCROLL_VISIBLE, true); } -void BufferView::showCursor(DocIterator const & dit, - bool recenter, bool force, bool update) +void BufferView::showCursor(DocIterator const & dit, ScrollType how, + bool update) { - if (scrollToCursor(dit, recenter, force) && update) + if (scrollToCursor(dit, how) && update) processUpdateFlags(Update::Force); } -bool BufferView::scrollToCursor(DocIterator const & dit, bool const recenter, bool force) +bool BufferView::scrollToCursor(DocIterator const & dit, ScrollType how) { // We are not properly started yet, delay until resizing is done. if (height_ == 0) return false; - if (recenter) + if (how == SCROLL_CENTER) LYXERR(Debug::SCROLLING, "Centering cursor in workarea"); - else if (force) + else if (how == SCROLL_TOP) LYXERR(Debug::SCROLLING, "Setting cursor to top of workarea"); else LYXERR(Debug::SCROLLING, "Making sure cursor is visible in workarea"); @@ -1018,7 +1018,7 @@ bool BufferView::scrollToCursor(DocIterator const & dit, bool const recenter, bo else if (bot_pit == tm.last().first + 1) tm.newParMetricsDown(); - if (tm.contains(bot_pit) && !force && !recenter) { + if (tm.contains(bot_pit) && how == SCROLL_VISIBLE) { ParagraphMetrics const & pm = tm.parMetrics(bot_pit); LBUFERR(!pm.rows().empty()); // FIXME: smooth scrolling doesn't work in mathed. @@ -1074,7 +1074,7 @@ bool BufferView::scrollToCursor(DocIterator const & dit, bool const recenter, bo int const old_ypos = d->anchor_ypos_; d->anchor_ypos_ = - offset + row_dim.ascent(); - if (recenter) + if (how == SCROLL_CENTER) d->anchor_ypos_ += height_/2 - row_dim.height() / 2; return d->anchor_ypos_ != old_ypos; } @@ -1581,7 +1581,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr) success = setCursorFromEntries({id, pos}, {id_end, pos_end}); } - if (success && scrollToCursor(d->cursor_, false, true)) + if (success && scrollToCursor(d->cursor_, SCROLL_TOP)) dr.screenUpdate(Update::Force); } else { // Switch to other buffer view and resend cmd diff --git a/src/BufferView.h b/src/BufferView.h index ad725f2121..6cdc68534b 100644 --- a/src/BufferView.h +++ b/src/BufferView.h @@ -57,6 +57,16 @@ enum CursorStatus { CUR_BELOW }; +/// How to show cursor +enum ScrollType { + // Make sure row if visible (do nothing if it is visible already) + SCROLL_VISIBLE, + // Force cursor to be on top of screen + SCROLL_TOP, + // Force cursor to be at center of screen + SCROLL_CENTER +}; + /// Scrollbar Parameters. struct ScrollbarParameters { @@ -201,17 +211,17 @@ public: /// This method will automatically scroll and update the BufferView /// (metrics+drawing) if needed. void showCursor(); + /// Ensure the passed cursor \p dit is visible. /// This method will automatically scroll and update the BufferView /// (metrics+drawing) if needed. - /// \param recenter Whether the cursor should be centered on screen - /// \param force If true, disregard current position - void showCursor(DocIterator const & dit, bool recenter, bool force, - bool update); + /// \param how Use this scroll strategy + /// \param force If true, update screen after scrolling + void showCursor(DocIterator const & dit, ScrollType how, bool update); /// Scroll to the cursor. - /// \param recenter Whether the cursor should be centered on screen - /// \param force If true, disregard current position - bool scrollToCursor(DocIterator const & dit, bool recenter, bool force); + /// \param how Use this scroll strategy + /// \return true if screen was scrolled + bool scrollToCursor(DocIterator const & dit, ScrollType how); /// scroll down document by the given number of pixels. int scrollDown(int pixels); /// scroll up document by the given number of pixels. -- 2.39.5