[LyX/master] Use setCursorFromCoordinates when scrolling

Jean-Marc Lasgouttes lasgouttes at lyx.org
Mon Nov 25 16:00:56 UTC 2024


commit 1dbe589b2731978e01f57720c3c88f0d84750c0d
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Mon Nov 25 16:59:20 2024 +0100

    Use setCursorFromCoordinates when scrolling
    
    This is better that rewriting yet another version of the same code.
---
 src/TextMetrics.cpp              |  2 +-
 src/frontends/qt/GuiWorkArea.cpp | 31 +++----------------------------
 2 files changed, 4 insertions(+), 29 deletions(-)

diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp
index 48215c0216..d14f5808c3 100644
--- a/src/TextMetrics.cpp
+++ b/src/TextMetrics.cpp
@@ -1632,7 +1632,7 @@ void TextMetrics::setCursorFromCoordinates(Cursor & cur, int x, int const y)
 	pit_type const pit = getPitNearY(y);
 	LASSERT(pit != -1, return);
 
-	ParagraphMetrics const & pm = par_metrics_[pit];
+	ParagraphMetrics const & pm = parMetrics(pit);
 
 	int yy = pm.position() - pm.rows().front().ascent();
 	LYXERR(Debug::PAINTING, "x: " << x << " y: " << y <<
diff --git a/src/frontends/qt/GuiWorkArea.cpp b/src/frontends/qt/GuiWorkArea.cpp
index 63eb84168a..47ab40d427 100644
--- a/src/frontends/qt/GuiWorkArea.cpp
+++ b/src/frontends/qt/GuiWorkArea.cpp
@@ -973,7 +973,7 @@ void GuiWorkArea::generateSyntheticMouseEvent()
 	Text * text = cur.text();
 	if (!text)
 		return;
-	TextMetrics const & tm = d->buffer_view_->textMetrics(text);
+	TextMetrics & tm = d->buffer_view_->textMetrics(text);
 
 	// FIXME: use TextMetrics::setCursorFromCoordinates.
 	// Quit gracefully if there are no metrics, since otherwise next
@@ -982,33 +982,8 @@ void GuiWorkArea::generateSyntheticMouseEvent()
 	if (tm.empty())
 		return;
 
-	pair<pit_type, const ParagraphMetrics *> pp = up ? tm.first() : tm.last();
-	ParagraphMetrics const & pm = *pp.second;
-	pit_type const pit = pp.first;
-
-	if (pm.rows().empty())
-		return;
-
-	// Find the row at which we set the cursor.
-	RowList::const_iterator rit = pm.rows().begin();
-	RowList::const_iterator rlast = pm.rows().end();
-	int yy = pm.top();
-	for (--rlast; rit != rlast; ++rit) {
-		int h = rit->height();
-		if ((up && yy + h > 0)
-			  || (!up && yy + h > wh - defaultRowHeight()))
-			break;
-		yy += h;
-	}
-
-	// Find the position of the cursor
-	int x = d->synthetic_mouse_event_.cmd.x();
-	auto [pos, bound] = tm.getPosNearX(*rit, x);
-
-	// Set the cursor
-	cur.pit() = pit;
-	cur.pos() = pos;
-	cur.boundary(bound);
+	const int y = up ? 0 : wh - defaultRowHeight();
+	tm.setCursorFromCoordinates(cur, d->synthetic_mouse_event_.cmd.x(), y);
 
 	d->buffer_view_->buffer().changed(false);
 }


More information about the lyx-cvs mailing list