]> git.lyx.org Git - lyx.git/commitdiff
Introduce default box frame color (#12921)
authorJuergen Spitzmueller <spitz@lyx.org>
Sat, 30 Sep 2023 07:56:27 +0000 (09:56 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Sat, 30 Sep 2023 07:56:27 +0000 (09:56 +0200)
This better aligns with dark mode

development/FORMAT
lib/lyx2lyx/lyx_2_4.py
src/frontends/qt/GuiBox.cpp
src/frontends/qt/GuiBox.h
src/insets/InsetBox.cpp
src/insets/InsetBox.h
src/version.h

index 1711f88c78f179097bee25f34105fe77dac8dc2b..2834dd5d751339b366a868ad483ac33eda0d1c0c 100644 (file)
@@ -7,6 +7,10 @@ changes happened in particular if possible. A good example would be
 
 -----------------------
 
+2023-09-29 Jürgen Spitzmüller <spitz@lyx.org> 
+       * 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 <rikiheck@lyx.org>
        * Format incremented to 619: New document header \use_formatted_ref
          for workarea display purposes only.
index 4cc5fe5bdf5eb11da088ac66d83e75f036a3e386..ca81759d5d75c9bfd00aca53250f5a49ca790bee 100644 (file)
@@ -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]],
index bda71a68ef6716519c0bdb4174728f6a38d4cd80..c7c8dc9027304d62e6143421f0d0a018fb38af55 100644 (file)
@@ -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<ColorCode>::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());
index 86bfe05c875812000091015995c317b76ce8032b..79a9b91e3baf6b154f6521da7db9c502cf03b7af 100644 (file)
@@ -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
index c04bd1e927e6bf9721ba0b13b6793766bb854699..9ff8cea24dc08c310158927a63250eba7cdb3791 100644 (file)
@@ -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")
 {}
 
index f15896cb33779f8ccca941e4562d15f3469da057..97c2a27750d6ab90a391595e57e354b22bbb9525 100644 (file)
@@ -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;
index adbd76389364e39e42b5000f319af08cfe773f93..3c139d546fefa32302fabf64adec2c26be0e4f76 100644 (file)
@@ -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