[LyX/master] Move function
Juergen Spitzmueller
spitz at lyx.org
Sun May 10 08:16:18 UTC 2026
commit c316f29b42d48ae85d14bcd5ddcfa79cc96b7798
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Sun May 10 10:16:00 2026 +0200
Move function
---
src/RowPainter.cpp | 34 +---------------------------------
src/frontends/Application.h | 6 ++++++
src/frontends/qt/ColorCache.cpp | 27 +++++++++++++++++++++++++++
src/frontends/qt/ColorCache.h | 7 +++++++
src/frontends/qt/GuiApplication.cpp | 6 ++++++
src/frontends/qt/GuiApplication.h | 1 +
6 files changed, 48 insertions(+), 33 deletions(-)
diff --git a/src/RowPainter.cpp b/src/RowPainter.cpp
index cced976d6f..fd45245ea7 100644
--- a/src/RowPainter.cpp
+++ b/src/RowPainter.cpp
@@ -41,7 +41,6 @@
#include "support/lassert.h"
#include <algorithm>
-#include <cmath>
using namespace std;
@@ -248,37 +247,6 @@ void RowPainter::paintMisspelledMark(Row::Element const & e) const
}
-namespace {
-
-// check whether a color is relatively light (i.e., needs
-// a dark one as contrast) depending on relative luminance
-// (cf. https://www.w3.org/TR/WCAG20/#relativeluminancedef)
-bool isLightColor(RGBColor const & rgb)
-{
- // RGB to sRGB
- double r = rgb.r / 255.0;
- if (r <= 0.04045)
- r = r / 12.92;
- else
- r = pow((r + 0.055) / 1.055, 2.4);
- double g = rgb.g / 255.0;
- if (g <= 0.04045)
- g = g / 12.92;
- else
- g = pow((g + 0.055) / 1.055, 2.4);
- double b = rgb.b / 255.0;
- if (b <= 0.04045)
- b = b / 12.92;
- else
- b = pow((b + 0.055) / 1.055, 2.4);
- // Calculate luminance
- double L = 0.2126 * r + 0.7152 * g + 0.0722 * b;
-
- return (L + 0.05) / (0.0 + 0.05) > (1.0 + 0.05) / (L + 0.05);
-}
-} // namespace anon
-
-
void RowPainter::paintStringAndSel(Row::Element const & e) const
{
// at least part of text selected?
@@ -290,7 +258,7 @@ void RowPainter::paintStringAndSel(Row::Element const & e) const
bool invert = false;
if (theApp() && theApp()->isInDarkMode()
- && isLightColor(rgbFromHexName(lcolor.getX11HexName(pi_.background_color, true))))
+ && theApp()->isLightColor(rgbFromHexName(lcolor.getX11HexName(pi_.background_color, true))))
invert = true;
if (e.type == Row::PREEDIT) {
diff --git a/src/frontends/Application.h b/src/frontends/Application.h
index f52b124e2c..615cca5150 100644
--- a/src/frontends/Application.h
+++ b/src/frontends/Application.h
@@ -214,6 +214,12 @@ public:
*/
virtual bool isInDarkMode() = 0;
+ /**
+ * @return true this is a relatively light color
+ * depending on relative luminance
+ */
+ virtual bool isLightColor(RGBColor const & rgb) = 0;
+
/** Eg, passing Color_black returns "000000",
* passing Color_white returns "ffffff".
*/
diff --git a/src/frontends/qt/ColorCache.cpp b/src/frontends/qt/ColorCache.cpp
index bdf4ab1d8b..dbc9a72040 100644
--- a/src/frontends/qt/ColorCache.cpp
+++ b/src/frontends/qt/ColorCache.cpp
@@ -17,6 +17,8 @@
#include "Color.h"
+#include <cmath>
+
namespace lyx {
namespace{
@@ -155,6 +157,31 @@ bool ColorCache::isDarkMode() const
}
+bool ColorCache::isLightColor(RGBColor const & rgb)
+{
+ // RGB to sRGB
+ double r = rgb.r / 255.0;
+ if (r <= 0.04045)
+ r = r / 12.92;
+ else
+ r = pow((r + 0.055) / 1.055, 2.4);
+ double g = rgb.g / 255.0;
+ if (g <= 0.04045)
+ g = g / 12.92;
+ else
+ g = pow((g + 0.055) / 1.055, 2.4);
+ double b = rgb.b / 255.0;
+ if (b <= 0.04045)
+ b = b / 12.92;
+ else
+ b = pow((b + 0.055) / 1.055, 2.4);
+ // Calculate luminance
+ double L = 0.2126 * r + 0.7152 * g + 0.0722 * b;
+
+ return (L + 0.05) / (0.0 + 0.05) > (1.0 + 0.05) / (L + 0.05);
+}
+
+
QColor const rgb2qcolor(RGBColor const & rgb)
{
return QColor(rgb.r, rgb.g, rgb.b);
diff --git a/src/frontends/qt/ColorCache.h b/src/frontends/qt/ColorCache.h
index 105a97df87..ced8177b87 100644
--- a/src/frontends/qt/ColorCache.h
+++ b/src/frontends/qt/ColorCache.h
@@ -47,6 +47,13 @@ public:
/// guess whether we are in dark mode
bool isDarkMode() const;
+ /**
+ * check whether a color is relatively light (i.e., needs
+ * a dark one as contrast) depending on relative luminance
+ * (cf. https://www.w3.org/TR/WCAG20/#relativeluminancedef)
+ */
+ bool isLightColor(RGBColor const & rgb);
+
/// change the undelying palette
void setPalette(QPalette const pal) { pal_ = pal; clear(); }
diff --git a/src/frontends/qt/GuiApplication.cpp b/src/frontends/qt/GuiApplication.cpp
index e786fea150..f3070c525d 100644
--- a/src/frontends/qt/GuiApplication.cpp
+++ b/src/frontends/qt/GuiApplication.cpp
@@ -3091,6 +3091,12 @@ bool GuiApplication::isInDarkMode()
}
+bool GuiApplication::isLightColor(RGBColor const & rgb)
+{
+ return colorCache().isLightColor(rgb);
+}
+
+
bool GuiApplication::getRgbColor(ColorCode col, RGBColor & rgbcol)
{
QColor const & qcol = d->color_cache_.get(col);
diff --git a/src/frontends/qt/GuiApplication.h b/src/frontends/qt/GuiApplication.h
index 2b8040eff9..db84925ca9 100644
--- a/src/frontends/qt/GuiApplication.h
+++ b/src/frontends/qt/GuiApplication.h
@@ -75,6 +75,7 @@ public:
bool event(QEvent * e) override;
bool getRgbColor(ColorCode col, RGBColor & rgbcol) override;
bool isInDarkMode() override;
+ bool isLightColor(RGBColor const & rgb) override;
std::string const hexName(ColorCode col) override;
void registerSocketCallback(int fd, SocketCallback func) override;
void unregisterSocketCallback(int fd) override;
More information about the lyx-cvs
mailing list