[LyX/master] Fix the way the top and bottom selection are drawn

Jean-Marc Lasgouttes lasgouttes at lyx.org
Tue Dec 7 16:50:09 UTC 2021


commit 2fd8b6fc2a402c00e78f71d7d6ad986270283a3e
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Tue Dec 7 18:15:01 2021 +0100

    Fix the way the top and bottom selection are drawn
    
    When a selection extends on more than a row, the space between the two
    rows should always be painted in full. Otherwise, with layouts like
    Chapter, the "Chapter" label may seem selected in part.
---
 src/RowPainter.cpp |   20 +++++++++++++++-----
 1 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/RowPainter.cpp b/src/RowPainter.cpp
index 400b7b6..b7b479b 100644
--- a/src/RowPainter.cpp
+++ b/src/RowPainter.cpp
@@ -585,12 +585,16 @@ void RowPainter::paintSelection() const
 	if (!row_.selection())
 		return;
 
-	int const y1 = yo_ - (row_.begin_margin_sel ? row_.ascent()
-	                                            : row_.contents_dim().asc);
-	int const y2 = yo_ + (row_.end_margin_sel ? row_.descent()
-	                                          : row_.contents_dim().des);
+	int const y1 = yo_ - row_.contents_dim().asc;
+	int const y2 = yo_ + row_.contents_dim().des;
 
-	// draw the margins
+	// The top selection
+	if (row_.begin_margin_sel)
+		pi_.pain.fillRectangle(int(xo_), yo_ - row_.ascent(),
+		                       tm_.width(), row_.ascent() - row_.contents_dim().asc,
+		                       Color_selection);
+
+	// The left margin selection
 	if (row_.isRTL() ? row_.end_margin_sel : row_.begin_margin_sel)
 		pi_.pain.fillRectangle(int(xo_), y1, row_.left_margin, y2 - y1,
 		                       Color_selection);
@@ -629,10 +633,16 @@ void RowPainter::paintSelection() const
 		x += e.full_width();
 	}
 
+	// the right margin selection
 	if (row_.isRTL() ? row_.begin_margin_sel : row_.end_margin_sel)
 		pi_.pain.fillRectangle(int(x), y1,
 		                       int(xo_ + tm_.width()) - int(x), y2 - y1,
 		                       Color_selection);
+	// The bottom selection
+	if (row_.end_margin_sel)
+		pi_.pain.fillRectangle(int(xo_), yo_ + row_.contents_dim().des,
+		                       tm_.width(), row_.descent() - row_.contents_dim().des,
+		                       Color_selection);
 }
 
 


More information about the lyx-cvs mailing list