commit 9a6f7ece97f7bd0c413aa7e40c98cade38734d38
Author: Juergen Spitzmueller <[email protected]>
Date: Mon Jan 18 10:46:16 2021 +0100
Add option to revert graphics colors in dark mode (#12076)
This amends [5d47a7ee57506/lyxgit]
---
development/FORMAT | 4 +
lib/lyx2lyx/lyx_2_4.py | 25 +++++++-
src/frontends/Painter.h | 2 +-
src/frontends/qt/GuiGraphics.cpp | 13 ++---
src/frontends/qt/GuiPainter.cpp | 22 +------
src/frontends/qt/ui/GraphicsUi.ui | 116 +++++++++++++++++++----------------
src/insets/InsetGraphicsParams.cpp | 6 ++-
src/version.h | 4 +-
8 files changed, 105 insertions(+), 87 deletions(-)
diff --git a/development/FORMAT b/development/FORMAT
index 2caa6d8..4e6dcc0 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -7,6 +7,10 @@ changes happened in particular if possible. A good example
would be
-----------------------
+2021-01-18 Jürgen Spitzmüller <[email protected]>
+ * Format incremented to 603: New InsetGraphics param darkModeSensitive
+ This advises LyX to revert colors in dark mode.
+
2021-01-17 Jürgen Spitzmüller <[email protected]>
* Format incremented to 602: Allow semantic branch colors
\color can now also take lyx names besides hexnames.
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index 142a174..0fc850b 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -4067,6 +4067,25 @@ def revert_branch_colors(document):
i += 1
+def revert_darkmode_graphics(document):
+ " Revert darkModeSensitive InsetGraphics param "
+
+ i = 0
+ while (True):
+ i = find_token(document.body, "\\begin_inset Graphics", i)
+ if i == -1:
+ break
+ j = find_end_of_inset(document.body, i)
+ if j == -1:
+ document.warning("Can't find end of graphics inset at line %d!!"
%(i))
+ i += 1
+ continue
+ k = find_token(document.body, "\tdarkModeSensitive", i, j)
+ if k != -1:
+ del document.body[k]
+ i += 1
+
+
##
# Conversion hub
#
@@ -4130,10 +4149,12 @@ convert = [
[599, []],
[600, []],
[601, [convert_math_refs]],
- [602, [convert_branch_colors]]
+ [602, [convert_branch_colors]],
+ [603, []]
]
-revert = [[601, [revert_branch_colors]],
+revert = [[602, [revert_darkmode_graphics]],
+ [601, [revert_branch_colors]],
[600, []],
[599, [revert_math_refs]],
[598, [revert_hrquotes]],
diff --git a/src/frontends/Painter.h b/src/frontends/Painter.h
index 580b72e..51d4b7d 100644
--- a/src/frontends/Painter.h
+++ b/src/frontends/Painter.h
@@ -127,7 +127,7 @@ public:
/// draw an image from the image cache
virtual void image(int x, int y, int w, int h,
- graphics::Image const & image, bool revert_in_darkmode = false)
= 0;
+ graphics::Image const & image, bool const revert_in_darkmode =
false) = 0;
/// draw a string at position x, y (y is the baseline).
virtual void text(int x, int y, docstring const & str, FontInfo const &
f) = 0;
diff --git a/src/frontends/qt/GuiGraphics.cpp b/src/frontends/qt/GuiGraphics.cpp
index 9d04527..bc9d2a6 100644
--- a/src/frontends/qt/GuiGraphics.cpp
+++ b/src/frontends/qt/GuiGraphics.cpp
@@ -194,14 +194,8 @@ GuiGraphics::GuiGraphics(GuiView & lv)
this, SLOT(change_adaptor()));
connect(draftCB, SIGNAL(stateChanged(int)),
this, SLOT(change_adaptor()));
- // FIXME: we should connect to clicked() when we move to Qt 4.2 because
- // the toggled(bool) signal is also triggered when we update the widgets
- // (rgh-4/07) this isn't as much or a problem as it was, because we're
now
- // using blockSignals() to keep from triggering that signal when we call
- // setChecked(). Note, too, that clicked() would get called whenever it
- // is clicked, even right clicked (I think), not just whenever it is
- // toggled.
- connect(displayGB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor()));
+ connect(displayGB, SIGNAL(clicked(bool)), this, SLOT(change_adaptor()));
+ connect(darkModeCB, SIGNAL(clicked(bool)), this,
SLOT(change_adaptor()));
connect(displayscale, SIGNAL(textChanged(const QString &)),
this, SLOT(change_adaptor()));
connect(groupCO, SIGNAL(currentIndexChanged(int)),
@@ -223,6 +217,7 @@ GuiGraphics::GuiGraphics(GuiView & lv)
bc().addReadOnly(draftCB);
bc().addReadOnly(clip);
bc().addReadOnly(displayGB);
+ bc().addReadOnly(darkModeCB);
bc().addReadOnly(sizeGB);
bc().addReadOnly(rotationGB);
bc().addReadOnly(latexoptions);
@@ -555,6 +550,7 @@ void GuiGraphics::paramsToDialog(InsetGraphicsParams const
& params)
// Update the draft and clip mode
draftCB->setChecked(params.draft);
clip->setChecked(params.clip);
+ darkModeCB->setChecked(params.darkModeSensitive);
displayGB->setChecked(params.display);
displayscale->setText(toqstr(convert<string>(params.lyxscale)));
@@ -678,6 +674,7 @@ void GuiGraphics::applyView()
igp.draft = draftCB->isChecked();
igp.clip = clip->isChecked();
igp.display = displayGB->isChecked();
+ igp.darkModeSensitive = darkModeCB->isChecked();
//the graphics section
if (scaleCB->isChecked() && !Scale->text().isEmpty()) {
diff --git a/src/frontends/qt/GuiPainter.cpp b/src/frontends/qt/GuiPainter.cpp
index c3e5b37..4cb4699 100644
--- a/src/frontends/qt/GuiPainter.cpp
+++ b/src/frontends/qt/GuiPainter.cpp
@@ -234,7 +234,7 @@ void GuiPainter::arc(int x, int y, unsigned int w, unsigned
int h,
void GuiPainter::image(int x, int y, int w, int h, graphics::Image const & i,
- bool revert_in_darkmode)
+ bool const revert_in_darkmode)
{
graphics::GuiImage const & qlimage =
static_cast<graphics::GuiImage const &>(i);
@@ -247,25 +247,7 @@ void GuiPainter::image(int x, int y, int w, int h,
graphics::Image const & i,
QColor text_color = palette.color(QPalette::Active,
QPalette::WindowText);
QColor bg_color = palette.color(QPalette::Active, QPalette::Window);
// guess whether we are in dark mode
- bool const in_dark_mode = text_color.black() < bg_color.black();
- // if we are in dark mode, check whether we have transparent pixels
- if (in_dark_mode && !revert_in_darkmode) {
- QImage img = image.convertToFormat(QImage::Format_ARGB32);
- for (int x = 0 ; x < img.width() ; x++) {
- if (revert_in_darkmode)
- break;
- for (int y = 0 ; y < img.height() ; y++) {
- QRgb currentPixel = (img.pixel(x, y));
- if (qAlpha(currentPixel) == 0) {
- // we have transparent pixels, revert
- // this image in dark mode (#12076)
- revert_in_darkmode = true;
- break;
- }
- }
- }
- }
- if (in_dark_mode && revert_in_darkmode)
+ if (revert_in_darkmode && text_color.black() < bg_color.black())
// FIXME this is only a cheap approximation
// Ideally, replace colors as in
GuiApplication::prepareForDarkmode()
image.invertPixels();
diff --git a/src/frontends/qt/ui/GraphicsUi.ui
b/src/frontends/qt/ui/GraphicsUi.ui
index 4525344..bd0f210 100644
--- a/src/frontends/qt/ui/GraphicsUi.ui
+++ b/src/frontends/qt/ui/GraphicsUi.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>654</width>
+ <width>718</width>
<height>512</height>
</rect>
</property>
@@ -508,45 +508,6 @@
<property name="spacing">
<number>6</number>
</property>
- <item row="0" column="1">
- <widget class="QLineEdit" name="latexoptions">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="toolTip">
- <string>Additional LaTeX options</string>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="latexoptionsLA">
- <property name="toolTip">
- <string>Additional LaTeX options</string>
- </property>
- <property name="text">
- <string>LaTeX &options:</string>
- </property>
- <property name="buddy">
- <cstring>latexoptions</cstring>
- </property>
- </widget>
- </item>
- <item row="5" column="0" colspan="3">
- <spacer>
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>354</width>
- <height>81</height>
- </size>
- </property>
- </spacer>
- </item>
<item row="3" column="0" colspan="3">
<widget class="QGroupBox" name="displayGB">
<property name="focusPolicy">
@@ -622,9 +583,58 @@
</property>
</spacer>
</item>
+ <item row="1" column="0">
+ <widget class="QCheckBox" name="darkModeCB">
+ <property name="toolTip">
+ <string>If LyX uses a dark theme, revert the colors of this
graphics in the workarea</string>
+ </property>
+ <property name="text">
+ <string>Re&vert colors in dark mode</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
+ <item row="5" column="0" colspan="3">
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>354</width>
+ <height>81</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="latexoptionsLA">
+ <property name="toolTip">
+ <string>Additional LaTeX options</string>
+ </property>
+ <property name="text">
+ <string>LaTeX &options:</string>
+ </property>
+ <property name="buddy">
+ <cstring>latexoptions</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="latexoptions">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Additional LaTeX options</string>
+ </property>
+ </widget>
+ </item>
<item row="4" column="0" colspan="3">
<widget class="QGroupBox" name="graphicsGroupGB">
<property name="toolTip">
@@ -652,19 +662,6 @@
<property name="spacing">
<number>6</number>
</property>
- <item row="0" column="2" rowspan="2">
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>121</width>
- <height>51</height>
- </size>
- </property>
- </spacer>
- </item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="sizePolicy">
@@ -684,6 +681,19 @@
</property>
</widget>
</item>
+ <item row="0" column="2" rowspan="2">
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>121</width>
+ <height>51</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
<item row="1" column="1">
<widget class="QPushButton" name="newGroupPB">
<property name="toolTip">
diff --git a/src/insets/InsetGraphicsParams.cpp
b/src/insets/InsetGraphicsParams.cpp
index 13b57c0..9f6ffbb 100644
--- a/src/insets/InsetGraphicsParams.cpp
+++ b/src/insets/InsetGraphicsParams.cpp
@@ -74,7 +74,7 @@ void InsetGraphicsParams::init()
bbox = graphics::BoundingBox(); // bounding box
clip = false; // clip image
- darkModeSensitive = false; // dark mode dependency (InsetInfo)
+ darkModeSensitive = false; // dark mode dependency
rotateAngle = "0"; // angle of rotation in degrees
rotateOrigin.erase(); // Origin of rotation
@@ -146,6 +146,8 @@ void InsetGraphicsParams::Write(ostream & os, Buffer const
& buffer) const
os << "\tlyxscale " << lyxscale << '\n';
if (!display)
os << "\tdisplay false\n";
+ if (darkModeSensitive)
+ os << "\tdarkModeSensitive\n";
if (!scale.empty() && !float_equal(convert<double>(scale), 0.0, 0.05)) {
if (!float_equal(convert<double>(scale), 100.0, 0.05))
os << "\tscale " << scale << '\n';
@@ -195,6 +197,8 @@ bool InsetGraphicsParams::Read(Lexer & lex, string const &
token,
} else if (token == "display") {
lex.next();
display = lex.getString() != "false";
+ } else if (token == "darkModeSensitive") {
+ darkModeSensitive = true;
} else if (token == "scale") {
lex.next();
scale = lex.getString();
diff --git a/src/version.h b/src/version.h
index b4a855e..d2ad51d 100644
--- a/src/version.h
+++ b/src/version.h
@@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
// Do not remove the comment below, so we get merge conflict in
// independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 602 // spitz: semantic branch colors
-#define LYX_FORMAT_TEX2LYX 602
+#define LYX_FORMAT_LYX 603 // spitz: InsetGraphicsParam darkModeSensitive
+#define LYX_FORMAT_TEX2LYX 603
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs