From: Juergen Spitzmueller Date: Sat, 30 Sep 2023 07:56:27 +0000 (+0200) Subject: Introduce default box frame color (#12921) X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=087f6bce;p=features.git Introduce default box frame color (#12921) This better aligns with dark mode --- diff --git a/development/FORMAT b/development/FORMAT index 1711f88c78..2834dd5d75 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 + * Format incremented to 620: Add InsetBox "default" framecolor ("foreground" + rather than "black" in GUI). This aligns better with dark mode. + 2023-09-06 Richard Kimberly Heck * 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..ca81759d5d 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 "default"', 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..c7c8dc9027 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,17 @@ 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(qt_("Default"), toqstr("default")); QList::const_iterator cit = color_codes_.begin(); for (; cit != color_codes_.end(); ++cit) { QString const latexname = toqstr(lcolor.getLaTeXName(*cit)); @@ -215,32 +219,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 +464,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..9ff8cea24d 100644 --- a/src/insets/InsetBox.cpp +++ b/src/insets/InsetBox.cpp @@ -165,7 +165,7 @@ void InsetBox::setButtonLabel() // set the frame color for the inset if the type is Boxed if (btype == Boxed) - setFrameColor(lcolor.getFromLaTeXName(params_.framecolor)); + setFrameColor(lcolor.getFromLaTeXName(getFrameColor(true))); else setFrameColor(Color_collapsibleframe); } @@ -429,8 +429,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 != "default" || params_.backgroundcolor != "none") { + os << maybeBeginL << "\\fcolorbox{" << getFrameColor() << "}{" << getBackgroundColor() << "}{"; os << "\\makebox"; needEndL = !maybeBeginL.empty(); } else @@ -448,8 +448,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 != "default" || params_.backgroundcolor != "none") { + os << maybeBeginL << "\\fcolorbox{" << getFrameColor() << "}{" << getBackgroundColor() << "}"; needEndL = !maybeBeginL.empty(); } else { if (!cprotect.empty() && contains(runparams.active_chars, '^')) { @@ -616,7 +616,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 != "default" || params_.backgroundcolor != "none")) os << "}"; if (separation_string != defaultSep || thickness_string != defaultThick) os << "}"; @@ -809,7 +809,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 +874,22 @@ void InsetBox::string2params(string const & in, InsetBoxParams & params) } +string const InsetBox::getFrameColor(bool const gui) const +{ + if (params_.framecolor == "default") + return gui ? "foreground" : "black"; + return params_.framecolor; +} + + +string const InsetBox::getBackgroundColor() const +{ + if (params_.backgroundcolor == "none") + return "white"; + return params_.backgroundcolor; +} + + ///////////////////////////////////////////////////////////////////////// // // InsetBoxParams @@ -895,7 +911,7 @@ InsetBoxParams::InsetBoxParams(string const & label) thickness(Length(defaultThick)), separation(Length(defaultSep)), shadowsize(Length(defaultShadow)), - framecolor("black"), + framecolor("default"), backgroundcolor("none") {} diff --git a/src/insets/InsetBox.h b/src/insets/InsetBox.h index f15896cb33..97c2a27750 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(bool const gui = false) 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