[LyX/master] Let index colors accept alpha values

Koji Yokota <[email protected]> Sun, 07 Jun 2026 02:24:21 +0000
Newsgroups gmane.editors.lyx.cvs
Message-ID <[email protected]>
commit d5093f3354592c53c1d51256e9fafe4e9d1642f6
Author: Koji Yokota <[email protected]>
Date:   Sun Jun 7 11:24:02 2026 +0900

    Let index colors accept alpha values
---
 src/IndicesList.cpp                 | 16 ++++++++--------
 src/IndicesList.h                   |  8 ++++----
 src/frontends/Application.h         |  2 ++
 src/frontends/qt/GuiApplication.cpp | 19 +++++++++++++++++++
 src/frontends/qt/GuiBranches.cpp    |  4 ++--
 src/frontends/qt/GuiBranches.h      |  2 +-
 src/frontends/qt/GuiDocument.cpp    |  3 ++-
 src/frontends/qt/GuiIndices.cpp     | 12 ++++++++----
 src/frontends/qt/GuiIndices.h       |  2 ++
 9 files changed, 48 insertions(+), 20 deletions(-)

diff --git a/src/IndicesList.cpp b/src/IndicesList.cpp
index 66aa06bfc0..27a9c84ea5 100644
--- a/src/IndicesList.cpp
+++ b/src/IndicesList.cpp
@@ -36,9 +36,9 @@ Index::Index()
 {
 	// no theApp() with command line export
 	if (theApp())
-		theApp()->getRgbColor(Color_indexlabel, color_);
+		theApp()->getArgbColor(Color_indexlabel, color_);
 	else
-		frontend::Application::getRgbColorUncached(Color_indexlabel, color_);
+		frontend::Application::getArgbColorUncached(Color_indexlabel, color_);
 }
 
 
@@ -66,13 +66,13 @@ void Index::setShortcut(docstring const & s)
 }
 
 
-RGBColor const & Index::color() const
+const ARGBColor &Index::color() const
 {
 	return color_;
 }
 
 
-void Index::setColor(RGBColor const & c)
+void Index::setColor(ARGBColor const & c)
 {
 	color_ = c;
 }
@@ -80,15 +80,15 @@ void Index::setColor(RGBColor const & c)
 
 void Index::setColor(string const & str)
 {
-	if (str.size() == 7 && str[0] == '#')
-		color_ = rgbFromHexName(str);
+	if ((str.size() == 9 || str.size() == 7) && str[0] == '#')
+		color_ = argbFromHexName(str);
 	else {
 		// no color set or invalid color -- use predefined color
 		// no theApp() with command line export
 		if (theApp())
-			theApp()->getRgbColor(Color_indexlabel, color_);
+			theApp()->getArgbColor(Color_indexlabel, color_);
 		else
-			frontend::Application::getRgbColorUncached(Color_indexlabel, color_);
+			frontend::Application::getArgbColorUncached(Color_indexlabel, color_);
 	}
 }
 
diff --git a/src/IndicesList.h b/src/IndicesList.h
index 7fab436d6b..57e94f6c51 100644
--- a/src/IndicesList.h
+++ b/src/IndicesList.h
@@ -51,11 +51,11 @@ public:
 	///
 	void setShortcut(docstring const &);
 	///
-	RGBColor const & color() const;
+	ARGBColor const & color() const;
 	///
-	void setColor(RGBColor const &);
+	void setColor(ARGBColor const &);
 	/**
-	 * Set color from a string "#rrggbb".
+	 * Set color from a string "#aarrggbb".
 	 * Use Color:background if the string is no valid color.
 	 * This ensures compatibility with LyX 1.4.0 that had the symbolic
 	 * color "none" that was displayed as Color:background.
@@ -68,7 +68,7 @@ private:
 	///
 	docstring shortcut_;
 	///
-	RGBColor color_;
+	ARGBColor color_;
 };
 
 
diff --git a/src/frontends/Application.h b/src/frontends/Application.h
index 58daba8c81..3fa4fa4482 100644
--- a/src/frontends/Application.h
+++ b/src/frontends/Application.h
@@ -205,6 +205,8 @@ public:
 	virtual bool getArgbColor(ColorCode col, ARGBColor & argbcol) = 0;
 	/// Like getRgbColor(), but static and slower
 	static bool getRgbColorUncached(ColorCode col, RGBColor & rgbcol);
+	/// Like getArgbColor(), but static and slower
+	static bool getArgbColorUncached(ColorCode col, ARGBColor & argbcol);
 
 	/// \returns the draw strategy used by the application
 	virtual DrawStrategy drawStrategy() const = 0;
diff --git a/src/frontends/qt/GuiApplication.cpp b/src/frontends/qt/GuiApplication.cpp
index 535404ccc0..cb68a0ba6d 100644
--- a/src/frontends/qt/GuiApplication.cpp
+++ b/src/frontends/qt/GuiApplication.cpp
@@ -3112,6 +3112,7 @@ bool GuiApplication::getRgbColor(ColorCode col, RGBColor & rgbcol)
 	return true;
 }
 
+
 bool GuiApplication::getArgbColor(ColorCode col, ARGBColor &argbcol)
 {
 	QColor const & qcol = d->color_cache_.get(col);
@@ -3146,6 +3147,24 @@ bool Application::getRgbColorUncached(ColorCode col, RGBColor & rgbcol)
 }
 
 
+bool Application::getArgbColorUncached(ColorCode col, ARGBColor & argbcol)
+{
+	QColor const qcol(lcolor.get32bitHexName(col).c_str());
+	if (!qcol.isValid()) {
+		argbcol.a = 0;
+		argbcol.r = 0;
+		argbcol.g = 0;
+		argbcol.b = 0;
+		return false;
+	}
+	argbcol.a = qcol.alpha();
+	argbcol.r = qcol.red();
+	argbcol.g = qcol.green();
+	argbcol.b = qcol.blue();
+	return true;
+}
+
+
 string const GuiApplication::hexName(ColorCode col)
 {
 	return ltrim(fromqstr(d->color_cache_.get(col).name()), "#");
diff --git a/src/frontends/qt/GuiBranches.cpp b/src/frontends/qt/GuiBranches.cpp
index 5d6d88a687..e3ce31d9cd 100644
--- a/src/frontends/qt/GuiBranches.cpp
+++ b/src/frontends/qt/GuiBranches.cpp
@@ -77,7 +77,7 @@ GuiBranches::GuiBranches(QWidget * parent)
 	newBranchLE->installEventFilter(this);
 	newBranchLE->setValidator(new NoNewLineValidator(newBranchLE));
 
-	colorbg_ = ColorCache::setSwatchBackground(30, 10);
+	swatchbg_ = ColorCache::setSwatchBackground(30, 10);
 }
 
 
@@ -145,7 +145,7 @@ void GuiBranches::updateView()
 		if (itemcolor.isValid()) {
 			QPixmap coloritem(30, 10);
 			coloritem.fill(itemcolor);
-			coloritem = ColorCache::mergePixmaps(&coloritem, &colorbg_);
+			coloritem = ColorCache::mergePixmaps(&coloritem, &swatchbg_);
 			newItem->setIcon(2, QIcon(coloritem));
 		}
 		newItem->setText(3, it->hasFileNameSuffix() ? qt_("Yes") : qt_("No"));
diff --git a/src/frontends/qt/GuiBranches.h b/src/frontends/qt/GuiBranches.h
index 684161d3b1..addc0336af 100644
--- a/src/frontends/qt/GuiBranches.h
+++ b/src/frontends/qt/GuiBranches.h
@@ -88,7 +88,7 @@ private:
 	///
 	QStringList unknown_branches_;
 	///
-	QPixmap colorbg_;
+	QPixmap swatchbg_;
 };
 
 } // namespace frontend
diff --git a/src/frontends/qt/GuiDocument.cpp b/src/frontends/qt/GuiDocument.cpp
index 65e5239b1f..8ae28b9a19 100644
--- a/src/frontends/qt/GuiDocument.cpp
+++ b/src/frontends/qt/GuiDocument.cpp
@@ -5354,7 +5354,7 @@ void GuiDocument::dispatchParams()
 			Branch const * branch = branchlist.find(current_branch);
 			string const bcolor = branch->color();
 			ARGBColor argbcol;
-			if ((bcolor.size() == 7 || bcolor.size() ==9) && bcolor[0] == '#')
+			if ((bcolor.size() == 9 || bcolor.size() == 7) && bcolor[0] == '#')
 				argbcol = lyx::argbFromHexName(bcolor);
 			else
 				guiApp->getArgbColor(lcolor.getFromLyXName(bcolor), argbcol);
@@ -5378,6 +5378,7 @@ void GuiDocument::dispatchParams()
 			docstring const & current_index = it->shortcut();
 			Index const * index = indiceslist.findShortcut(current_index);
 			string const x11hexname = X11hexname(index->color());
+			LYXERR0("param x11hexname = " << x11hexname);
 			// display the new color
 			docstring const str = current_index + ' ' + from_ascii(x11hexname);
 			dispatch(FuncRequest(LFUN_SET_COLOR, str));
diff --git a/src/frontends/qt/GuiIndices.cpp b/src/frontends/qt/GuiIndices.cpp
index bb4cd40721..c4650391bf 100644
--- a/src/frontends/qt/GuiIndices.cpp
+++ b/src/frontends/qt/GuiIndices.cpp
@@ -63,6 +63,8 @@ GuiIndices::GuiIndices(QWidget * parent)
 
 	indexOptionsLE->setValidator(new NoNewLineValidator(indexOptionsLE));
 	newIndexLE->setValidator(new NoNewLineValidator(newIndexLE));
+
+	swatchbg_ = ColorCache::setSwatchBackground(30, 10);
 }
 
 
@@ -136,10 +138,11 @@ void GuiIndices::updateView()
 		QString const iname = toqstr(it->index());
 		newItem->setText(0, iname);
 
-		QColor const itemcolor = rgb2qcolor(it->color());
+		QColor const itemcolor = argb2qcolor(it->color());
 		if (itemcolor.isValid()) {
 			QPixmap coloritem(30, 10);
 			coloritem.fill(itemcolor);
+			coloritem = ColorCache::mergePixmaps(&coloritem, &swatchbg_);
 			newItem->setIcon(1, QIcon(coloritem));
 		}
 		// restore selected index
@@ -288,13 +291,14 @@ void GuiIndices::toggleColor(QTreeWidgetItem * item)
 	if (!index)
 		return;
 
-	QColor const initial = rgb2qcolor(index->color());
-	QColor ncol = GuiDialog::getColor(initial, this);
+	QColor const initial = argb2qcolor(index->color());
+	QColor ncol = GuiDialog::getColor(initial, this, QString(),
+	                                  QColorDialog::ShowAlphaChannel);
 	if (!ncol.isValid())
 		return;
 
 	// add the color to the indiceslist
-	index->setColor(fromqstr(ncol.name()));
+	index->setColor(fromqstr(ncol.name(QColor::HexArgb)));
 	newIndexLE->clear();
 	updateView();
 }
diff --git a/src/frontends/qt/GuiIndices.h b/src/frontends/qt/GuiIndices.h
index efaec8354f..493cbc0f9e 100644
--- a/src/frontends/qt/GuiIndices.h
+++ b/src/frontends/qt/GuiIndices.h
@@ -64,6 +64,8 @@ private:
 	bool readonly_;
 	///
 	bool use_indices_;
+	///
+	QPixmap swatchbg_;
 };
 
 } // namespace frontend
-- 
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs