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