colors: move custom colors to CustomColors.cxx
authorMax Kellermann <max@musicpd.org>
Wed, 12 Sep 2018 12:33:22 +0000 (14:33 +0200)
committerMax Kellermann <max@musicpd.org>
Wed, 12 Sep 2018 12:49:50 +0000 (14:49 +0200)
meson.build
src/CustomColors.cxx [new file with mode: 0644]
src/CustomColors.hxx [new file with mode: 0644]
src/colors.cxx
src/colors.hxx
src/conf.cxx

index 562a26b..032ade9 100644 (file)
@@ -357,6 +357,7 @@ ncmpc = executable('ncmpc',
   'src/save_playlist.cxx',
   'src/song_paint.cxx',
   'src/BasicColors.cxx',
+  'src/CustomColors.cxx',
   'src/colors.cxx',
   'src/charset.cxx',
   'src/wreadln.cxx',
diff --git a/src/CustomColors.cxx b/src/CustomColors.cxx
new file mode 100644 (file)
index 0000000..5bfde65
--- /dev/null
@@ -0,0 +1,63 @@
+/* ncmpc (Ncurses MPD Client)
+ * (c) 2004-2018 The Music Player Daemon Project
+ * Project homepage: http://musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "CustomColors.hxx"
+#include "config.h"
+#include "ncmpc_curses.h"
+#include "i18n.h"
+
+#include <list>
+
+#include <stdio.h>
+
+struct CustomColor {
+       short color;
+       short r,g,b;
+
+       constexpr CustomColor(short _color, short _r, short _g, short _b)
+               :color(_color), r(_r), g(_g), b(_b) {}
+};
+
+static std::list<CustomColor> custom_colors;
+
+/* This function is called from conf.c before curses have been started,
+ * it adds the definition to the color_definition_list and init_color() is
+ * done in colors_start() */
+void
+colors_define(short color, short r, short g, short b)
+{
+       custom_colors.emplace_back(color, r, g, b);
+}
+
+void
+ApplyCustomColors()
+{
+       if (custom_colors.empty())
+               return;
+
+       if (!can_change_color()) {
+               fprintf(stderr, "%s\n",
+                       _("Terminal lacks support for changing colors"));
+               return;
+       }
+
+       for (const auto &i : custom_colors)
+               if (i.color <= COLORS)
+                       init_color(i.color, i.r, i.g, i.b);
+}
diff --git a/src/CustomColors.hxx b/src/CustomColors.hxx
new file mode 100644 (file)
index 0000000..fecd2b3
--- /dev/null
@@ -0,0 +1,29 @@
+/* ncmpc (Ncurses MPD Client)
+ * (c) 2004-2018 The Music Player Daemon Project
+ * Project homepage: http://musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef CUSTOM_COLORS_HXX
+#define CUSTOM_COLORS_HXX
+
+void
+colors_define(short color, short r, short g, short b);
+
+void
+ApplyCustomColors();
+
+#endif
index 4166218..283f76d 100644 (file)
 
 #include "colors.hxx"
 #include "BasicColors.hxx"
+#include "CustomColors.hxx"
 #include "i18n.h"
 
 #ifdef ENABLE_COLORS
 #include "options.hxx"
 #endif
 
-#include <list>
-
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #define COLOR_NONE  G_MININT /* left most bit only */
 #define COLOR_ERROR -2
 
-#ifdef ENABLE_COLORS
-struct CustomColor {
-       short color;
-       short r,g,b;
-
-       constexpr CustomColor(short _color, short _r, short _g, short _b)
-               :color(_color), r(_r), g(_g), b(_b) {}
-};
-#endif
-
 struct NamedColor {
        const char *name;
 #ifdef ENABLE_COLORS
@@ -82,8 +71,6 @@ static NamedColor colors[COLOR_END] = {
 
 #ifdef ENABLE_COLORS
 
-static std::list<CustomColor> custom_colors;
-
 static NamedColor *
 colors_lookup_by_name(const char *name)
 {
@@ -166,15 +153,6 @@ colors_str2color(const char *str)
        return color;
 }
 
-/* This function is called from conf.c before curses have been started,
- * it adds the definition to the color_definition_list and init_color() is
- * done in colors_start() */
-void
-colors_define(short color, short r, short g, short b)
-{
-       custom_colors.emplace_back(color, r, g, b);
-}
-
 bool
 colors_assign(const char *name, const char *value)
 {
@@ -202,13 +180,7 @@ colors_start()
                start_color();
                use_default_colors();
                /* define any custom colors defined in the configuration file */
-               if (!custom_colors.empty() && can_change_color()) {
-                       for (const auto &i : custom_colors)
-                               if (i.color <= COLORS)
-                                       init_color(i.color, i.r, i.g, i.b);
-               } else if (!custom_colors.empty() && !can_change_color())
-                       fprintf(stderr, "%s\n",
-                               _("Terminal lacks support for changing colors"));
+               ApplyCustomColors();
 
                if (options.enable_colors) {
                        for (unsigned i = 1; i < COLOR_END; ++i)
@@ -220,9 +192,6 @@ colors_start()
                        _("Terminal lacks color capabilities"));
                options.enable_colors = false;
        }
-
-       /* free the color_definition_list */
-       custom_colors.clear();
 }
 #endif
 
index 8c6f238..06616ef 100644 (file)
@@ -53,9 +53,6 @@ bool
 colors_assign(const char *name, const char *value);
 
 void
-colors_define(short color, short r, short g, short b);
-
-void
 colors_start();
 #endif
 
index 376a15e..eeccd0b 100644 (file)
@@ -26,6 +26,7 @@
 #include "Command.hxx"
 #include "colors.hxx"
 #include "BasicColors.hxx"
+#include "CustomColors.hxx"
 #include "screen_list.hxx"
 #include "options.hxx"
 #include "io/Path.hxx"