[SCM] calf/master: + GUI: implement reverse monochrome mode in VU meters, add PF_CTLO_REVERSE flag to enable it in stock GUIs

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:38:00 UTC 2013


The following commit has been merged in the master branch:
commit 1cb9a3a4a10ffb7bc0bbfa7c7b9ab27acfd540b1
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Thu Oct 30 23:26:36 2008 +0000

    + GUI: implement reverse monochrome mode in VU meters, add PF_CTLO_REVERSE flag to enable it in stock GUIs

diff --git a/src/calf/custom_ctl.h b/src/calf/custom_ctl.h
index cea65d6..a8bd755 100644
--- a/src/calf/custom_ctl.h
+++ b/src/calf/custom_ctl.h
@@ -54,9 +54,17 @@ extern GType calf_line_graph_get_type();
 #define CALF_VUMETER_CLASS(klass)  (G_TYPE_CHECK_CLASS_CAST ((klass),  CALF_TYPE_VUMETER, CalfVUMeterClass))
 #define CALF_IS_VUMETER_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass),  CALF_TYPE_VUMETER))
 
+enum CalfVUMeterMode
+{
+    VU_STANDARD,
+    VU_MONOCHROME,
+    VU_MONOCHROME_REVERSE
+};
+
 struct CalfVUMeter
 {
     GtkWidget parent;
+    CalfVUMeterMode mode;
     float value;
 };
 
@@ -69,6 +77,8 @@ extern GtkWidget *calf_vumeter_new();
 extern GType calf_vumeter_get_type();
 extern void calf_vumeter_set_value(CalfVUMeter *meter, float value);
 extern float calf_vumeter_get_value(CalfVUMeter *meter);
+extern void calf_vumeter_set_mode(CalfVUMeter *meter, CalfVUMeterMode mode);
+extern CalfVUMeterMode calf_vumeter_get_mode(CalfVUMeter *meter);
 
 #define CALF_TYPE_KNOB          (calf_knob_get_type())
 #define CALF_KNOB(obj)          (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALF_TYPE_KNOB, CalfKnob))
diff --git a/src/calf/giface.h b/src/calf/giface.h
index d1b2b89..f66e3ed 100644
--- a/src/calf/giface.h
+++ b/src/calf/giface.h
@@ -80,6 +80,7 @@ enum parameter_flags
   PF_CTLO_HORIZ     = 0x001000, ///< horizontal version of the control
   PF_CTLO_VERT      = 0x002000, ///< vertical version of the control
   PF_CTLO_LABEL     = 0x004000, ///< add a text display to the control (meters only)
+  PF_CTLO_REVERSE   = 0x008000, ///< use VU_MONOCHROME_REVERSE mode (meters only)
 
   PF_PROP_NOBOUNDS =  0x010000, ///< no epp:hasStrictBounds
   PF_PROP_EXPENSIVE = 0x020000, ///< epp:expensive, may trigger expensive calculation
diff --git a/src/custom_ctl.cpp b/src/custom_ctl.cpp
index 4ff19a9..65a60af 100644
--- a/src/custom_ctl.cpp
+++ b/src/custom_ctl.cpp
@@ -190,16 +190,31 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
     cairo_fill(c);
     cairo_set_line_width(c, 1);
     
+    CalfVUMeterMode mode = vu->mode;
+    
     for (int x = ox; x <= ox + sx; x += 3)
     {
         float ts = (x - ox) * 1.0 / sx;
         float r, g, b;
-        if (ts < 0.75)
-            r = ts / 0.75, g = 1, b = 0;
-        else
-            r = 1, g = 1 - (ts - 0.75) / 0.25, b = 0;
-        if (vu->value < ts || vu->value <= 0)
-            r *= 0.5, g *= 0.5, b *= 0.5;
+        switch(mode)
+        {
+            case VU_STANDARD:
+                if (ts < 0.75)
+                    r = ts / 0.75, g = 1, b = 0;
+                else
+                    r = 1, g = 1 - (ts - 0.75) / 0.25, b = 0;
+                if (vu->value < ts || vu->value <= 0)
+                    r *= 0.5, g *= 0.5, b *= 0.5;
+                break;
+            case VU_MONOCHROME_REVERSE:
+                ts = 1 - ts;
+                // fall through
+            case VU_MONOCHROME:
+                r = 1, g = 1, b = 0;
+                if (vu->value < ts || vu->value <= 0)
+                    r *= 0.5, g *= 0.5, b *= 0.5;
+                break;
+        }
         GdkColor sc2 = { 0, (guint16)(65535 * r), (guint16)(65535 * g), (guint16)(65535 * b) };
         gdk_cairo_set_source_color(c, &sc2);
         cairo_move_to(c, x, oy);
@@ -311,6 +326,20 @@ extern float calf_vumeter_get_value(CalfVUMeter *meter)
     return meter->value;
 }
 
+extern void calf_vumeter_set_mode(CalfVUMeter *meter, CalfVUMeterMode mode)
+{
+    if (mode != meter->mode)
+    {
+        meter->mode = mode;
+        gtk_widget_queue_draw(GTK_WIDGET(meter));
+    }
+}
+
+extern CalfVUMeterMode calf_vumeter_get_mode(CalfVUMeter *meter)
+{
+    return meter->mode;
+}
+
 ///////////////////////////////////////// knob ///////////////////////////////////////////////
 
 static gboolean
diff --git a/src/gui.cpp b/src/gui.cpp
index cfcea48..fd393b7 100644
--- a/src/gui.cpp
+++ b/src/gui.cpp
@@ -544,6 +544,8 @@ GtkWidget *plugin_gui::create(plugin_ctl_iface *_plugin)
         {
             params[i] = new vumeter_param_control();
             widget = params[i]->create(this, i);
+            if (props.flags & PF_CTLO_REVERSE)
+                calf_vumeter_set_mode (CALF_VUMETER (widget), VU_MONOCHROME_REVERSE);
             if (props.flags & PF_CTLO_LABEL)
             {
                 gtk_table_attach (GTK_TABLE (container), widget, 1, 2, trow, trow + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list