summaryrefslogtreecommitdiff
path: root/mate-volume-control/src/mvc-helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'mate-volume-control/src/mvc-helpers.c')
-rw-r--r--mate-volume-control/src/mvc-helpers.c335
1 files changed, 0 insertions, 335 deletions
diff --git a/mate-volume-control/src/mvc-helpers.c b/mate-volume-control/src/mvc-helpers.c
deleted file mode 100644
index 4f572fc..0000000
--- a/mate-volume-control/src/mvc-helpers.c
+++ /dev/null
@@ -1,335 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2014 Michal Ratajsky <[email protected]>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include <libmatemixer/matemixer.h>
-
-#include "mvc-helpers.h"
-
-/* libcanberra requires a PulseAudio channel name to be given to its
- * CA_PROP_CANBERRA_FORCE_CHANNEL property.
- *
- * The strings here are copied from PulseAudio source code to avoid depending
- * on libpulse. */
-static const gchar *pulse_position[MATE_MIXER_CHANNEL_MAX] = {
- [MATE_MIXER_CHANNEL_MONO] = "mono",
- [MATE_MIXER_CHANNEL_FRONT_LEFT] = "front-left",
- [MATE_MIXER_CHANNEL_FRONT_RIGHT] = "front-right",
- [MATE_MIXER_CHANNEL_FRONT_CENTER] = "front-center",
- [MATE_MIXER_CHANNEL_LFE] = "lfe",
- [MATE_MIXER_CHANNEL_BACK_LEFT] = "rear-left",
- [MATE_MIXER_CHANNEL_BACK_RIGHT] = "rear-right",
- [MATE_MIXER_CHANNEL_BACK_CENTER] = "rear-center",
- [MATE_MIXER_CHANNEL_FRONT_LEFT_CENTER] = "front-left-of-center",
- [MATE_MIXER_CHANNEL_FRONT_RIGHT_CENTER] = "front-right-of-center",
- [MATE_MIXER_CHANNEL_SIDE_LEFT] = "side-left",
- [MATE_MIXER_CHANNEL_SIDE_RIGHT] = "side-right",
- [MATE_MIXER_CHANNEL_TOP_FRONT_LEFT] = "top-front-left",
- [MATE_MIXER_CHANNEL_TOP_FRONT_RIGHT] = "top-front-right",
- [MATE_MIXER_CHANNEL_TOP_FRONT_CENTER] = "top-front-center",
- [MATE_MIXER_CHANNEL_TOP_CENTER] = "top-center",
- [MATE_MIXER_CHANNEL_TOP_BACK_LEFT] = "top-rear-left",
- [MATE_MIXER_CHANNEL_TOP_BACK_RIGHT] = "top-rear-right",
- [MATE_MIXER_CHANNEL_TOP_BACK_CENTER] = "top-rear-center"
-};
-
-static const gchar *pretty_position[MATE_MIXER_CHANNEL_MAX] = {
- [MATE_MIXER_CHANNEL_UNKNOWN] = N_("Unknown"),
- /* Speaker channel names */
- [MATE_MIXER_CHANNEL_MONO] = N_("Mono"),
- [MATE_MIXER_CHANNEL_FRONT_LEFT] = N_("Front Left"),
- [MATE_MIXER_CHANNEL_FRONT_RIGHT] = N_("Front Right"),
- [MATE_MIXER_CHANNEL_FRONT_CENTER] = N_("Front Center"),
- [MATE_MIXER_CHANNEL_LFE] = N_("LFE"),
- [MATE_MIXER_CHANNEL_BACK_LEFT] = N_("Rear Left"),
- [MATE_MIXER_CHANNEL_BACK_RIGHT] = N_("Rear Right"),
- [MATE_MIXER_CHANNEL_BACK_CENTER] = N_("Rear Center"),
- [MATE_MIXER_CHANNEL_FRONT_LEFT_CENTER] = N_("Front Left of Center"),
- [MATE_MIXER_CHANNEL_FRONT_RIGHT_CENTER] = N_("Front Right of Center"),
- [MATE_MIXER_CHANNEL_SIDE_LEFT] = N_("Side Left"),
- [MATE_MIXER_CHANNEL_SIDE_RIGHT] = N_("Side Right"),
- [MATE_MIXER_CHANNEL_TOP_FRONT_LEFT] = N_("Top Front Left"),
- [MATE_MIXER_CHANNEL_TOP_FRONT_RIGHT] = N_("Top Front Right"),
- [MATE_MIXER_CHANNEL_TOP_FRONT_CENTER] = N_("Top Front Center"),
- [MATE_MIXER_CHANNEL_TOP_CENTER] = N_("Top Center"),
- [MATE_MIXER_CHANNEL_TOP_BACK_LEFT] = N_("Top Rear Left"),
- [MATE_MIXER_CHANNEL_TOP_BACK_RIGHT] = N_("Top Rear Right"),
- [MATE_MIXER_CHANNEL_TOP_BACK_CENTER] = N_("Top Rear Center")
-};
-
-const gchar *
-mvc_channel_position_to_pulse_string (MateMixerChannelPosition position)
-{
- g_return_val_if_fail (position >= 0 && position < MATE_MIXER_CHANNEL_MAX, NULL);
-
- return pulse_position[position];
-}
-
-const gchar *
-mvc_channel_position_to_pretty_string (MateMixerChannelPosition position)
-{
- g_return_val_if_fail (position >= 0 && position < MATE_MIXER_CHANNEL_MAX, NULL);
-
- return pretty_position[position];
-}
-
-const gchar *
-mvc_channel_map_to_pretty_string (MateMixerStreamControl *control)
-{
- g_return_val_if_fail (MATE_MIXER_IS_STREAM_CONTROL (control), NULL);
-
-#define HAS_POSITION(p) (mate_mixer_stream_control_has_channel_position (control, (p)))
-
- /* Modeled after PulseAudio 5.0, probably could be extended with other combinations */
- switch (mate_mixer_stream_control_get_num_channels (control)) {
- case 1:
- if (HAS_POSITION (MATE_MIXER_CHANNEL_MONO))
- return _("Mono");
- break;
- case 2:
- if (HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_RIGHT))
- return _("Stereo");
- break;
- case 4:
- if (HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_RIGHT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_BACK_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_BACK_RIGHT))
- return _("Surround 4.0");
- break;
- case 5:
- if (HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_RIGHT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_BACK_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_BACK_RIGHT))
- if (HAS_POSITION (MATE_MIXER_CHANNEL_LFE))
- return _("Surround 4.1");
- if (HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_CENTER))
- return _("Surround 5.0");
- break;
- case 6:
- if (HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_RIGHT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_CENTER) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_BACK_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_BACK_RIGHT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_LFE))
- return _("Surround 5.1");
- break;
- case 8:
- if (HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_RIGHT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_FRONT_CENTER) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_BACK_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_BACK_RIGHT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_SIDE_LEFT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_SIDE_RIGHT) &&
- HAS_POSITION (MATE_MIXER_CHANNEL_LFE))
- return _("Surround 7.1");
- break;
- }
-
-#undef HAS_POSITION
-
- return NULL;
-}
-
-#if GTK_CHECK_VERSION (3, 0, 0)
-/* Taken from gtkstyle.c */
-static void rgb_to_hls (gdouble *r, gdouble *g, gdouble *b);
-static void hls_to_rgb (gdouble *h, gdouble *l, gdouble *s);
-
-void
-mvc_color_shade (GdkRGBA *a, GdkRGBA *b, gdouble k)
-{
- gdouble red;
- gdouble green;
- gdouble blue;
-
- red = (gdouble) a->red / 65535.0;
- green = (gdouble) a->green / 65535.0;
- blue = (gdouble) a->blue / 65535.0;
-
- rgb_to_hls (&red, &green, &blue);
-
- green *= k;
- if (green > 1.0)
- green = 1.0;
- else if (green < 0.0)
- green = 0.0;
-
- blue *= k;
- if (blue > 1.0)
- blue = 1.0;
- else if (blue < 0.0)
- blue = 0.0;
-
- hls_to_rgb (&red, &green, &blue);
-
- b->red = red * 65535.0;
- b->green = green * 65535.0;
- b->blue = blue * 65535.0;
-}
-
-static void
-rgb_to_hls (gdouble *r, gdouble *g, gdouble *b)
-{
- gdouble min;
- gdouble max;
- gdouble red;
- gdouble green;
- gdouble blue;
- gdouble h, l, s;
- gdouble delta;
-
- red = *r;
- green = *g;
- blue = *b;
-
- if (red > green) {
- if (red > blue)
- max = red;
- else
- max = blue;
-
- if (green < blue)
- min = green;
- else
- min = blue;
- } else {
- if (green > blue)
- max = green;
- else
- max = blue;
-
- if (red < blue)
- min = red;
- else
- min = blue;
- }
-
- l = (max + min) / 2;
- s = 0;
- h = 0;
-
- if (max != min) {
- if (l <= 0.5)
- s = (max - min) / (max + min);
- else
- s = (max - min) / (2 - max - min);
-
- delta = max - min;
- if (red == max)
- h = (green - blue) / delta;
- else if (green == max)
- h = 2 + (blue - red) / delta;
- else if (blue == max)
- h = 4 + (red - green) / delta;
-
- h *= 60;
- if (h < 0.0)
- h += 360;
- }
-
- *r = h;
- *g = l;
- *b = s;
-}
-
-static void
-hls_to_rgb (gdouble *h, gdouble *l, gdouble *s)
-{
- gdouble hue;
- gdouble lightness;
- gdouble saturation;
- gdouble m1, m2;
- gdouble r, g, b;
-
- lightness = *l;
- saturation = *s;
-
- if (lightness <= 0.5)
- m2 = lightness * (1 + saturation);
- else
- m2 = lightness + saturation - lightness * saturation;
- m1 = 2 * lightness - m2;
-
- if (saturation == 0) {
- *h = lightness;
- *l = lightness;
- *s = lightness;
- } else {
- hue = *h + 120;
- while (hue > 360)
- hue -= 360;
- while (hue < 0)
- hue += 360;
-
- if (hue < 60)
- r = m1 + (m2 - m1) * hue / 60;
- else if (hue < 180)
- r = m2;
- else if (hue < 240)
- r = m1 + (m2 - m1) * (240 - hue) / 60;
- else
- r = m1;
-
- hue = *h;
- while (hue > 360)
- hue -= 360;
- while (hue < 0)
- hue += 360;
-
- if (hue < 60)
- g = m1 + (m2 - m1) * hue / 60;
- else if (hue < 180)
- g = m2;
- else if (hue < 240)
- g = m1 + (m2 - m1) * (240 - hue) / 60;
- else
- g = m1;
-
- hue = *h - 120;
- while (hue > 360)
- hue -= 360;
- while (hue < 0)
- hue += 360;
-
- if (hue < 60)
- b = m1 + (m2 - m1) * hue / 60;
- else if (hue < 180)
- b = m2;
- else if (hue < 240)
- b = m1 + (m2 - m1) * (240 - hue) / 60;
- else
- b = m1;
-
- *h = r;
- *l = g;
- *s = b;
- }
-}
-#endif