[LyX/master] Move color swatch functions to ColorCache class
Koji Yokota
yokota at lyx.org
Fri Jun 5 16:29:46 UTC 2026
commit 8a25395fef3e5d1b5e562490c90dc4ff6a3b56ad
Author: Koji Yokota <yokota at lyx.org>
Date: Fri Jun 5 20:24:48 2026 +0900
Move color swatch functions to ColorCache class
---
src/frontends/qt/ColorCache.cpp | 31 +++++++++++++++++++++++++++++++
src/frontends/qt/ColorCache.h | 3 +++
src/frontends/qt/GuiPrefs.cpp | 33 +++------------------------------
src/frontends/qt/GuiPrefs.h | 4 +---
4 files changed, 38 insertions(+), 33 deletions(-)
diff --git a/src/frontends/qt/ColorCache.cpp b/src/frontends/qt/ColorCache.cpp
index 210f5c68c4..4955aaf3ce 100644
--- a/src/frontends/qt/ColorCache.cpp
+++ b/src/frontends/qt/ColorCache.cpp
@@ -18,6 +18,7 @@
#include "Color.h"
#include <cmath>
+#include <QPainter>
namespace lyx {
@@ -180,6 +181,36 @@ bool ColorCache::isLightColor(RGBColor const & rgb)
return (L + 0.05) / (0.0 + 0.05) > (1.0 + 0.05) / (L + 0.05);
}
+QPixmap ColorCache::setSwatchBackground(int width, int height)
+{
+ QPixmap background(width, height);
+ background.fill(Qt::white);
+
+ // paint a triangle
+ QPainter painter(&background);
+ painter.setRenderHint(QPainter::Antialiasing);
+ QPolygon polygon;
+ polygon << QPoint(width, 0)
+ << QPoint(0, height)
+ << QPoint(0, 0);
+ painter.setPen(QColor(Qt::black));
+ painter.setBrush(QColor(Qt::black));
+ painter.drawPolygon(polygon);
+ painter.end();
+
+ return background;
+}
+
+QPixmap ColorCache::mergePixmaps(QPixmap const *fg, QPixmap const *bg)
+{
+ // make a copy to leave bg untouched
+ QPixmap merged(*bg);
+ QPainter painter(&merged);
+ painter.drawPixmap(0, 0, *bg);
+ painter.drawPixmap(0, 0, *fg);
+ return merged;
+}
+
QColor const rgb2qcolor(RGBColor const & rgb)
{
diff --git a/src/frontends/qt/ColorCache.h b/src/frontends/qt/ColorCache.h
index ced8177b87..17e70a737d 100644
--- a/src/frontends/qt/ColorCache.h
+++ b/src/frontends/qt/ColorCache.h
@@ -60,6 +60,9 @@ public:
/// clear all colors
void clear() { initialized_ = false; }
+ static QPixmap setSwatchBackground(int width, int height);
+ static QPixmap mergePixmaps(QPixmap const *fg, QPixmap const *bg);
+
private:
///
void init();
diff --git a/src/frontends/qt/GuiPrefs.cpp b/src/frontends/qt/GuiPrefs.cpp
index 29aa070489..f1357e42ce 100644
--- a/src/frontends/qt/GuiPrefs.cpp
+++ b/src/frontends/qt/GuiPrefs.cpp
@@ -4721,25 +4721,8 @@ ColorSwatchDelegate::ColorSwatchDelegate(QObject *parent)
{
pane_ = static_cast<PrefColors*>(parent);
- // construct the background image of swatches
- bg_pixmap_ = new QPixmap(pane_->swatch_width_, pane_->swatch_height_);
- bg_pixmap_->fill(Qt::white);
- QPainter painter(bg_pixmap_);
- painter.setRenderHint(QPainter::Antialiasing);
- QPolygon polygon;
- polygon << QPoint(pane_->swatch_width_, 0)
- << QPoint(0, pane_->swatch_height_)
- << QPoint(0, 0);
- painter.setPen(QColor(Qt::black));
- painter.setBrush(QColor(Qt::black));
- painter.drawPolygon(polygon);
- painter.end();
-}
-
-
-ColorSwatchDelegate::~ColorSwatchDelegate()
-{
- delete bg_pixmap_;
+ bg_pixmap_ = ColorCache::setSwatchBackground(pane_->swatch_width_,
+ pane_->swatch_height_);
}
@@ -4765,7 +4748,7 @@ void ColorSwatchDelegate::paint(QPainter *painter,
value<QColor>();
if (index.flags().testFlag(Qt::ItemIsEnabled)) {
pixmap.fill(color);
- pixmap = mergePixmaps(&pixmap, bg_pixmap_);
+ pixmap = ColorCache::mergePixmaps(&pixmap, &bg_pixmap_);
} else
pixmap.fill(Qt::transparent);
style->drawItemPixmap(painter, opt.rect, Qt::AlignCenter, pixmap);
@@ -4776,16 +4759,6 @@ void ColorSwatchDelegate::paint(QPainter *painter,
}
-QPixmap ColorSwatchDelegate::mergePixmaps(QPixmap const *fg, QPixmap const *bg) const
-{
- // make a copy to leave bg untouched
- QPixmap merged(*bg);
- QPainter painter(&merged);
- painter.drawPixmap(0, 0, *bg);
- painter.drawPixmap(0, 0, *fg);
- return merged;
-}
-
} // namespace frontend
} // namespace lyx
diff --git a/src/frontends/qt/GuiPrefs.h b/src/frontends/qt/GuiPrefs.h
index 441adc81c3..cae84feae4 100644
--- a/src/frontends/qt/GuiPrefs.h
+++ b/src/frontends/qt/GuiPrefs.h
@@ -735,15 +735,13 @@ class ColorSwatchDelegate : public QStyledItemDelegate
public:
ColorSwatchDelegate(QObject *parent = nullptr);
- ~ColorSwatchDelegate();
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
private:
- QPixmap mergePixmaps(QPixmap const * fg, QPixmap const * bg) const;
PrefColors* pane_;
- QPixmap* bg_pixmap_;
+ QPixmap bg_pixmap_;
QFont font_;
// To give impression that a button is pressed, flip the direction of
More information about the lyx-cvs
mailing list