Am Sonntag, dem 24.09.2023 um 22:24 +0200 schrieb Dan:
> Hello,
> 
> PROBLEM
> ========
> There is a frame whose outline is not visible in dark mode because it
> is black (Insert > Frame > Simple Frame).
> The box inset name is "Boxed"
> (https://www.lyx.org/trac/browser/lyxgit/lib/layouts/stdinsets.inc#L5
> 04).
> 
> See the attached image for a showcase of all the frames showing the
> problem.
> 
> EXPECTED BEHAVIOUR
> ===================
> Simple Frame Box should have the same outline colour as the other
> frames.

The attached patch fixes it and also resolves a regression in master
with non-default frame color and default background color.

But it's a file format change, so Riki needs to decide on whether it
qualifies as urgent enough.

> 
> 
> Daniel.
> --
> Enviat amb Tutanota.

-- 
Jürgen
diff --git a/development/FORMAT b/development/FORMAT
index 1711f88c78..29774522a4 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -7,6 +7,10 @@ changes happened in particular if possible. A good example would be
 
 -----------------------
 
+2023-09-29 Jürgen Spitzmüller <sp...@lyx.org> 
+	* Format incremented to 620: InsetBox default framecolor is now "foreground"
+	  rather than "black". This aligns better with dark mode.
+
 2023-09-06 Richard Kimberly Heck <rikih...@lyx.org>
 	* Format incremented to 619: New document header \use_formatted_ref
 	  for workarea display purposes only.
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index 4cc5fe5bdf..cc350e1463 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -5554,6 +5554,21 @@ def revert_formatted_refs(document):
         del document.header[i]
 
 
+def revert_box_fcolor(document):
+    i = 0
+    while True:
+        i = find_token(document.body, '\\begin_inset Box Boxed', i+1)
+        if i == -1:
+            break
+        j = find_end_of_inset(document.body, i)
+        if j == -1:
+            document.warning("Malformed LyX document: Can't find end of framed box inset at line %d" % i)
+            continue
+        k = find_token(document.body, 'framecolor "foreground"', i, j)
+        if k != -1:
+            document.body[k] = 'framecolor "black"'
+
+
 ##
 # Conversion hub
 #
@@ -5634,11 +5649,13 @@ convert = [
            [616, [convert_empty_macro]],
            [617, [convert_cov_options]],
            [618, []],
-           [619, []]
+           [619, []],
+           [620, []]
           ]
 
 
-revert =  [[618, [revert_formatted_refs]],
+revert =  [[619, [revert_box_fcolor]],
+           [618, [revert_formatted_refs]],
            [617, [revert_hequotes]],
            [616, [revert_expreambles,revert_exarg2,revert_linggloss2,revert_cov_options]],
            [615, [revert_empty_macro]],
diff --git a/src/frontends/qt/GuiBox.cpp b/src/frontends/qt/GuiBox.cpp
index bda71a68ef..8cd634d27f 100644
--- a/src/frontends/qt/GuiBox.cpp
+++ b/src/frontends/qt/GuiBox.cpp
@@ -133,6 +133,8 @@ GuiBox::GuiBox(QWidget * parent) : InsetParamsWidget(parent)
 	connect(shadowsizeED, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));
 	connect(shadowsizeUnitsLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
 		this, SIGNAL(changed()));
+	connect(frameColorCO, SIGNAL(currentIndexChanged(int)),
+		this, SIGNAL(changed()));
 	connect(backgroundColorCO, SIGNAL(currentIndexChanged(int)),
 		this, SIGNAL(changed()));
 
@@ -159,15 +161,18 @@ GuiBox::GuiBox(QWidget * parent) : InsetParamsWidget(parent)
 }
 
 
-void GuiBox::fillComboColor(QComboBox * combo, bool const is_none)
+void GuiBox::fillComboColor(QComboBox * combo, bool const is_background)
 {
 	combo->clear();
 	QPixmap coloritem(32, 32);
 	QColor color;
-	// frameColorCO cannot be uncolored
-	if (is_none)
+	// condition on the two possible types
+	if (is_background)
 		combo->addItem(toqstr(translateIfPossible(lcolor.getGUIName(Color_none))),
 			       toqstr(lcolor.getLaTeXName(Color_none)));
+	else
+		combo->addItem(toqstr(translateIfPossible(lcolor.getGUIName(Color_foreground))),
+			       toqstr(lcolor.getLaTeXName(Color_foreground)));
 	QList<ColorCode>::const_iterator cit = color_codes_.begin();
 	for (; cit != color_codes_.end(); ++cit) {
 		QString const latexname = toqstr(lcolor.getLaTeXName(*cit));
@@ -215,32 +220,6 @@ void GuiBox::on_typeCO_activated(int index)
 			widthCB->setChecked(itype != "none");
 		pagebreakCB->setChecked(false);
 	}
-	// assure that the frame color is black for frameless boxes to
-	// provide the color "none"
-	int const b = frameColorCO->findData("black");
-	if (frameless && frameColorCO->currentIndex() != b)
-		frameColorCO->setCurrentIndex(b);
-	changed();
-}
-
-
-void GuiBox::on_frameColorCO_currentIndexChanged(int index)
-{
-	// if there is a non-black frame color the background cannot be uncolored
-	// therefore remove the entry "none" in this case
-	int const n = backgroundColorCO->findData("none");
-	if (index != frameColorCO->findData("black")) {
-		if (n != -1) {
-			if (backgroundColorCO->currentIndex() == n)
-				backgroundColorCO->setCurrentIndex(
-					    backgroundColorCO->findData("white"));
-			backgroundColorCO->removeItem(n);
-		}
-	} else {
-		if (n == -1)
-			backgroundColorCO->insertItem(0, toqstr(translateIfPossible((lcolor.getGUIName(Color_none)))),
-						      toqstr(lcolor.getLaTeXName(Color_none)));
-	}
 	changed();
 }
 
@@ -486,7 +465,7 @@ docstring GuiBox::dialogToParams() const
 		params.framecolor =
 			fromqstr(frameColorCO->itemData(frameColorCO->currentIndex()).toString());
 	else
-		params.framecolor = "black";
+		params.framecolor = "foreground";
 	if (backgroundColorCO->isEnabled())
 		params.backgroundcolor =
 			fromqstr(backgroundColorCO->itemData(backgroundColorCO->currentIndex()).toString());
diff --git a/src/frontends/qt/GuiBox.h b/src/frontends/qt/GuiBox.h
index 86bfe05c87..79a9b91e3b 100644
--- a/src/frontends/qt/GuiBox.h
+++ b/src/frontends/qt/GuiBox.h
@@ -30,7 +30,6 @@ public:
 private Q_SLOTS:
 	void on_innerBoxCO_activated(int);
 	void on_typeCO_activated(int);
-	void on_frameColorCO_currentIndexChanged(int);
 	void initDialog();
 	void on_widthCB_stateChanged(int state);
 	void on_heightCB_stateChanged(int state);
@@ -48,7 +47,7 @@ private:
 	//@}
 
 	/// Fill the color combos
-	void fillComboColor(QComboBox * combo, bool const is_none);
+	void fillComboColor(QComboBox * combo, bool const is_background);
 	/// add and remove special lengths
 	void setSpecial(bool ibox);
 	/// only show valid inner box items
diff --git a/src/insets/InsetBox.cpp b/src/insets/InsetBox.cpp
index c04bd1e927..080eed1236 100644
--- a/src/insets/InsetBox.cpp
+++ b/src/insets/InsetBox.cpp
@@ -94,6 +94,7 @@ BoxTranslatorLoc const & boxtranslator_loc()
 	return translator;
 }
 
+
 } // namespace
 
 
@@ -429,8 +430,8 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const
 		if (separation_string != defaultSep && thickness_string == defaultThick)
 			os << "{\\fboxsep " << from_ascii(separation_string);
 		if (!params_.inner_box && !width_string.empty()) {
-			if (params_.framecolor != "black" || params_.backgroundcolor != "none") {
-				os << maybeBeginL << "\\fcolorbox{" << params_.framecolor << "}{" << params_.backgroundcolor << "}{";
+			if (params_.framecolor != "foreground" || params_.backgroundcolor != "none") {
+				os << maybeBeginL << "\\fcolorbox{" << getFrameColor() << "}{" << getBackgroundColor() << "}{";
 				os << "\\makebox";
 				needEndL = !maybeBeginL.empty();
 			} else
@@ -448,8 +449,8 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const
 			if (params_.hor_pos != 'c')
 				os << "[" << params_.hor_pos << "]";
 		} else {
-			if (params_.framecolor != "black" || params_.backgroundcolor != "none") {
-				os << maybeBeginL << "\\fcolorbox{" << params_.framecolor << "}{" << params_.backgroundcolor << "}";
+			if (params_.framecolor != "foreground" || params_.backgroundcolor != "none") {
+				os << maybeBeginL << "\\fcolorbox{" << getFrameColor() << "}{" << getBackgroundColor() << "}";
 				needEndL = !maybeBeginL.empty();
 			} else {
 				if (!cprotect.empty() && contains(runparams.active_chars, '^')) {
@@ -616,7 +617,7 @@ void InsetBox::latex(otexstream & os, OutputParams const & runparams) const
 	case Boxed:
 		os << "}";
 		if (!params_.inner_box && !width_string.empty()
-			&& (params_.framecolor != "black" || params_.backgroundcolor != "none"))
+			&& (params_.framecolor != "foreground" || params_.backgroundcolor != "none"))
 			os << "}";
 		if (separation_string != defaultSep || thickness_string != defaultThick)
 			os << "}";
@@ -809,7 +810,7 @@ void InsetBox::validate(LaTeXFeatures & features) const
 		break;
 	case Boxed:
 		features.require("calc");
-		if (params_.framecolor != "black" || params_.backgroundcolor != "none")
+		if (getFrameColor() != "black" || getBackgroundColor() != "white")
 			features.require("xcolor");
 		break;
 	case ovalbox:
@@ -874,6 +875,22 @@ void InsetBox::string2params(string const & in, InsetBoxParams & params)
 }
 
 
+string const InsetBox::getFrameColor() const
+{
+	if (params_.framecolor == "foreground")
+		return "black";
+	return params_.framecolor;
+}
+
+
+string const InsetBox::getBackgroundColor() const
+{
+	if (params_.backgroundcolor == "none")
+		return "white";
+	return params_.backgroundcolor;
+}
+
+
 /////////////////////////////////////////////////////////////////////////
 //
 // InsetBoxParams
@@ -895,7 +912,7 @@ InsetBoxParams::InsetBoxParams(string const & label)
 	  thickness(Length(defaultThick)),
 	  separation(Length(defaultSep)),
 	  shadowsize(Length(defaultShadow)),
-	  framecolor("black"),
+	  framecolor("foreground"),
 	  backgroundcolor("none")
 {}
 
diff --git a/src/insets/InsetBox.h b/src/insets/InsetBox.h
index f15896cb33..dd74e71870 100644
--- a/src/insets/InsetBox.h
+++ b/src/insets/InsetBox.h
@@ -163,6 +163,10 @@ protected:
 private:
 	/// used by the constructors
 	void init();
+	///
+	std::string const getFrameColor() const;
+	///
+	std::string const getBackgroundColor() const;
 
 	///
 	friend class InsetBoxParams;
diff --git a/src/version.h b/src/version.h
index adbd763893..3c139d546f 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 619 // rikiheck: formatted ref
-#define LYX_FORMAT_TEX2LYX 619
+#define LYX_FORMAT_LYX 620 // spitz: default box frame color
+#define LYX_FORMAT_TEX2LYX 620
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER
-- 
lyx-devel mailing list
lyx-devel@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-devel

Reply via email to