[LyX/2.5.x] Fix cell background drawing for non-centered aligned cells

Juergen Spitzmueller <[email protected]> Thu, 07 May 2026 15:12:58 +0000
Newsgroups gmane.editors.lyx.cvs
Message-ID <[email protected]>
commit 041194f54df398f9b3fa12c5326e9da7c8ea94a5
Author: Juergen Spitzmueller <[email protected]>
Date:   Thu May 7 13:05:11 2026 +0200

    Fix cell background drawing for non-centered aligned cells
    
    (cherry picked from commit d470d4224baed5ee84b24cbbef4e2fd2d7c4d7aa)
---
 src/insets/InsetTabular.cpp | 27 +++++++++++++++++++++++++--
 src/insets/InsetTabular.h   |  4 ++++
 status.25x                  |  2 ++
 3 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp
index 0560a48815..033e5c6dca 100644
--- a/src/insets/InsetTabular.cpp
+++ b/src/insets/InsetTabular.cpp
@@ -1333,7 +1333,7 @@ int Tabular::cellWidth(idx_type cell) const
 	int w = 0;
 	col_type const span = columnSpan(cell);
 	col_type const col = cellColumn(cell);
-	for(col_type c = col; c < col + span ; ++c)
+	for (col_type c = col; c < col + span ; ++c)
 		w += column_info[c].width;
 	return w;
 }
@@ -4978,7 +4978,29 @@ void InsetTableCell::draw(PainterInfo & pi, int x, int y) const
 	int const w = width;
 	int const h = mr_rows * (tm.height() + 2 * topOffset(pi.base.bv) + bottomOffset(pi.base.bv) + Painter::thin_line);
 	int const yframe = y - mr_rows * (tm.ascent()) - mr_rows * (Painter::thin_line) - topOffset(pi.base.bv);
-	int const xframe = (isVarwidth) ? x : x - (w - tm.width()) / 2 + leftOffset(pi.base.bv);
+	// xframe depends on alignment if not varwidth
+	int xframe = x;
+	switch (contentAlign) {
+	case LYX_ALIGN_CENTER:
+		xframe = (isVarwidth) ? x
+				      : x - text_h_offset;
+		break;
+	case LYX_ALIGN_NONE:
+	case LYX_ALIGN_BLOCK:
+	case LYX_ALIGN_LEFT:
+		xframe = x - leftOffset(pi.base.bv);
+		break;
+	case LYX_ALIGN_RIGHT:
+		xframe = (isVarwidth) ? x + rightOffset(pi.base.bv) + Painter::thin_line
+				      : x - text_h_offset;
+		break;
+	case LYX_ALIGN_DECIMAL:
+		xframe = x - text_h_offset;
+		break;
+	case LYX_ALIGN_LAYOUT:
+	case LYX_ALIGN_SPECIAL:
+		break;
+	}
 
 	if (pi.full_repaint)
 		pi.pain.fillRectangle(xframe, yframe, w, h,
@@ -5340,6 +5362,7 @@ void InsetTabular::draw(PainterInfo & pi, int x, int y) const
 			drawCellLines(pi, nx, yy, r, idx);
 			nx += tabular.cellWidth(idx);
 			pi.selected = original_selection_state;
+			tabular.cell_info[r][c].inset->setTextHOffset(tabular.textHOffset(tabular.cellIndex(r, c)));
 			tabular.cell_info[r][c].inset->setWidth(tabular.cellWidth(tabular.cellIndex(r, c)));
 		}
 
diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h
index b385ba8346..ffb489c1f2 100644
--- a/src/insets/InsetTabular.h
+++ b/src/insets/InsetTabular.h
@@ -84,6 +84,8 @@ public:
 	///
 	void setWidth(int i) { width = i; }
 	///
+	void setTextHOffset(int i) { text_h_offset = i; }
+	///
 	void setContentAlignment(LyXAlignment al) { contentAlign = al; }
 	///
 	void setBackgroundColor(std::string const & col) { background_color = col; }
@@ -151,6 +153,8 @@ private:
 	///
 	int width = 0;
 	///
+	int text_h_offset = 0;
+	///
 	bool isCaptionRow = false;
 	///
 	LyXAlignment contentAlign = LYX_ALIGN_CENTER;
diff --git a/status.25x b/status.25x
index a5fb4c3716..884e4fef2c 100644
--- a/status.25x
+++ b/status.25x
@@ -76,6 +76,8 @@ What's new
 
 - Fix casing of strings in English localization (bug 13304).
 
+- Fix background color drawing for non-center aligned tabular cells.
+
 
 * INTERNALS
 
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs