[SCM] calf/master: Fully redesigned

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:39:40 UTC 2013


The following commit has been merged in the master branch:
commit 67acd13a90e1c4284b2be11e52d2e2affa217cff
Author: Markus Schmidt <schmidt at boomshop.net>
Date:   Mon Oct 19 11:32:49 2009 +0200

    Fully redesigned

diff --git a/gui/background.png b/gui/background.png
deleted file mode 100644
index 4316d60..0000000
Binary files a/gui/background.png and /dev/null differ
diff --git a/gui/background_dark.png b/gui/background_dark.png
new file mode 100644
index 0000000..1753a48
Binary files /dev/null and b/gui/background_dark.png differ
diff --git a/gui/background_light.png b/gui/background_light.png
new file mode 100644
index 0000000..b0f6c34
Binary files /dev/null and b/gui/background_light.png differ
diff --git a/gui/calf.rc b/gui/calf.rc
index ccbd401..9aff67c 100644
--- a/gui/calf.rc
+++ b/gui/calf.rc
@@ -1,45 +1,133 @@
 style "calf_default"
 {
-  fg[NORMAL] = { 0.2, 0.2, 0.2 }
-  fg[ACTIVE] = { 0.2, 0.2, 0.2 }
-  fg[PRELIGHT] = { 0.2, 0.2, 0.2 }
-  fg[SELECTED] = { 0.2, 0.2, 0.2 }
-  fg[INSENSITIVE] = { 0.2, 0.2, 0.2 }
-
-  bg[NORMAL] = { #c28fc769cccc }
-  bg[ACTIVE] = { #c28fc769cccc }
-  bg[PRELIGHT] = { #c28fc769cccc }
-  bg[SELECTED] = { #c28fc769cccc }
-  bg[INSENSITIVE] = { #c28fc769cccc }
+  fg[NORMAL] = { 0.1, 0.1, 0.1 }
+  fg[ACTIVE] = { 0.1, 0.1, 0.1 }
+  fg[PRELIGHT] = { 0.1, 0.1, 0.1 }
+  fg[SELECTED] = { 0.1, 0.1, 0.1 }
+  fg[INSENSITIVE] = { 0.1, 0.1, 0.1 }
+
+  bg[NORMAL] = "#d0cfca"
+  bg[ACTIVE] = "#d0cfca"
+  bg[PRELIGHT] = "#d0cfca"
+  bg[SELECTED] = "#d0cfca"
+  bg[INSENSITIVE] = "#d0cfca"
+  
   font_name = "Sans 8"
   
-  engine "clearlooks" {
-    menubarstyle = 0
-  }
+  engine "murrine" 
+	{
+		animation           = TRUE  # FALSE = disabled, TRUE = enabled
+		colorize_scrollbar  = TRUE # FALSE = disabled, TRUE = enabled
+		contrast            = 1.0  # 0.8 for less contrast, more than 1.0 for more contrast on borders
+		glazestyle          = 0     # 0 = flat highlight, 1 = curved highlight, 2 = concave style, 3 = top curved highlight, 4 = beryl highlight
+		gradient_shades     = {1.07,1.05,1.04,1.01} # default: {1.1,1.0,1.0,1.1}
+		gradients           = TRUE  # FALSE = disabled, TRUE = enabled
+		highlight_ratio     = 1.07  # set highlight amount for buttons or widgets
+		lightborder_ratio   = 1.2   # sets lightborder amount for buttons or widgets
+		lightborderstyle    = 0     # 0 = lightborder on top side, 1 = lightborder on all sides
+		listviewheaderstyle = 1     # 0 = flat, 1 = glassy, 2 = raised
+		listviewstyle       = 1     # 0 = nothing, 1 = dotted
+		menubaritemstyle    = 0     # 0 = menuitem look, 1 = button look
+		menubarstyle        = 3     # 0 = flat, 1 = glassy, 2 = gradient, 3 = striped
+		menuitemstyle       = 1     # 0 = flat, 1 = glassy, 2 = striped
+		menustyle           = 1     # 0 = no vertical menu stripe, 1 = display vertical menu stripe
+		reliefstyle	    = 1     # 0 = flat, 1 = inset, 2 = shadow
+		rgba		    = FALSE  # FALSE = disabled, TRUE = enabled
+		roundness           = 6     # 0 = squared, 1 = old default, more will increase roundness
+		scrollbarstyle      = 3     # 0 = nothing, 1 = circles, 2 = handles, 3 = diagonal stripes, 4 = diagonal stripes and handles, 5 = horizontal stripes, 6 = horizontal stripes and handles
+		sliderstyle         = 1     # 0 = nothing added, 1 = handles
+		stepperstyle        = 1     # 0 = standard, 1 = integrated stepper handles, 2 = unknown
+		#profile            = NODOKA # engine profile options: CANDIDO, CLEARLOOKS, MIST, MURRINE, NODOKA
+		toolbarstyle	    = 2     # 0 = flat, 1 = glassy, 2 = gradient
+	}
 }
 
 style "frame" = "calf_default"
 {
-  xthickness = 10
-  ythickness = 15
+  xthickness = 8
+  ythickness = 8
 }
 
 style "inverse" = "calf_default"
 {
-  fg[NORMAL] = { #c28fc769cccc }
-  fg[ACTIVE] = { #c28fc769cccc }
-  fg[PRELIGHT] = { #c28fc769cccc }
-  fg[SELECTED] = { #c28fc769cccc }
-  fg[INSENSITIVE] = { #c28fc769cccc }
-
-  bg[NORMAL] = { 0.2, 0.2, 0.2 }
-  bg[ACTIVE] = { 0.2, 0.2, 0.2 }
-  bg[PRELIGHT] = { 0.2, 0.2, 0.2 }
-  bg[SELECTED] = { 0.2, 0.2, 0.2 }
-  bg[INSENSITIVE] = { 0.2, 0.2, 0.2 }
+  fg[NORMAL] = "#fff"
+  fg[ACTIVE] = "#fff"
+  fg[PRELIGHT] = "#fff"
+  fg[SELECTED] = "#fff"
+  fg[INSENSITIVE] = "#fff"
+
+  bg[NORMAL] = "#495563"
+  bg[ACTIVE] = "#495563"
+  bg[PRELIGHT] = "#495563"
+  bg[SELECTED] = "#495563"
+  bg[INSENSITIVE] = "#495563"
+}
+
+style "menu" = "calf_default"
+{
+  fg[NORMAL] = "#fff"
+  fg[ACTIVE] = "#fff"
+  fg[PRELIGHT] = "#fff"
+  fg[SELECTED] = "#fff"
+  fg[INSENSITIVE] = "#999"
+
+  bg[NORMAL] = "#000"
+  bg[ACTIVE] = "#000"
+  bg[PRELIGHT] = "#495563"
+  bg[SELECTED] = "#495563"
+  bg[INSENSITIVE] = "#000"
+}
+
+style "button" = "calf_default"
+{
+  fg[NORMAL] = "#fff"
+  fg[ACTIVE] = "#fff"
+  fg[PRELIGHT] = "#fff"
+  fg[SELECTED] = "#fff"
+  fg[INSENSITIVE] = "#999"
+
+  bg[NORMAL] = "#000"
+  bg[ACTIVE] = "#000"
+  bg[PRELIGHT] = "#495563"
+  bg[SELECTED] = "#495563"
+  bg[INSENSITIVE] = "#000"
 }
 
+style "background-light" = "calf_default"
+{
+  bg_pixmap[NORMAL] = "background_light.png"
+  bg_pixmap[ACTIVE] = "background_light.png"
+  bg_pixmap[PRELIGHT] = "background_light.png"
+  bg_pixmap[SELECTED] = "background_light.png"
+  bg_pixmap[INSENSITIVE] = "background_light.png"
+}
+
+style "background-dark" = "inverse"
+{
+  bg_pixmap[NORMAL] = "background_dark.png"
+  bg_pixmap[ACTIVE] = "background_dark.png"
+  bg_pixmap[PRELIGHT] = "background_dark.png"
+  bg_pixmap[SELECTED] = "background_dark.png"
+  bg_pixmap[INSENSITIVE] = "background_dark.png"
+}
+
+class "GtkWidget" style "calf_default"
+
+widget "calf-plugin*inverted" style "background-dark"
 widget "calf-plugin*inverted*" style "inverse"
+
 widget "calf-plugin*frame*" style "frame"
-widget "calf-plugin*" style "calf_default"
+
+#widget "calf-plugin" style "background-dark"
+widget "calf-plugin*" style "inverse"
+
+widget "calf-plugin*calf-container*" style "background-dark"
+#widget "calf-plugin*calf-container*" style "inverse"
+
+widget "calf-rack" style "background-light"
 widget "calf-rack*" style "calf_default"
+
+widget_class "*<GtkButton>"           		    style "button"
+widget_class "*<GtkMenuBar>*"           		style "menu"
+widget_class "*<GtkMenu>*"              		style "menu"
+widget_class "*<GtkMenuItem>*"          		style "menu"
diff --git a/gui/gui-compressor.xml b/gui/gui-compressor.xml
index 331a450..2ed5e62 100644
--- a/gui/gui-compressor.xml
+++ b/gui/gui-compressor.xml
@@ -1,5 +1,5 @@
 <table rows="2" cols="4" spacing="10">
-    <vbox attach-x="0" attach-y="0" expand="0" fill="0" pad-x="7" pad-y="3" >
+    <vbox attach-x="0" attach-y="0" expand="0" fill="0" pad-x="7" pad-y="3" spacing="3" >
         <label param="bypass" expand="0" fill="0" />
         <align><toggle param="bypass" shrink="1" size="2"/></align>
     </vbox>
@@ -14,7 +14,7 @@
             <label param="peak" />
             <vumeter param="peak" mode="0" hold="2" shrink-y="0" />
         </vbox>
-        <vbox shrink-x="1" expand-x="0" fill-x="0" expand="0" fill="0" attach-x="1" attach-y="0">
+        <vbox shrink-x="1" expand-x="0" fill-x="0" expand-y="0" fill-y="0" expand="0" fill="0" attach-x="1" attach-y="0">
             <label param="clip" expand="0" fill="0" />
             <led param="clip" mode="1" expand="0" fill="0" />
         </vbox>
@@ -56,7 +56,7 @@
     </table>
     
     <if cond="directlink">
-        <line-graph attach-x="2" attach-y="0" attach-h="2" refresh="1" width="200" height="200" param="compression" square="1" expand-y="1" fill-y="1" pad-x="7"/>
+        <line-graph attach-x="2" attach-y="0" attach-h="2" refresh="1" width="220" height="220" param="compression" square="1" expand-y="1" fill-y="1" pad-x="7"/>
     </if>
     
     <vbox expand="1" attach-x="3" attach-y="0" pad-x="5">
diff --git a/gui/gui-filter.xml b/gui/gui-filter.xml
index 7c45d9b..e61fa2f 100644
--- a/gui/gui-filter.xml
+++ b/gui/gui-filter.xml
@@ -22,8 +22,8 @@
         </vbox>
     </hbox>
     <if cond="directlink">
-        <frame label="Freq. response" expand-x="1" fill-x="1" attach-x="1" attach-y="0" attach-h="2" widget-name="frame" pad-x="3">
-            <line-graph refresh="1" width="360" height="160" param="freq"/>
-        </frame>
+        <frame label="Freq. response" expand-x="1" fill-x="1" attach-x="1" attach-y="0" attach-h="2" widget-name="frame" pad-x="3"><vbox border="5">
+            <line-graph refresh="1" width="360" height="160" param="freq" border="5"/>
+        </vbox></frame>
     </if>
 </table>
diff --git a/gui/gui-filterclavier.xml b/gui/gui-filterclavier.xml
index 5ff2b0a..f0936ba 100644
--- a/gui/gui-filterclavier.xml
+++ b/gui/gui-filterclavier.xml
@@ -1,13 +1,13 @@
-<table rows="3" cols="1">
-    <table attach-x="0" attach-y="0" shrink-y="1" expand-x="1" cols="3" rows="1" >
+<table rows="2" cols="3">
+    <table attach-x="1" attach-y="1" shrink-y="1" expand-x="1" cols="3" rows="1" >
         <label param="mode" attach-x="0" attach-y="0" shrink-x="1"/>
         <label attach-x="1" attach-y="0" shrink-x="1" pad-x="10"/>
         <combo param="mode" attach-x="2" attach-y="0"/>
     </table>
-    <hbox attach-x="0" attach-y="1" shrink-y="1" expand-x="1" fill-x="1">
+    <vbox attach-x="0" attach-y="0">
         <vbox border="10">
             <label param="transpose" />
-            <knob param="transpose" type="1"/>
+            <knob param="transpose" type="1" size="4"/>
             <value param="transpose" />
         </vbox>
         <vbox border="10">
@@ -15,9 +15,11 @@
             <knob param="detune" type="1"/>
             <value param="detune" />
         </vbox>
+    </vbox>
+    <vbox attach-x="2" attach-y="0">
         <vbox border="10">
             <label param="maxres" />
-            <knob param="maxres" />
+            <knob param="maxres" size="4" />
             <value param="maxres" />
         </vbox>
         <vbox border="10">
@@ -25,10 +27,10 @@
             <knob param="inertia"/>
             <value param="inertia" />
         </vbox>
-    </hbox>
+    </vbox>
     <if cond="directlink">
-        <frame label="Freq. response" expand-x="1" fill-x="1" attach-x="0" attach-y="2">
-            <line-graph param="mode" refresh="1" width="160" height="160"/>
-        </frame>
+        <frame label="Freq. response" expand-x="1" fill-x="1" attach-x="1" attach-y="0"><vbox border="5">
+            <line-graph param="mode" refresh="1" width="320" height="160"/>
+        </vbox></frame>
     </if>
 </table>
diff --git a/gui/gui-flanger.xml b/gui/gui-flanger.xml
index aa5e581..1ea7fac 100644
--- a/gui/gui-flanger.xml
+++ b/gui/gui-flanger.xml
@@ -1,51 +1,48 @@
-<table rows="3" cols="1">
-    <frame label="Timbre" shrink-y="1" attach-x="0" attach-y="0" >
-        <table rows="1" cols="1" homogeneous="1" spacing="10">
-            <vbox expand="0" attach-x="0" attach-y="0">
-                <label param="min_delay" />
-                <knob param="min_delay" />
-                <value param="min_delay" />
-            </vbox>
-            <vbox expand="0" attach-x="1" attach-y="0">
-                <label param="mod_depth" />
-                <knob param="mod_depth" />
-                <value param="mod_depth" />
-            </vbox>
-            <vbox expand="0" attach-x="2" attach-y="0">
-                <label param="feedback" />
-                <knob param="feedback" type="1" size="3" />
-                <value param="feedback" />
-            </vbox>
-            <vbox expand="0" attach-x="3" attach-y="0">
-                <label param="dry" />
-                <knob param="dry" />
-                <value param="dry" />
-            </vbox>
-            <vbox expand="0" attach-x="4" attach-y="0">
-                <label param="amount" />
-                <knob param="amount" />
-                <value param="amount" />
-            </vbox>
-        </table>
-    </frame>
-    <frame label="LFO" shrink-y="1" attach-x="0" attach-y="1" >
-        <hbox>
-            <vbox border="10" expand="0">
-                <label param="mod_rate" />
-                <knob param="mod_rate" size="4" />
-                <value param="mod_rate" />
-            </vbox>
-            <align expand="0"><button param="reset" /></align>
-            <vbox border="10" expand="0">
-                <label param="stereo" />
-                <knob param="stereo" type="3" size="4" />
-                <value param="stereo" />
-            </vbox>
-        </hbox>
-    </frame>
+<table rows="2" cols="3">
+    <table attach-x="1" attach-y="1" rows="1" cols="1" homogeneous="1" spacing="10">
+        <vbox expand="0" attach-x="0" attach-y="0">
+            <label param="min_delay" />
+            <knob param="min_delay" />
+            <value param="min_delay" />
+        </vbox>
+        <vbox expand="0" attach-x="1" attach-y="0">
+            <label param="mod_depth" />
+            <knob param="mod_depth" />
+            <value param="mod_depth" />
+        </vbox>
+        <vbox expand="0" attach-x="2" attach-y="0">
+            <label param="feedback" />
+            <knob param="feedback" type="1" />
+            <value param="feedback" />
+        </vbox>
+        <vbox expand="0" attach-x="3" attach-y="0">
+            <label param="dry" />
+            <knob param="dry" />
+            <value param="dry" />
+        </vbox>
+        <vbox expand="0" attach-x="4" attach-y="0">
+            <label param="amount" />
+            <knob param="amount" />
+            <value param="amount" />
+        </vbox>
+    </table>
+    
+    <vbox border="10" attach-x="0" attach-y="0">
+        <label param="mod_rate" align-y="1.0" />
+        <knob param="mod_rate" size="4" expand="0" fill="0" />
+        <value param="mod_rate" align-y="0.0" />
+    </vbox>
+    <vbox border="10" attach-x="2" attach-y="0">
+        <label param="stereo" align-y="1.0" />
+        <knob param="stereo" type="3" size="4" expand="0" fill="0" />
+        <value param="stereo" align-y="0.0" />
+    </vbox>
+    
     <if cond="directlink">
-        <frame expand-y="1" fill-y="1" attach-x="0" attach-y="2" label="Freq. response">
+        <frame expand-y="1" fill-y="1" attach-x="1" attach-y="0" label="Freq. response"><vbox border="5">
             <line-graph refresh="1" width="160" height="160" param="min_delay"/>
-        </frame>
+        </vbox></frame>
     </if>
+    
+    <align expand="0" attach-x="2" attach-y="1"><button param="reset" /></align>
 </table>
diff --git a/gui/gui-multichorus.xml b/gui/gui-multichorus.xml
index 018ff16..9ea0dc5 100644
--- a/gui/gui-multichorus.xml
+++ b/gui/gui-multichorus.xml
@@ -1,6 +1,6 @@
-<table rows="3" cols="2">
-    <frame label="Timbre" attach-x="0" attach-y="0" shrink-y="1">
-        <table rows="1" cols="5" homogeneous="1" spacing="10">
+<table rows="2" cols="3">
+    <frame label="Timbre" attach-x="0" attach-y="1" shrink-y="1">
+        <table rows="1" cols="5" homogeneous="1" spacing="10" attach-x="0" attach-y="1">
             <vbox attach-x="0" attach-y="0">
                 <label param="min_delay" />
                 <knob param="min_delay" />
@@ -28,8 +28,8 @@
             </vbox>
         </table>
     </frame>
-    <frame label="LFO" attach-x="0" attach-y="1" shrink-y="1">
-        <table rows="1" cols="3" homogeneous="1" spacing="10">
+    <frame label="LFO" attach-x="1" attach-y="0" shrink-y="1" expand-y="1" fill-y="1">
+        <table rows="2" cols="2" homogeneous="1" spacing="10">
             <vbox attach-x="0" attach-y="0">
                 <label param="mod_rate" />
                 <knob param="mod_rate" />
@@ -40,23 +40,23 @@
                 <knob param="voices" />
                 <value param="voices" />
             </vbox>
-            <vbox attach-x="2" attach-y="0">
+            <vbox attach-x="0" attach-y="1">
                 <label param="stereo" />
-                <knob param="stereo" type="3" />
+                <knob param="stereo" type="3" size="3" />
                 <value param="stereo" />
             </vbox>
-            <vbox attach-x="3" attach-y="0">
+            <vbox attach-x="1" attach-y="1">
                 <label param="vphase" />
-                <knob param="vphase" type="3" />
+                <knob param="vphase" type="3" size="3" />
                 <value param="vphase" />
             </vbox>
         </table>
     </frame>
-    <frame label="Post Filter" attach-x="0" attach-y="2" shrink-y="1">
-        <table rows="1" cols="3" homogeneous="1" spacing="10">
+    <frame label="Post Filter" attach-x="1" attach-y="1" shrink-y="1">
+        <table rows="1" cols="3" spacing="10">
             <vbox attach-x="0" attach-y="0">
                 <label param="freq" />
-                <knob param="freq" size="3" />
+                <knob param="freq" size="2" />
                 <value param="freq" />
             </vbox>
             <vbox attach-x="1" attach-y="0">
@@ -66,24 +66,24 @@
             </vbox>
             <vbox attach-x="2" attach-y="0">
                 <label param="freq2" />
-                <knob param="freq2" size="3" />
+                <knob param="freq2" size="2" />
                 <value param="freq2" />
             </vbox>
         </table>
     </frame>
     <if cond="directlink">
-        <hbox attach-x="0" attach-y="3" fill-y="1" expand-y="1">
-            <frame label="Freq. response">
+        <hbox attach-x="0" attach-y="0" fill-y="1" expand-y="1">
+            <frame label="Freq. response"><vbox border="5">
                 <vbox expand-x="1" fill-x="1" attach-x="3" attach-y="0" attach-h="7">
-                    <line-graph refresh="1" width="160" height="160" param="min_delay"/>
+                    <line-graph refresh="1" width="200" height="160" param="min_delay"/>
                 </vbox>
-            </frame>
+            </vbox></frame>
             <frame label="LFO positions">
-                <vbox expand-x="1" fill-x="1" attach-x="3" attach-y="0" attach-h="7">
-                    <line-graph refresh="1" width="160" height="30" param="mod_depth"/>
-                    <line-graph refresh="1" width="160" height="160" param="mod_rate"/>
+                <vbox expand-x="1" fill-x="1" attach-x="3" attach-y="0" attach-h="7"><vbox border="5">
+                    <line-graph refresh="1" width="200" height="30" param="mod_depth"/>
+                    <line-graph refresh="1" width="200" height="160" param="mod_rate"/>
                 </vbox>
-            </frame>
+            </vbox></frame>
         </hbox>
     </if>
 </table>
diff --git a/gui/gui-phaser.xml b/gui/gui-phaser.xml
index 58d07c0..ba1f313 100644
--- a/gui/gui-phaser.xml
+++ b/gui/gui-phaser.xml
@@ -1,60 +1,56 @@
-<table cols="1" rows="2">
-    <frame label="Timbre" attach-x="0" attach-y="0" shrink-y="1">
-        <vbox>
-            <table rows="2" cols="3" homogeneous="1" spacing="10">
-                <vbox expand="0" attach-x="0" attach-y="0">
-                    <label param="base_freq" />
-                    <knob param="base_freq" />
-                    <value param="base_freq" />
-                </vbox>
-                <vbox expand="0" attach-x="1" attach-y="0">
-                    <label param="mod_depth" />
-                    <knob param="mod_depth" />
-                    <value param="mod_depth" />
-                </vbox>
-                <vbox expand="0" attach-x="2" attach-y="0">
-                    <label param="amount" />
-                    <knob param="amount" />
-                    <value param="amount" />
-                </vbox>
-                <vbox expand="0" attach-x="0" attach-y="1">
-                    <label param="stages" />
-                    <knob param="stages" />
-                    <value param="stages" />
-                </vbox>
-                <vbox expand="0" attach-x="1" attach-y="1">
-                    <label param="feedback" />
-                    <knob param="feedback" type="1" size="3" />
-                    <value param="feedback" />
-                </vbox>
-                <vbox expand="0" attach-x="2" attach-y="1">
-                    <label param="dry" />
-                    <knob param="dry" />
-                    <value param="dry" />
-                </vbox>
-            </table>
+<table cols="3" rows="2">
+    <table rows="1" cols="6" homogeneous="1" spacing="2" attach-x="1" attach-y="1" shrink-y="1">
+        <vbox expand="0" attach-x="0" attach-y="0">
+            <label param="base_freq" />
+            <knob param="base_freq" />
+            <value param="base_freq" />
         </vbox>
-    </frame>
-    <frame label="LFO"  attach-x="0" attach-y="1" shrink-y="1">
-        <hbox>
-            <vbox border="10">
-                <label param="mod_rate" />
-                <knob param="mod_rate" size="4" />
-                <value param="mod_rate" />
-            </vbox>
-            <align><button param="reset" /></align>
-            <vbox border="10">
-                <label param="stereo" />
-                <knob param="stereo" type="3" size="4" />
-                <value param="stereo" />
-            </vbox>
-        </hbox>
-    </frame>
+        <vbox expand="0" attach-x="1" attach-y="0">
+            <label param="mod_depth" />
+            <knob param="mod_depth" />
+            <value param="mod_depth" />
+        </vbox>
+        <vbox expand="0" attach-x="2" attach-y="0">
+            <label param="feedback" />
+            <knob param="feedback" type="1" />
+            <value param="feedback" />
+        </vbox>
+        <vbox expand="0" attach-x="3" attach-y="0">
+            <label param="stages" />
+            <knob param="stages" />
+            <value param="stages" />
+        </vbox>
+        <vbox expand="0" attach-x="4" attach-y="0">
+            <label param="amount" />
+            <knob param="amount" />
+            <value param="amount" />
+        </vbox>
+        <vbox expand="0" attach-x="5" attach-y="0">
+            <label param="dry" />
+            <knob param="dry" />
+            <value param="dry" />
+        </vbox>
+    </table>
+    
+    <vbox border="10" attach-x="0" attach-y="0">
+        <label param="mod_rate" align-y="1.0" />
+        <knob param="mod_rate" size="4" />
+        <value param="mod_rate" align-y="0.0" />
+    </vbox>
+    
+    <vbox border="10" attach-x="2" attach-y="0">
+        <label param="stereo" align-y="1.0" />
+        <knob param="stereo" type="3" size="4" />
+        <value param="stereo" align-y="0.0" />
+    </vbox>
+    
+    <align attach-x="2" attach-y="1"><button param="reset" /></align>
+    
     <if cond="directlink">
-        <frame label="Freq. response" attach-x="0" attach-y="2" >
+        <frame label="Freq. response" attach-x="1" attach-y="0" ><vbox border="5">
             <vbox expand-x="1" fill-x="1" >
                 <line-graph refresh="1" width="160" height="160" param="base_freq"/>
             </vbox>
-        </frame>
+        </vbox></frame>
     </if>
 </table>
diff --git a/gui/gui-reverb.xml b/gui/gui-reverb.xml
index 5dfbfd2..23265d4 100644
--- a/gui/gui-reverb.xml
+++ b/gui/gui-reverb.xml
@@ -1,51 +1,61 @@
-<vbox>
-    <hbox>
-        <vbox border="5">
-            <label param="predelay" />
-            <knob param="predelay" />
-            <value param="predelay" />
+<hbox spacing="20">
+    <vbox>
+        <hbox fill-y="0" expand-y="0" spacing="20">
+            <vbox fill="0" expand="0" spacing="3">
+                <label param="predelay" fill="0" expand="0" />
+                <knob param="predelay" size="3" fill="0" expand="0" />
+                <value param="predelay" fill="0" expand="0" />
+            </vbox>
+            <vbox fill="0" expand="0" spacing="3">
+                <label param="decay_time" fill="0" expand="0"/>
+                <knob param="decay_time" size="4" fill="0" expand="0" />
+                <value param="decay_time" fill="0" expand="0" />
+            </vbox>
+            <vbox fill="0" expand="0" spacing="3">
+                <label param="hf_damp" fill="0" expand="0" />
+                <knob param="hf_damp" size="3" fill="0" expand="0" />
+                <value param="hf_damp" fill="0" expand="0" />
+            </vbox>
+        </hbox>
+        <vbox border="10">
+            <label param="room_size"  />
+            <combo param="room_size" />
         </vbox>
-        <vbox border="5">
-            <label param="decay_time" />
-            <knob param="decay_time" size="4" />
-            <value param="decay_time" />
-        </vbox>
-        <vbox border="5">
-            <label param="hf_damp" />
-            <knob param="hf_damp" />
-            <value param="hf_damp" />
-        </vbox>
-    </hbox>
-    <table homogeneous="1" spacing="5" rows="1" cols="5">
-        <vbox attach-x="0" attach-y="0">
-            <label param="diffusion" />
-            <knob param="diffusion" size="1"/>
-            <value param="diffusion" />
+    </vbox>
+    <table homogeneous="1" spacing="2" rows="2" cols="4" fill="1" expand="1">
+        <vbox attach-x="0" attach-y="0" fill="0" expand="0" spacing="3">
+            <label param="diffusion" fill="0" expand="0" />
+            <knob param="diffusion" fill="0" expand="0"/>
+            <value param="diffusion" fill="0" expand="0" />
         </vbox>
-        <vbox attach-x="1" attach-y="0">
+        <vbox attach-x="1" attach-y="0" fill="0" expand="0" spacing="3">
             <label param="bass_cut" />
-            <knob param="bass_cut" size="1" />
+            <knob param="bass_cut" size="2" />
             <value param="bass_cut" />
         </vbox>
-        <vbox attach-x="2" attach-y="0">
+        <vbox attach-x="2" attach-y="0" fill="0" expand="0" spacing="3">
             <label param="treble_cut" />
-            <knob param="treble_cut" size="1" />
+            <knob param="treble_cut" size="2" />
             <value param="treble_cut" />
         </vbox>
-        <vbox attach-x="3" attach-y="0">
+        <vbox attach-x="3" attach-y="0" fill="0" expand="0" spacing="3">
             <label param="dry" />
-            <knob param="dry" size="1" />
+            <knob param="dry" size="2" />
             <value param="dry" />
         </vbox>
-        <vbox attach-x="4" attach-y="0">
+        <vbox attach-x="4" attach-y="0" fill="0" expand="0" spacing="3">
             <label param="amount" />
-            <knob param="amount" size="1" />
+            <knob param="amount" size="2" />
             <value param="amount" />
         </vbox>
+        <table cols="3" rows="3" attach-x="0" attach-y="1" attach-w="5" fill-y="0" expand-y="0">
+            <label attach-x="0" attach-y="0" expand-x="0" fill-x="0" />
+            <label param="meter_wet" attach-x="0" attach-y="1" expand-y="1" fill-y="0" expand-x="0" fill-x="0" />
+            <vumeter param="meter_wet" hold="2" attach-x="1" attach-y="1" attach-w="2" expand-y="1" fill-y="0" expand-x="1" fill-x="1"/>
+            <label param="meter_out" attach-x="0" attach-y="2" expand-y="1" fill-y="0" expand-x="0" fill-x="0"/>
+            <vumeter param="meter_out" hold="2" attach-x="1" attach-y="2" attach-w="2" expand-y="1" fill-y="0" expand-x="1" fill-x="1" />
+            <!--<led param="clip" mode="0" attach-x="2" attach-y="2" expand-x="0" fill-x="0"/>-->
+        </table>
     </table>
-    <vbox border="5">
-        <label param="room_size"  />
-        <combo param="room_size" />
-    </vbox>
-</vbox>
+</hbox>
 
diff --git a/gui/gui-rotaryspeaker.xml b/gui/gui-rotaryspeaker.xml
new file mode 100644
index 0000000..a8818a7
--- /dev/null
+++ b/gui/gui-rotaryspeaker.xml
@@ -0,0 +1,47 @@
+<table spacing="5" rows="1" cols="3">
+    <table attach-x="0" attach-y="0" rows="2" cols="2">
+        <vbox  attach-x="0" attach-y="0" fill-x="1" fill-y="1">
+            <label param="treble_speed" />
+            <led param="meter_h" mode="2" />
+            <value param="treble_speed" />
+        </vbox>
+        <knob param="treble_speed" size="3" attach-x="1" attach-y="0" pad-x="10" />
+        <vbox attach-x="0" attach-y="1" fill-x="1" fill-y="1">
+            <label param="bass_speed" />
+            <led param="meter_l" mode="3" />
+            <value param="bass_speed" />
+        </vbox>
+        <knob param="bass_speed" size="3" attach-x="1" attach-y="1" pad-x="10" />
+    </table>
+    <vbox expand-y="0" attach-x="1" attach-y="0" pad-x="20">
+        <label param="mod_depth" fill-x="0" expand-x="0" align-y="1.0" />
+        <knob param="mod_depth" size="4" />
+        <value param="mod_depth" align-y="0.0" />
+    </vbox>
+    <table attach-x="2" attach-y="0" rows="2" cols="4" homogeneous="1">
+        <vbox expand-y="0" attach-x="0" attach-y="0" spacing="5">
+            <label param="shift" fill-x="0" expand-x="0" />
+            <knob param="shift" size="2" />
+            <value param="shift" />
+        </vbox>
+        <vbox expand-y="0" attach-x="1" attach-y="0" spacing="5">
+            <label param="spacing" fill-x="0" expand-x="0" />
+            <knob param="spacing" size="2" />
+            <value param="spacing" />
+        </vbox>
+        <vbox expand-y="0" attach-x="2" attach-y="0" spacing="5">
+            <label param="mic_distance" fill-x="0" expand-x="0" />
+            <knob param="mic_distance" size="2" />
+            <value param="mic_distance" />
+        </vbox>
+        <vbox expand-y="0" attach-x="3" attach-y="0" spacing="5">
+            <label param="reflection" fill-x="0" expand-x="0" />
+            <knob param="reflection" size="2" />
+            <value param="reflection" />
+        </vbox>
+        <vbox expand-y="0" attach-x="0" attach-y="1" attach-w="4">
+            <label param="vib_speed" fill-x="0" expand-x="0" />
+            <combo param="vib_speed" />
+        </vbox>
+    </table>
+</table>
diff --git a/gui/gui-vintagedelay.xml b/gui/gui-vintagedelay.xml
index 58ac5bf..289b824 100644
--- a/gui/gui-vintagedelay.xml
+++ b/gui/gui-vintagedelay.xml
@@ -1,19 +1,21 @@
-<vbox>
+<hbox>
     <frame label="Delay time">
-        <vbox>
-            <table rows="4" cols="3" border="5">
-                <label attach-x="0" attach-y="0" param="bpm" />
-                <align attach-x="1" attach-y="0" scale-x="0"><knob param="bpm" size="4" /></align>
-                <spin attach-x="2" attach-y="0" param="bpm" digits="2"/>
-                <label attach-x="0" attach-y="1" param="subdiv" />
-                <hscale attach-x="1" attach-y="1" param="subdiv" />
-                <spin attach-x="2" attach-y="1" param="subdiv" />
-                <label attach-x="0" attach-y="2" param="time_l" />
-                <hscale attach-x="1" attach-y="2" param="time_l" />
-                <spin attach-x="2" attach-y="2" param="time_l" />
-                <label attach-x="0" attach-y="3" param="time_r"  />
-                <hscale attach-x="1" attach-y="3" param="time_r" />
-                <spin attach-x="2" attach-y="3" param="time_r" />
+        <vbox border="5">
+            <table rows="4" cols="3">
+                <vbox attach-x="0" attach-y="0" attach-h="3" spacing="5" pad-x="20">
+                    <label param="bpm" />
+                    <align attach-x="1" attach-y="0" scale-x="0"><knob param="bpm" size="4" /></align>
+                    <spin attach-x="2" attach-y="0" param="bpm" digits="2"/>
+                </vbox>
+                <label attach-x="1" attach-y="0" param="subdiv" />
+                <hscale attach-x="2" attach-y="0" param="subdiv" />
+                <spin attach-x="3" attach-y="0" param="subdiv" />
+                <label attach-x="1" attach-y="1" param="time_l" />
+                <hscale attach-x="2" attach-y="1" param="time_l" />
+                <spin attach-x="3" attach-y="1" param="time_l" />
+                <label attach-x="1" attach-y="2" param="time_r"  />
+                <hscale attach-x="2" attach-y="2" param="time_r" />
+                <spin attach-x="3" attach-y="2" param="time_r" />
             </table>
         </vbox>
     </frame>
@@ -21,34 +23,35 @@
     <!-- -->
 
     <frame label="Mixing">
-        <vbox>
-            <hbox border="5">
-                <vbox>
-                    <label param="feedback"  />
-                    <knob param="feedback" size="3"/>
-                    <value param="feedback"/>
+        <hbox border="5">
+            <vbox fill="0" border="10" spacing="5">
+                <label param="feedback"  />
+                <knob param="feedback" size="4"/>
+                <value param="feedback"/>
+            </vbox>
+                
+            <table expand="0" rows="2" cols="2">
+                <vbox fill="0" attach-x="0" attach-y="1" fill-y="0">
+                    <label param="mix_mode" />
+                    <combo param="mix_mode" fill-y="0" />
+                </vbox>
+                <vbox fill="0" attach-x="1" attach-y="1" fill-y="0">
+                    <label param="medium" />
+                    <combo param="medium" fill-y="0" />
                 </vbox>
-                <vbox>
+                <vbox fill="0" attach-x="0" attach-y="0" pad-x="10">
                     <label param="dry"  />
                     <knob param="dry"/>
                     <value param="dry"/>
                 </vbox>
-                <vbox>
+                <vbox fill="0" attach-x="1" attach-y="0" pad-x="10">
                     <label param="amount"  />
                     <knob param="amount"/>
                     <value param="amount"/>
                 </vbox>
-            </hbox>
-            <hbox border="5">
-                <label param="mix_mode"  />
-                <combo param="mix_mode" expand-x="1" />
-            </hbox>
-            <hbox border="5">
-                <align><label param="medium"  /></align>
-                <combo param="medium" expand-x="1" />
-            </hbox>
-        </vbox>
+            </table>
+        </hbox>
     </frame>
 
-</vbox>
+</hbox>
 
diff --git a/gui/knob1.png b/gui/knob1.png
index 60431da..ec9792e 100644
Binary files a/gui/knob1.png and b/gui/knob1.png differ
diff --git a/gui/knob2.png b/gui/knob2.png
index 0ff93d1..b9b0597 100644
Binary files a/gui/knob2.png and b/gui/knob2.png differ
diff --git a/gui/knob3.png b/gui/knob3.png
index b63efd6..fb46bf4 100644
Binary files a/gui/knob3.png and b/gui/knob3.png differ
diff --git a/gui/knob4.png b/gui/knob4.png
index 7817b0c..3da6e84 100644
Binary files a/gui/knob4.png and b/gui/knob4.png differ
diff --git a/gui/light_bottom.png b/gui/light_bottom.png
new file mode 100644
index 0000000..4843131
Binary files /dev/null and b/gui/light_bottom.png differ
diff --git a/gui/light_top.png b/gui/light_top.png
new file mode 100644
index 0000000..24df165
Binary files /dev/null and b/gui/light_top.png differ
diff --git a/gui/logo_button.png b/gui/logo_button.png
new file mode 100644
index 0000000..153424c
Binary files /dev/null and b/gui/logo_button.png differ
diff --git a/gui/side_d_e.png b/gui/side_d_e.png
new file mode 100644
index 0000000..d16eac7
Binary files /dev/null and b/gui/side_d_e.png differ
diff --git a/gui/side_d_ne.png b/gui/side_d_ne.png
new file mode 100644
index 0000000..cc0c810
Binary files /dev/null and b/gui/side_d_ne.png differ
diff --git a/gui/side_d_nw.png b/gui/side_d_nw.png
new file mode 100644
index 0000000..c9169b3
Binary files /dev/null and b/gui/side_d_nw.png differ
diff --git a/gui/side_d_se.png b/gui/side_d_se.png
new file mode 100644
index 0000000..85e9208
Binary files /dev/null and b/gui/side_d_se.png differ
diff --git a/gui/side_d_sw.png b/gui/side_d_sw.png
new file mode 100644
index 0000000..823d7b0
Binary files /dev/null and b/gui/side_d_sw.png differ
diff --git a/gui/side_d_w.png b/gui/side_d_w.png
new file mode 100644
index 0000000..33f4265
Binary files /dev/null and b/gui/side_d_w.png differ
diff --git a/gui/side_e.png b/gui/side_e.png
new file mode 100644
index 0000000..3454692
Binary files /dev/null and b/gui/side_e.png differ
diff --git a/gui/side_e_logo.png b/gui/side_e_logo.png
new file mode 100644
index 0000000..aeada3a
Binary files /dev/null and b/gui/side_e_logo.png differ
diff --git a/gui/side_ne.png b/gui/side_ne.png
new file mode 100644
index 0000000..29456a1
Binary files /dev/null and b/gui/side_ne.png differ
diff --git a/gui/side_nw.png b/gui/side_nw.png
new file mode 100644
index 0000000..2f3a4b8
Binary files /dev/null and b/gui/side_nw.png differ
diff --git a/gui/side_se.png b/gui/side_se.png
new file mode 100644
index 0000000..4a7088a
Binary files /dev/null and b/gui/side_se.png differ
diff --git a/gui/side_sw.png b/gui/side_sw.png
new file mode 100644
index 0000000..572dc33
Binary files /dev/null and b/gui/side_sw.png differ
diff --git a/gui/side_w.png b/gui/side_w.png
new file mode 100644
index 0000000..156ba44
Binary files /dev/null and b/gui/side_w.png differ
diff --git a/gui/toggle1.png b/gui/toggle1.png
index a056e2f..3bd297a 100644
Binary files a/gui/toggle1.png and b/gui/toggle1.png differ
diff --git a/gui/toggle2.png b/gui/toggle2.png
index ea92fcb..88d631a 100644
Binary files a/gui/toggle2.png and b/gui/toggle2.png differ
diff --git a/knobs/knob1.png b/knobs/knob1.png
index 60431da..ec9792e 100644
Binary files a/knobs/knob1.png and b/knobs/knob1.png differ
diff --git a/knobs/knob1.py b/knobs/knob1.py
index 2869584..bca1b95 100755
--- a/knobs/knob1.py
+++ b/knobs/knob1.py
@@ -94,14 +94,14 @@ for variant in range(0, 4):
             if variant == 2: lit = pvalue == 0 or pvalue < lvalue
             if not lit:
                 if not glowlit:
-                    ctx.set_source_rgb(0, 0.1, 0.2)
+                    ctx.set_source_rgb(0.0, 0.1, 0.1)
                 else:
-                    ctx.set_source_rgb(0 * glowval, 0.5 * glowval, 1 * glowval)
+                    ctx.set_source_rgb(0.0 * glowval, 0.75 * glowval, 1.0 * glowval)
             else:
                 if hilite:
-                    ctx.set_source_rgb(0, 1, 1)
+                    ctx.set_source_rgb(0.3, 1.0, 1.0)
                 else:
-                    ctx.set_source_rgb(0, 0.5, 1)
+                    ctx.set_source_rgb(0.0, 0.75, 1.0)
             ctx.set_line_width(2)
             if hilite:
                 ctx.set_line_width(3)
diff --git a/knobs/knob2.png b/knobs/knob2.png
index 0ff93d1..b9b0597 100644
Binary files a/knobs/knob2.png and b/knobs/knob2.png differ
diff --git a/knobs/knob2.py b/knobs/knob2.py
index a11d1b1..64c8297 100755
--- a/knobs/knob2.py
+++ b/knobs/knob2.py
@@ -94,14 +94,14 @@ for variant in range(0, 4):
             if variant == 2: lit = pvalue == 0 or pvalue < lvalue
             if not lit:
                 if not glowlit:
-                    ctx.set_source_rgb(0, 0.1, 0.2)
+                    ctx.set_source_rgb(0.0, 0.1, 0.1)
                 else:
-                    ctx.set_source_rgb(0 * glowval, 0.5 * glowval, 1 * glowval)
+                    ctx.set_source_rgb(0.0 * glowval, 0.75 * glowval, 1.0 * glowval)
             else:
                 if hilite:
-                    ctx.set_source_rgb(0, 1, 1)
+                    ctx.set_source_rgb(0.3, 1.0, 1.0)
                 else:
-                    ctx.set_source_rgb(0, 0.5, 1)
+                    ctx.set_source_rgb(0.0, 0.75, 1.0)
             ctx.set_line_width(3)
             if hilite:
                 ctx.set_line_width(4)
diff --git a/knobs/knob3.png b/knobs/knob3.png
index b63efd6..fb46bf4 100644
Binary files a/knobs/knob3.png and b/knobs/knob3.png differ
diff --git a/knobs/knob3.py b/knobs/knob3.py
index dbdf516..a55af0e 100755
--- a/knobs/knob3.py
+++ b/knobs/knob3.py
@@ -94,14 +94,14 @@ for variant in range(0, 4):
             if variant == 2: lit = pvalue == 0 or pvalue < lvalue
             if not lit:
                 if not glowlit:
-                    ctx.set_source_rgb(0, 0.1, 0.2)
+                    ctx.set_source_rgb(0.0, 0.1, 0.1)
                 else:
-                    ctx.set_source_rgb(0 * glowval, 0.5 * glowval, 1 * glowval)
+                    ctx.set_source_rgb(0.0 * glowval, 0.75 * glowval, 1.0 * glowval)
             else:
                 if hilite:
-                    ctx.set_source_rgb(0, 1, 1)
+                    ctx.set_source_rgb(0.3, 1.0, 1.0)
                 else:
-                    ctx.set_source_rgb(0, 0.5, 1)
+                    ctx.set_source_rgb(0.0, 0.75, 1.0)
             ctx.set_line_width(3)
             if hilite:
                 ctx.set_line_width(4)
diff --git a/knobs/knob4.png b/knobs/knob4.png
index 7817b0c..3da6e84 100644
Binary files a/knobs/knob4.png and b/knobs/knob4.png differ
diff --git a/knobs/knob4.py b/knobs/knob4.py
index 270c605..e9178a7 100755
--- a/knobs/knob4.py
+++ b/knobs/knob4.py
@@ -94,14 +94,14 @@ for variant in range(0, 4):
             if variant == 2: lit = pvalue == 0 or pvalue < lvalue
             if not lit:
                 if not glowlit:
-                    ctx.set_source_rgb(0, 0.1, 0.2)
+                    ctx.set_source_rgb(0.0, 0.1, 0.1)
                 else:
-                    ctx.set_source_rgb(0 * glowval, 0.5 * glowval, 1 * glowval)
+                    ctx.set_source_rgb(0.0 * glowval, 0.75 * glowval, 1.0 * glowval)
             else:
                 if hilite:
-                    ctx.set_source_rgb(0, 1, 1)
+                    ctx.set_source_rgb(0.3, 1.0, 1.0)
                 else:
-                    ctx.set_source_rgb(0, 0.5, 1)
+                    ctx.set_source_rgb(0.0, 0.75, 1.0)
             ctx.set_line_width(3)
             if hilite:
                 ctx.set_line_width(4)
diff --git a/src/calf/ctl_led.h b/src/calf/ctl_led.h
index 2ab5aa9..f9cf426 100644
--- a/src/calf/ctl_led.h
+++ b/src/calf/ctl_led.h
@@ -36,6 +36,7 @@ G_BEGIN_DECLS
 struct CalfLed
 {
     GtkWidget parent;
+    cairo_surface_t *cache_surface;
     int led_mode;
     float led_value;
 };
diff --git a/src/calf/custom_ctl.h b/src/calf/custom_ctl.h
index 1016ac9..b553853 100644
--- a/src/calf/custom_ctl.h
+++ b/src/calf/custom_ctl.h
@@ -81,6 +81,7 @@ struct CalfVUMeter
     long last_hold;
     float last_value;
     cairo_surface_t *cache_surface;
+    cairo_pattern_t *pat;
 };
 
 struct CalfVUMeterClass
diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 87062c5..4ce6639 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -63,7 +63,7 @@ struct filterclavier_metadata: public plugin_metadata<filterclavier_metadata>
 
 struct reverb_metadata: public plugin_metadata<reverb_metadata>
 {
-    enum { par_decay, par_hfdamp, par_roomsize, par_diffusion, par_amount, par_dry, par_predelay, par_basscut, par_treblecut, param_count };
+    enum { par_clip, par_meter_wet, par_meter_out, par_decay, par_hfdamp, par_roomsize, par_diffusion, par_amount, par_dry, par_predelay, par_basscut, par_treblecut, param_count };
     enum { in_count = 2, out_count = 2, support_midi = false, require_midi = false, rt_capable = true };
     PLUGIN_NAME_ID_LABEL("reverb", "reverb", "Reverb")
 };
@@ -78,7 +78,7 @@ struct vintage_delay_metadata: public plugin_metadata<vintage_delay_metadata>
 struct rotary_speaker_metadata: public plugin_metadata<rotary_speaker_metadata>
 {
 public:
-    enum { par_speed, par_spacing, par_shift, par_moddepth, par_treblespeed, par_bassspeed, par_micdistance, par_reflection, param_count };
+    enum { par_speed, par_spacing, par_shift, par_moddepth, par_treblespeed, par_bassspeed, par_micdistance, par_reflection, par_meter_l, par_meter_h, param_count };
     enum { in_count = 2, out_count = 2, support_midi = true, require_midi = false, rt_capable = true };
     PLUGIN_NAME_ID_LABEL("rotary_speaker", "rotaryspeaker", "Rotary Speaker")
 };
diff --git a/src/calf/modules.h b/src/calf/modules.h
index d1545eb..24e77f6 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -203,6 +203,8 @@ public:
     uint32_t srate;
     gain_smoothing amount, dryamount;
     int predelay_amt;
+    float meter_wet, meter_out;
+    uint32_t clip;
     float *ins[in_count]; 
     float *outs[out_count];
     float *params[param_count];
@@ -223,7 +225,9 @@ public:
     }
     uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask) {
         numsamples += offset;
-        
+        meter_wet  -= meter_wet * 2.5 * numsamples / srate;
+        meter_out  -= meter_out * 2.5 * numsamples / srate;
+        clip   -= std::min(clip, numsamples);
         for (uint32_t i = offset; i < numsamples; i++) {
             float dry = dryamount.get();
             float wet = amount.get();
@@ -236,12 +240,32 @@ public:
             reverb.process(rl, rr);
             outs[0][i] = dry*s.left + wet*rl;
             outs[1][i] = dry*s.right + wet*rr;
+            float m_wet = std::max(fabs(wet*rl), fabs(wet*rr));
+            float m_out = std::max(fabs(outs[0][i]), fabs(outs[1][i]));
+            if(m_wet > meter_wet) {
+                meter_wet = m_wet;
+            }
+            if(m_out > meter_out) {
+                meter_out = m_out;
+            }
+            if(outs[0][i] > 1.f or outs[1][i] > 1.f) {
+                clip = srate >> 3;
+            }
         }
         reverb.extra_sanitize();
         left_lo.sanitize();
         left_hi.sanitize();
         right_lo.sanitize();
         right_hi.sanitize();
+        if(params[par_meter_wet] != NULL) {
+            *params[par_meter_wet] = meter_wet;
+        }
+        if(params[par_meter_out] != NULL) {
+            *params[par_meter_out] = meter_out;
+        }
+        if(params[par_clip] != NULL) {
+            *params[par_clip] = clip;
+        }
         return outputs_mask;
     }
     void activate();
@@ -416,7 +440,9 @@ public:
     float maspeed_l;
     /// Current rotation speed for treble rotor - manual mode
     float maspeed_h;
-
+    
+    int meter_l, meter_h;
+    
     rotary_speaker_audio_module();
     void set_sample_rate(uint32_t sr);
     void setup();
@@ -501,7 +527,8 @@ public:
             int xl = pseudo_sine_scl(phase_l), yl = pseudo_sine_scl(phase_l + 0x40000000);
             int xh = pseudo_sine_scl(phase_h), yh = pseudo_sine_scl(phase_h + 0x40000000);
             // printf("%d %d %d\n", shift, pdelta, shift + pdelta + 20 * xl);
-            
+            meter_l = xl;
+            meter_h = xh;
             // float out_hi_l = in_mono - delay.get_interp_1616(shift + md * xh) + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yh) - delay.get_interp_1616(shift + md * 65536 + pdelta + pdelta - md * xh);
             // float out_hi_r = in_mono + delay.get_interp_1616(shift + md * 65536 - md * yh) - delay.get_interp_1616(shift + pdelta + md * xh) + delay.get_interp_1616(shift + pdelta + pdelta + md * yh);
             float out_hi_l = in_mono + delay.get_interp_1616(shift + md * xh) - mix2 * delay.get_interp_1616(shift + md * 65536 + pdelta - md * yh) + mix3 * delay.get_interp_1616(shift + md * 65536 + pdelta + pdelta - md * xh);
@@ -541,6 +568,12 @@ public:
             if (u1 || u2)
                 set_vibrato();
         }
+        if(params[par_meter_l] != NULL) {
+            *params[par_meter_l] = (float)meter_l / 65536.0;
+        }
+        if(params[par_meter_h] != NULL) {
+            *params[par_meter_h] = (float)meter_h / 65536.0;
+        }
         return outputs_mask;
     }
     virtual void control_change(int ctl, int val);
diff --git a/src/ctl_led.cpp b/src/ctl_led.cpp
index 6f3c90f..60c12bc 100644
--- a/src/ctl_led.cpp
+++ b/src/ctl_led.cpp
@@ -38,17 +38,71 @@ calf_led_expose (GtkWidget *widget, GdkEventExpose *event)
     CalfLed *self = CALF_LED(widget);
     GdkWindow *window = widget->window;
     cairo_t *c = gdk_cairo_create(GDK_DRAWABLE(window));
-
-    gdk_cairo_set_source_color(c, &widget->style->bg[0]);
-    cairo_rectangle(c, 0, 0, widget->allocation.width, widget->allocation.height);
-    cairo_fill(c);
-
-    int ox = 2;
-    int oy = 2;
-    int sx = widget->allocation.width - 4;
-    int sy = widget->allocation.height - 4;
+    GtkStyle *style = gtk_widget_get_style(widget);
+    
+    int ox = 4;
+    int oy = 3;
+    int sx = widget->allocation.width - ox * 2;
+    int sy = widget->allocation.height - oy * 2;
     int xc = widget->allocation.width / 2;
     int yc = widget->allocation.height / 2;
+    int pad, rad;
+    
+    if( self->cache_surface == NULL ) {
+        // looks like its either first call or the widget has been resized.
+        // create the cache_surface.
+        cairo_surface_t *window_surface = cairo_get_target( c );
+        self->cache_surface = cairo_surface_create_similar( window_surface, 
+                                  CAIRO_CONTENT_COLOR,
+                                  widget->allocation.width,
+                                  widget->allocation.height );
+        cairo_t *cache_cr = cairo_create( self->cache_surface );
+        
+        // theme background for round borders
+        gdk_cairo_set_source_color(cache_cr,&style->bg[GTK_STATE_NORMAL]);
+        cairo_paint(cache_cr);
+        
+        // outer (light)
+        pad = 0;
+        rad = 6;
+        cairo_arc(cache_cr, rad + pad, rad + pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, ox * 2 + sx - rad - pad, rad + pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, rad + pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, ox * 2 + sx - rad - pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+        cairo_rectangle(cache_cr, pad, rad + pad, sx + ox * 2 - pad * 2, sy + oy * 2 - rad * 2 - pad * 2);
+        cairo_rectangle(cache_cr, rad + pad, pad, sx + ox * 2 - rad * 2 - pad * 2, sy + oy * 2 - pad * 2);
+        cairo_pattern_t *pat2 = cairo_pattern_create_linear (0, 0, 0, sy + oy * 2 - pad * 2);
+        cairo_pattern_add_color_stop_rgba (pat2, 0, 0, 0, 0, 0.3);
+        cairo_pattern_add_color_stop_rgba (pat2, 1, 1, 1, 1, 0.6);
+        cairo_set_source (cache_cr, pat2);
+        cairo_fill(cache_cr);
+        
+        // inner (black)
+        pad = 1;
+        rad = 5;
+        cairo_arc(cache_cr, rad + pad, rad + pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, ox * 2 + sx - rad - pad, rad + pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, rad + pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, ox * 2 + sx - rad - pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+        cairo_rectangle(cache_cr, pad, rad + pad, sx + ox * 2 - pad * 2, sy + oy * 2 - rad * 2 - pad * 2);
+        cairo_rectangle(cache_cr, rad + pad, pad, sx + ox * 2 - rad * 2 - pad * 2, sy + oy * 2 - pad * 2);
+        pat2 = cairo_pattern_create_linear (0, 0, 0, sy + oy * 2 - pad * 2);
+        cairo_pattern_add_color_stop_rgba (pat2, 0, 0.23, 0.23, 0.23, 1);
+        cairo_pattern_add_color_stop_rgba (pat2, 0.5, 0, 0, 0, 1);
+        cairo_set_source (cache_cr, pat2);
+        //cairo_set_source_rgb(cache_cr, 0, 0, 0);
+        cairo_fill(cache_cr);
+        
+        cairo_rectangle(cache_cr, ox, oy, sx, sy);
+        cairo_set_source_rgb (cache_cr, 0, 0, 0);
+        cairo_fill(cache_cr);
+        
+        cairo_destroy( cache_cr );
+    }
+    
+    cairo_set_source_surface( c, self->cache_surface, 0,0 );
+    cairo_paint( c );
+    
     
     cairo_pattern_t *pt = cairo_pattern_create_radial(xc, yc, 0, xc, yc, xc > yc ? xc : yc);
     
@@ -117,18 +171,19 @@ calf_led_expose (GtkWidget *widget, GdkEventExpose *event)
             }
             break;
     }
-    cairo_rectangle(c, ox, oy, sx, sy);
+    
+    cairo_rectangle(c, ox + 1, oy + 1, sx - 2, sy - 2);
+    cairo_set_source (c, pt);
+    cairo_fill_preserve(c);
+    pt = cairo_pattern_create_linear (ox, oy, ox, ox + sy);
+    cairo_pattern_add_color_stop_rgba (pt, 0,     1, 1, 1, 0.4);
+    cairo_pattern_add_color_stop_rgba (pt, 0.4,   1, 1, 1, 0.1);
+    cairo_pattern_add_color_stop_rgba (pt, 0.401, 0, 0, 0, 0.0);
+    cairo_pattern_add_color_stop_rgba (pt, 1,     0, 0, 0, 0.2);
     cairo_set_source (c, pt);
     cairo_fill(c);
     cairo_pattern_destroy(pt);
 
-    cairo_rectangle(c, ox + 0.5, oy + 0.5, sx - 1, sy - 1);
-    cairo_set_source_rgb(c, 0, 0, 0);
-    cairo_set_line_width(c, 1);
-    cairo_stroke(c);
-
-    gtk_paint_shadow(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_IN, NULL, widget, NULL, ox - 2, oy - 2, sx + 4, sy + 4);
-
     cairo_destroy(c);
 
     return TRUE;
@@ -160,8 +215,8 @@ calf_led_size_request (GtkWidget *widget,
 {
     g_assert(CALF_IS_LED(widget));
 
-    requisition->width = 22;
-    requisition->height = 16;
+    requisition->width = 24;
+    requisition->height = 18;
 }
 
 static void
@@ -169,9 +224,14 @@ calf_led_size_allocate (GtkWidget *widget,
                            GtkAllocation *allocation)
 {
     g_assert(CALF_IS_LED(widget));
-
+    CalfLed *led = CALF_LED(widget);
+    
     widget->allocation = *allocation;
-
+    
+    if( led->cache_surface )
+        cairo_surface_destroy( led->cache_surface );
+    led->cache_surface = NULL;
+    
     if (GTK_WIDGET_REALIZED(widget))
         gdk_window_move_resize(widget->window, allocation->x, allocation->y, allocation->width, allocation->height );
 }
@@ -196,9 +256,12 @@ calf_led_class_init (CalfLedClass *klass)
 static void
 calf_led_init (CalfLed *self)
 {
+    GtkWidget *widget = GTK_WIDGET(self);
     // GtkWidget *widget = GTK_WIDGET(self);
     // GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
     self->led_value = 0.f;
+    widget->requisition.width = 24;
+    widget->requisition.height = 18;
 }
 
 void calf_led_set_value(CalfLed *led, float value)
diff --git a/src/custom_ctl.cpp b/src/custom_ctl.cpp
index 9a18af0..529dd2d 100644
--- a/src/custom_ctl.cpp
+++ b/src/custom_ctl.cpp
@@ -69,7 +69,7 @@ calf_line_graph_copy_window_to_cache( CalfLineGraph *lg, cairo_t *c )
 static void
 calf_line_graph_draw_grid( cairo_t *c, std::string &legend, bool vertical, float pos, int phase, int sx, int sy )
 {
-    int ox=2, oy=2;
+    int ox=5, oy=5;
     cairo_text_extents_t tx;
     if (!legend.empty())
         cairo_text_extents(c, legend.c_str(), &tx);
@@ -109,7 +109,7 @@ calf_line_graph_draw_grid( cairo_t *c, std::string &legend, bool vertical, float
 static void
 calf_line_graph_draw_graph( cairo_t *c, float *data, int sx, int sy )
 {
-    int ox=2, oy=2;
+    int ox=5, oy=5;
 
     for (int i = 0; i < 2 * sx; i++)
     {
@@ -131,8 +131,8 @@ calf_line_graph_expose (GtkWidget *widget, GdkEventExpose *event)
 
     CalfLineGraph *lg = CALF_LINE_GRAPH(widget);
     //int ox = widget->allocation.x + 1, oy = widget->allocation.y + 1;
-    int ox = 2, oy = 2;
-    int sx = widget->allocation.width - 4, sy = widget->allocation.height - 4;
+    int ox = 5, oy = 5, rad, pad;
+    int sx = widget->allocation.width - ox * 2, sy = widget->allocation.height - oy * 2;
 
     cairo_t *c = gdk_cairo_create(GDK_DRAWABLE(widget->window));
     GtkStyle *style;
@@ -158,8 +158,7 @@ calf_line_graph_expose (GtkWidget *widget, GdkEventExpose *event)
     cairo_select_font_face(c, "Bitstream Vera Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
     cairo_set_font_size(c, 9);
     gdk_cairo_set_source_color(c, &sc);
-    cairo_rectangle(c, ox, oy, sx, sy);
-    cairo_clip(c);
+    
     cairo_impl cimpl;
     cimpl.context = c;
 
@@ -183,25 +182,60 @@ calf_line_graph_expose (GtkWidget *widget, GdkEventExpose *event)
         if( cache_dirty || (gen_index != lg->last_generation) ) {
             
             cairo_t *cache_cr = cairo_create( lg->cache_surface );
-            cairo_select_font_face(cache_cr, "Bitstream Vera Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
-            cairo_set_font_size(cache_cr, 9);
+        
+            // theme background for round borders
+            style = gtk_widget_get_style(widget);
+            gdk_cairo_set_source_color(cache_cr,&style->bg[GTK_STATE_NORMAL]);
+            cairo_paint(cache_cr);
+            
+            // outer (light)
+            pad = 0;
+            rad = 6;
+            cairo_arc(cache_cr, rad + pad, rad + pad, rad, 0, 2 * M_PI);
+            cairo_arc(cache_cr, ox * 2 + sx - rad - pad, rad + pad, rad, 0, 2 * M_PI);
+            cairo_arc(cache_cr, rad + pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+            cairo_arc(cache_cr, ox * 2 + sx - rad - pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+            cairo_rectangle(cache_cr, pad, rad + pad, sx + ox * 2 - pad * 2, sy + oy * 2 - rad * 2 - pad * 2);
+            cairo_rectangle(cache_cr, rad + pad, pad, sx + ox * 2 - rad * 2 - pad * 2, sy + oy * 2 - pad * 2);
+            cairo_pattern_t *pat2 = cairo_pattern_create_linear (0, 0, 0, sy + oy * 2 - pad * 2);
+            cairo_pattern_add_color_stop_rgba (pat2, 0, 0, 0, 0, 0.3);
+            cairo_pattern_add_color_stop_rgba (pat2, 1, 1, 1, 1, 0.6);
+            cairo_set_source (cache_cr, pat2);
+            cairo_fill(cache_cr);
+            
+            // inner (black)
+            pad = 1;
+            rad = 5;
+            cairo_arc(cache_cr, rad + pad, rad + pad, rad, 0, 2 * M_PI);
+            cairo_arc(cache_cr, ox * 2 + sx - rad - pad, rad + pad, rad, 0, 2 * M_PI);
+            cairo_arc(cache_cr, rad + pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+            cairo_arc(cache_cr, ox * 2 + sx - rad - pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+            cairo_rectangle(cache_cr, pad, rad + pad, sx + ox * 2 - pad * 2, sy + oy * 2 - rad * 2 - pad * 2);
+            cairo_rectangle(cache_cr, rad + pad, pad, sx + ox * 2 - rad * 2 - pad * 2, sy + oy * 2 - pad * 2);
+            pat2 = cairo_pattern_create_linear (0, 0, 0, sy + oy * 2 - pad * 2);
+            cairo_pattern_add_color_stop_rgba (pat2, 0, 0.23, 0.23, 0.23, 1);
+            cairo_pattern_add_color_stop_rgba (pat2, 0.5, 0, 0, 0, 1);
+            cairo_set_source (cache_cr, pat2);
+            cairo_fill(cache_cr);
+            cairo_pattern_destroy(pat2);
+            
+            cairo_rectangle(cache_cr, ox - 1, oy - 1, sx + 2, sy + 2);
+            cairo_set_source_rgb (cache_cr, 0, 0, 0);
+            cairo_fill(cache_cr);
             
             cairo_pattern_t *pt = cairo_pattern_create_linear(ox, oy, ox, sy);
-            cairo_pattern_add_color_stop_rgb(pt, 0.0,     0.69,    0.79,    0.35);
-            cairo_pattern_add_color_stop_rgb(pt, 0.025,   0.84,    0.94,    0.49);
-            cairo_pattern_add_color_stop_rgb(pt, 0.5,     0.78,    0.89,    0.45);
-            cairo_pattern_add_color_stop_rgb(pt, 0.500001,0.76,    0.87,    0.38);
+            cairo_pattern_add_color_stop_rgb(pt, 0.0,     0.44,    0.44,    0.30);
+            cairo_pattern_add_color_stop_rgb(pt, 0.025,   0.89,    0.99,    0.54);
+            cairo_pattern_add_color_stop_rgb(pt, 0.4,     0.78,    0.89,    0.45);
+            cairo_pattern_add_color_stop_rgb(pt, 0.400001,0.71,    0.82,    0.33);
             cairo_pattern_add_color_stop_rgb(pt, 1.0,     0.89,    1.00,    0.45);
-            //gdk_cairo_set_source_color(cache_cr, &sc);
             cairo_set_source (cache_cr, pt);
             cairo_rectangle(cache_cr, ox, oy, sx, sy);
-            cairo_clip_preserve(cache_cr);
-            cairo_fill_preserve(cache_cr);
+            cairo_fill(cache_cr);
+            
+            cairo_select_font_face(cache_cr, "Bitstream Vera Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
+            cairo_set_font_size(cache_cr, 9);
             
-//            cairo_set_source_rgba(cache_cr, 0, 0, 0, 0.5);
-//            cairo_set_line_width(cache_cr, 1);
-//            cairo_stroke(cache_cr);
-
             cairo_impl cache_cimpl;
             cache_cimpl.context = cache_cr;
 
@@ -243,7 +277,9 @@ calf_line_graph_expose (GtkWidget *widget, GdkEventExpose *event)
             calf_line_graph_copy_cache_to_window( lg, c );
         }
 
-
+        cairo_rectangle(c, ox, oy, sx, sy);
+        cairo_clip(c);  
+        
         cairo_set_line_width(c, 1);
         for(int phase = 1; phase <= 2; phase++)
         {
@@ -272,7 +308,6 @@ calf_line_graph_expose (GtkWidget *widget, GdkEventExpose *event)
 
     cairo_destroy(c);
 
-    gtk_paint_shadow(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_IN, NULL, widget, NULL, ox - 2, oy - 2, sx + 4, sy + 4);
     // printf("exposed %p %dx%d %d+%d\n", widget->window, event->area.x, event->area.y, event->area.width, event->area.height);
 
     return TRUE;
@@ -411,11 +446,9 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
 
     CalfVUMeter *vu = CALF_VUMETER(widget);
     GtkStyle	*style;
-    //int ox = widget->allocation.x + 1, oy = widget->allocation.y + 1;
-    int ox = 2, oy = 2;
-    // if only 1 px border:
-    // int sx = widget->allocation.width - 1 - ((widget->allocation.width - 2) % 3), sy = widget->allocation.height - 2;
-    int sx = widget->allocation.width - 4 - ((widget->allocation.width - 2) % 3), sy = widget->allocation.height - 4;
+    
+    int ox = 4, oy = 3, led = 3, inner = 1, rad, pad;
+    int sx = widget->allocation.width - (ox * 2) - ((widget->allocation.width - inner * 2 - ox * 2) % led) - 1, sy = widget->allocation.height - (oy * 2);
     style = gtk_widget_get_style(widget);
     cairo_t *c = gdk_cairo_create(GDK_DRAWABLE(widget->window));
 
@@ -431,15 +464,50 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
         // And render the meterstuff again.
 
         cairo_t *cache_cr = cairo_create( vu->cache_surface );
-        GdkColor sc = { 0, 0, 0, 0 };
+        
+        // theme background for reduced width and round borders
         gdk_cairo_set_source_color(cache_cr,&style->bg[GTK_STATE_NORMAL]);
         cairo_paint(cache_cr);
-        gdk_cairo_set_source_color(cache_cr, &sc);
+        
+        // outer (light)
+        pad = 0;
+        rad = 6;
+        cairo_arc(cache_cr, rad + pad, rad + pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, ox * 2 + sx - rad - pad, rad + pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, rad + pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, ox * 2 + sx - rad - pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+        cairo_rectangle(cache_cr, pad, rad + pad, sx + ox * 2 - pad * 2, sy + oy * 2 - rad * 2 - pad * 2);
+        cairo_rectangle(cache_cr, rad + pad, pad, sx + ox * 2 - rad * 2 - pad * 2, sy + oy * 2 - pad * 2);
+        cairo_pattern_t *pat2 = cairo_pattern_create_linear (0, 0, 0, sy + oy * 2 - pad * 2);
+        cairo_pattern_add_color_stop_rgba (pat2, 0, 0, 0, 0, 0.3);
+        cairo_pattern_add_color_stop_rgba (pat2, 1, 1, 1, 1, 0.6);
+        cairo_set_source (cache_cr, pat2);
+        cairo_fill(cache_cr);
+        
+        // inner (black)
+        pad = 1;
+        rad = 5;
+        cairo_arc(cache_cr, rad + pad, rad + pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, ox * 2 + sx - rad - pad, rad + pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, rad + pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+        cairo_arc(cache_cr, ox * 2 + sx - rad - pad, oy * 2 + sy - rad - pad, rad, 0, 2 * M_PI);
+        cairo_rectangle(cache_cr, pad, rad + pad, sx + ox * 2 - pad * 2, sy + oy * 2 - rad * 2 - pad * 2);
+        cairo_rectangle(cache_cr, rad + pad, pad, sx + ox * 2 - rad * 2 - pad * 2, sy + oy * 2 - pad * 2);
+        pat2 = cairo_pattern_create_linear (0, 0, 0, sy + oy * 2 - pad * 2);
+        cairo_pattern_add_color_stop_rgba (pat2, 0, 0.23, 0.23, 0.23, 1);
+        cairo_pattern_add_color_stop_rgba (pat2, 0.5, 0, 0, 0, 1);
+        cairo_set_source (cache_cr, pat2);
+        //cairo_set_source_rgb(cache_cr, 0, 0, 0);
+        cairo_fill(cache_cr);
+        cairo_pattern_destroy(pat2);
+        
         cairo_rectangle(cache_cr, ox, oy, sx, sy);
+        cairo_set_source_rgb (cache_cr, 0, 0, 0);
         cairo_fill(cache_cr);
+        
         cairo_set_line_width(cache_cr, 1);
 
-        for (int x = ox + 1; x <= ox + sx - 3; x += 3)
+        for (int x = ox + inner; x <= ox + sx - led; x += led)
         {
             float ts = (x - ox) * 1.0 / sx;
             float r = 0.f, g = 0.f, b = 0.f;
@@ -469,19 +537,25 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
             GdkColor sc3 = { 0, (guint16)(65535 * r * 0.7), (guint16)(65535 * g * 0.7), (guint16)(65535 * b * 0.7) };
             gdk_cairo_set_source_color(cache_cr, &sc2);
             cairo_move_to(cache_cr, x + 0.5, oy + 1);
-            cairo_line_to(cache_cr, x + 0.5, oy + sy - 1);
+            cairo_line_to(cache_cr, x + 0.5, oy + sy - inner);
             cairo_stroke(cache_cr);
             gdk_cairo_set_source_color(cache_cr, &sc3);
-            cairo_move_to(cache_cr, x + 1.5, oy + sy - 1);
+            cairo_move_to(cache_cr, x + 1.5, oy + sy - inner);
             cairo_line_to(cache_cr, x + 1.5, oy + 1);
             cairo_stroke(cache_cr);
         }
+        // create blinder pattern
+        vu->pat = cairo_pattern_create_linear (ox, oy, ox, ox + sy);
+        cairo_pattern_add_color_stop_rgba (vu->pat, 0, 0.5, 0.5, 0.5, 0.6);
+        cairo_pattern_add_color_stop_rgba (vu->pat, 0.4, 0, 0, 0, 0.6);
+        cairo_pattern_add_color_stop_rgba (vu->pat, 0.401, 0, 0, 0, 0.8);
+        cairo_pattern_add_color_stop_rgba (vu->pat, 1, 0, 0, 0, 0.6);
         cairo_destroy( cache_cr );
     }
 
     cairo_set_source_surface( c, vu->cache_surface, 0,0 );
     cairo_paint( c );
-    cairo_set_source_rgba( c, 0,0,0, 0.6 );
+    cairo_set_source( c, vu->pat );
 
     float value = vu->value > 1.f ? 1.f : vu->value;
     
@@ -502,14 +576,14 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
                 vu->last_hold = (long)t;
                 vu->holding = true;
             }
-            int hpx = round(vu->last_value * (sx - 2));
-            hpx = hpx + (1 - (hpx + 1) % 3);
-            int vpx = round((1 - value) * (sx - 2));
-            vpx = vpx + (1 - (vpx + 1) % 3);
-            int widthA = std::min(3 + hpx, (sx - 2));
-            int widthB = std::min(std::max((sx - 2) - vpx - 3 - hpx, 0), (sx - 2));
-            cairo_rectangle( c, ox + 1, oy + 1, hpx, sy - 2);
-            cairo_rectangle( c, ox + 1 + widthA, oy + 1, widthB, sy - 2);
+            int hpx = round(vu->last_value * (sx - 2 * inner));
+            hpx = hpx + (1 - (hpx + inner) % led);
+            int vpx = round((1 - value) * (sx - 2 * inner));
+            vpx = vpx + (1 - (vpx + inner) % led);
+            int widthA = std::min(led + hpx, (sx - 2 * inner));
+            int widthB = std::min(std::max((sx - 2 * inner) - vpx - led - hpx, 0), (sx - 2 * inner));
+            cairo_rectangle( c, ox + inner, oy + inner, hpx, sy - 2 * inner);
+            cairo_rectangle( c, ox + inner + widthA, oy + inner, widthB, sy - 2 * inner);
         } else {
             if(value > vu->last_value) {
                 // value is above peak hold
@@ -517,24 +591,24 @@ calf_vumeter_expose (GtkWidget *widget, GdkEventExpose *event)
                 vu->last_hold = (long)t;
                 vu->holding = true;
             }
-            int hpx = round((1 - vu->last_value) * (sx - 2));
-            hpx = hpx + (1 - (hpx + 1) % 3);
-            int vpx = round(value * (sx - 2));
-            vpx = vpx + (1 - (vpx + 1) % 3);
-            int width = std::min(std::max((sx - 2) - vpx - 3 - hpx, 0), (sx - 2));
-            cairo_rectangle( c, ox + 1 + vpx, oy + 1, width, sy - 2);
-            cairo_rectangle( c, ox + 1 + (sx - 2) - hpx, oy + 1, hpx, sy - 2);
+            int hpx = round((1 - vu->last_value) * (sx - 2 * inner));
+            hpx = hpx + (1 - (hpx + inner) % led);
+            int vpx = round(value * (sx - 2 * inner));
+            vpx = vpx + (1 - (vpx + inner) % led);
+            int width = std::min(std::max((sx - 2 * inner) - vpx - led - hpx, 0), (sx - 2 * inner));
+            cairo_rectangle( c, ox + inner + vpx, oy + inner, width, sy - 2 * inner);
+            cairo_rectangle( c, ox + inner + (sx - 2 * inner) - hpx, oy + inner, hpx, sy - 2 * inner);
         }
     } else {
         // darken normally
         if( vu->mode == VU_MONOCHROME_REVERSE )
-            cairo_rectangle( c, ox + 1,oy + 1, value * (sx - 2), sy - 2);
+            cairo_rectangle( c, ox + inner,oy + inner, value * (sx - 2 * inner), sy - 2 * inner);
         else
-            cairo_rectangle( c, ox + 1 + value * (sx - 2), oy + 1, (sx - 2) * (1 - value), sy - 2 );
+            cairo_rectangle( c, ox + inner + value * (sx - 2 * inner), oy + inner, (sx - 2 * inner) * (1 - value), sy - 2 * inner );
     }
     cairo_fill( c );
     cairo_destroy(c);
-    gtk_paint_shadow(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_IN, NULL, widget, NULL, ox - 2, oy - 2, sx + 4, sy + 4);
+    //gtk_paint_shadow(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_IN, NULL, widget, NULL, ox - 2, oy - 2, sx + 4, sy + 4);
     //printf("exposed %p %d+%d\n", widget->window, widget->allocation.x, widget->allocation.y);
 
     return TRUE;
@@ -547,7 +621,7 @@ calf_vumeter_size_request (GtkWidget *widget,
     g_assert(CALF_IS_VUMETER(widget));
 
     requisition->width = 50;
-    requisition->height = 16;
+    requisition->height = 18;
 }
 
 static void
@@ -581,7 +655,7 @@ calf_vumeter_init (CalfVUMeter *self)
     GtkWidget *widget = GTK_WIDGET(self);
     //GTK_WIDGET_SET_FLAGS (widget, GTK_NO_WINDOW);
     widget->requisition.width = 50;
-    widget->requisition.height = 16;
+    widget->requisition.height = 18;
     self->value = 0.5;
     self->last_hold = 0.f;
     self->last_value = 0.f;
@@ -863,11 +937,11 @@ calf_knob_pointer_motion (GtkWidget *widget, GdkEventMotion *event)
         {
             gtk_range_set_value(GTK_RANGE(widget), endless(gtk_range_get_value(GTK_RANGE(widget)) - (event->y - self->last_y) / scale * sens));
         }
-//        else
-//        if (self->knob_type == 1)
-//        {
-//            gtk_range_set_value(GTK_RANGE(widget), deadzone(gtk_range_get_value(GTK_RANGE(widget)), -(event->y - self->last_y) / scale * sens, scale * sens));
-//        }
+        else
+        if (self->knob_type == 1)
+        {
+            gtk_range_set_value(GTK_RANGE(widget), deadzone(gtk_range_get_value(GTK_RANGE(widget)), -(event->y - self->last_y) / scale * sens, scale * sens));
+        }
         else
         {
             gtk_range_set_value(GTK_RANGE(widget), gtk_range_get_value(GTK_RANGE(widget)) - (event->y - self->last_y) / scale * sens);
diff --git a/src/gui.cpp b/src/gui.cpp
index 5cec823..87ecc3c 100644
--- a/src/gui.cpp
+++ b/src/gui.cpp
@@ -381,10 +381,6 @@ GtkWidget *plugin_gui::create_from_xml(plugin_ctl_iface *_plugin, const char *xm
     gtk_table_attach(GTK_TABLE(decoTable), GTK_WIDGET(rightBox),  2, 3, 0, 1, (GtkAttachOptions)(0), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0);
     gtk_table_attach(GTK_TABLE(decoTable), GTK_WIDGET(top_container->container), 1, 2, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 15, 5);
     
-//    GtkWidget *frame = gtk_frame_new(NULL);
-//    gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
-//    gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(decoTable));
-    
     return GTK_WIDGET(decoTable);
 }
 
@@ -633,7 +629,7 @@ void plugin_gui_window::create(plugin_ctl_iface *_jh, const char *title, const c
     gtk_window_set_default_icon_name("calf");
     gtk_widget_set_name(GTK_WIDGET(toplevel), "calf-plugin");
     gtk_window_set_type_hint(toplevel, GDK_WINDOW_TYPE_HINT_DIALOG);
-    GtkVBox *vbox = GTK_VBOX(gtk_vbox_new(false, 5));
+    GtkVBox *vbox = GTK_VBOX(gtk_vbox_new(false, 0));
     
     GtkRequisition req, req2;
     gtk_window_set_title(GTK_WINDOW (toplevel), title);
@@ -672,6 +668,8 @@ void plugin_gui_window::create(plugin_ctl_iface *_jh, const char *title, const c
     gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_NONE);
     gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), GTK_WIDGET(container));
     
+    gtk_widget_set_name(GTK_WIDGET(sw), "calf-container");
+    
     gtk_box_pack_start(GTK_BOX(vbox), sw, true, true, 0);
     
     gtk_widget_show_all(GTK_WIDGET(sw));
diff --git a/src/main_win.cpp b/src/main_win.cpp
index b7b2531..1578d35 100644
--- a/src/main_win.cpp
+++ b/src/main_win.cpp
@@ -101,10 +101,10 @@ void main_window::del_plugin(plugin_ctl_iface *plugin)
         GtkTableChild *c = (GtkTableChild *)p->data;
         if (c->top_attach >= row && c->top_attach < row + 3)
             to_destroy.push_back(c->widget);
-        if (c->top_attach >= row + 3)
+        if (c->top_attach >= row + 4)
         {
-            c->top_attach -= 3;
-            c->bottom_attach -= 3;
+            c->top_attach -= 4;
+            c->bottom_attach -= 4;
         }
     }
     
@@ -116,7 +116,7 @@ void main_window::del_plugin(plugin_ctl_iface *plugin)
     plugins.erase(plugin);
     int rows = 0, cols = 0;
     g_object_get(G_OBJECT(strips_table), "n-rows", &rows, "n-columns", &cols, NULL);
-    gtk_table_resize(GTK_TABLE(strips_table), rows - 3, cols);
+    gtk_table_resize(GTK_TABLE(strips_table), rows - 4, cols);
     /*
     // a hack to remove unneeded vertical space from the window
     // not perfect, as it undoes user's vertical resize
@@ -184,58 +184,156 @@ main_window::plugin_strip *main_window::create_strip(plugin_ctl_iface *plugin)
     
     int row = 0, cols = 0;
     g_object_get(G_OBJECT(strips_table), "n-rows", &row, "n-columns", &cols, NULL);
-    gtk_table_resize(GTK_TABLE(strips_table), row + 3, cols);
-
-    GtkWidget *sep = gtk_hseparator_new();
-    gtk_table_attach(GTK_TABLE(strips_table), sep, 0, 5, row, row + 1, ao, GTK_SHRINK, 0, 0);
-    gtk_widget_show(sep);
-    row++;
+    gtk_table_resize(GTK_TABLE(strips_table), row + 4, cols);
+    
+    // images for left side
+    GtkWidget *nwImg     = gtk_image_new_from_file(PKGLIBDIR "/side_d_nw.png");
+    GtkWidget *swImg     = gtk_image_new_from_file(PKGLIBDIR "/side_d_sw.png");
+    GtkWidget *wImg      = gtk_image_new_from_file(PKGLIBDIR "/side_d_w.png");
+    gtk_widget_set_size_request(GTK_WIDGET(wImg), 56, 1);
+    
+    // images for right side
+    GtkWidget *neImg     = gtk_image_new_from_file(PKGLIBDIR "/side_d_ne.png");
+    GtkWidget *seImg     = gtk_image_new_from_file(PKGLIBDIR "/side_d_se.png");
+    GtkWidget *eImg      = gtk_image_new_from_file(PKGLIBDIR "/side_d_e.png");
+    gtk_widget_set_size_request(GTK_WIDGET(eImg), 56, 1);
+    
+    // pack left box
+    GtkWidget *leftBox = gtk_vbox_new(FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(leftBox), GTK_WIDGET(nwImg), FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(leftBox), GTK_WIDGET(wImg), TRUE, TRUE, 0);
+    gtk_box_pack_end(GTK_BOX(leftBox), GTK_WIDGET(swImg), FALSE, FALSE, 0);
+    gtk_table_attach(GTK_TABLE(strips_table), leftBox, 0, 1, row, row + 4, (GtkAttachOptions)(0), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0);
+    gtk_widget_show_all(GTK_WIDGET(leftBox));
     
-    GtkWidget *label = gtk_toggle_button_new_with_label(plugin->get_label());
-    gtk_table_attach(GTK_TABLE(strips_table), label, 0, 1, row, row + 2, ao, GTK_SHRINK, 0, 0);
+     // pack right box
+    GtkWidget *rightBox = gtk_vbox_new(FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(rightBox), GTK_WIDGET(neImg), FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(rightBox), GTK_WIDGET(eImg), TRUE, TRUE, 0);
+    gtk_box_pack_end(GTK_BOX(rightBox), GTK_WIDGET(seImg), FALSE, FALSE, 0);
+    gtk_table_attach(GTK_TABLE(strips_table), rightBox, 5, 6, row, row + 4, (GtkAttachOptions)(0), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0);
+    gtk_widget_show_all(GTK_WIDGET(rightBox));
+    
+    // top light
+    GtkWidget *topImg     = gtk_image_new_from_file(PKGLIBDIR "/light_top.png");
+    gtk_widget_set_size_request(GTK_WIDGET(topImg), 1, 1);
+    gtk_table_attach(GTK_TABLE(strips_table), topImg, 1, 5, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(0), 0, 0);
+    gtk_widget_show(topImg);
+    row ++;
+    
+    // title @ 1, 1
+    char buf[128];
+    sprintf(buf, "<span size=\"18000\">%s</span>", plugin->get_label());
+    GtkWidget *title = gtk_label_new(NULL);
+    gtk_label_set_markup(GTK_LABEL(title), buf);
+    gtk_table_attach(GTK_TABLE(strips_table), title, 1, 2, row, row + 1, ao, GTK_SHRINK, 20, 10);
+    gtk_widget_show(title);
+    
+    // open button
+    GtkWidget *label = gtk_toggle_button_new_with_label("Open");
     strip->name = label;
     gtk_signal_connect(GTK_OBJECT(label), "toggled", G_CALLBACK(gui_button_pressed), 
         (plugin_ctl_iface *)strip);
     gtk_widget_show(strip->name);
     
-    if (plugin->get_midi())
+    // delete buton
+    GtkWidget *extra = gtk_button_new_with_label("Delete");
+    strip->extra = extra;
+    gtk_signal_connect(GTK_OBJECT(extra), "clicked", G_CALLBACK(extra_button_pressed), 
+        (plugin_ctl_iface *)strip);
+    gtk_widget_show(strip->extra);
+    
+    // button box @ 1, 2
+    GtkWidget *buttonBox = gtk_hbox_new(TRUE, 10);
+    gtk_box_pack_start(GTK_BOX(buttonBox), GTK_WIDGET(strip->name), TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(buttonBox), GTK_WIDGET(strip->extra), TRUE, TRUE, 0);
+    gtk_table_attach(GTK_TABLE(strips_table), buttonBox, 1, 2, row + 1, row + 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK), GTK_EXPAND, 10, 10);
+    gtk_widget_show(buttonBox);
+    
+    // midi box
+    if (plugin->get_midi()) {
         label = calf_led_new();
-    else
+        GtkWidget *midiBox = gtk_vbox_new(FALSE, 1);
+        gtk_box_pack_start(GTK_BOX(midiBox), GTK_WIDGET(gtk_label_new("MIDI")), TRUE, TRUE, 0);
+        gtk_box_pack_start(GTK_BOX(midiBox), GTK_WIDGET(label), TRUE, TRUE, 0);
+        gtk_table_attach(GTK_TABLE(strips_table), midiBox, 2, 3, row, row + 1, GTK_FILL, GTK_EXPAND, 10, 10);
+        gtk_widget_set_size_request(GTK_WIDGET(label), 40, 36);
+        strip->midi_in = label;
+        gtk_widget_show_all(midiBox);
+    } else {
         label = gtk_label_new("");
-    gtk_table_attach(GTK_TABLE(strips_table), label, 1, 2, row, row + 2, GTK_FILL, GTK_SHRINK, 0, 0);
+        gtk_table_attach(GTK_TABLE(strips_table), label, 2, 3, row, row + 1, GTK_FILL, GTK_EXPAND, 10, 10);
+        gtk_widget_set_size_request(GTK_WIDGET(label), 40, 36);
+        strip->midi_in = label;
+        gtk_widget_show(strip->midi_in);
+    }
     strip->midi_in = label;
-    gtk_widget_show(strip->midi_in);
+    
 
     for (int i = 0; i < 2; i++)
         strip->audio_in[i] = strip->audio_out[i] = NULL;
     
+    
     if (plugin->get_input_count() == 2) {
+        
+        GtkWidget *inBox  = gtk_vbox_new(FALSE, 1);
+        
+        gtk_box_pack_start(GTK_BOX(inBox), gtk_label_new("audio in"),TRUE, TRUE, 0);
+        
         label = calf_vumeter_new();
-        gtk_table_attach(GTK_TABLE(strips_table), label, 2, 3, row, row + 1, ao, GTK_SHRINK, 0, 0);
+        gtk_box_pack_start(GTK_BOX(inBox), label,TRUE, TRUE, 0);
         strip->audio_in[0] = label;
+        
         label = calf_vumeter_new();
-        gtk_table_attach(GTK_TABLE(strips_table), label, 2, 3, row + 1, row + 2, ao, GTK_SHRINK, 0, 0);
+        gtk_box_pack_start(GTK_BOX(inBox), label,TRUE, TRUE, 0);
         strip->audio_in[1] = label;
-        gtk_widget_show(strip->audio_in[0]);
-        gtk_widget_show(strip->audio_in[1]);
+        
+        gtk_widget_show_all(inBox);
+        gtk_table_attach(GTK_TABLE(strips_table), inBox, 3, 4, row, row + 1, GTK_FILL, GTK_SHRINK, 10, 5);
+        
+        gtk_widget_set_size_request(GTK_WIDGET(inBox), 160, -1);
     }
 
     if (plugin->get_output_count() == 2) {
+        
+        GtkWidget *outBox  = gtk_vbox_new(FALSE, 1);
+        
+        gtk_box_pack_start(GTK_BOX(outBox), gtk_label_new("audio out"),TRUE, TRUE, 0);
+        
         label = calf_vumeter_new();
-        gtk_table_attach(GTK_TABLE(strips_table), label, 3, 4, row, row + 1, ao, GTK_SHRINK, 0, 0);
+        gtk_box_pack_start(GTK_BOX(outBox), label,TRUE, TRUE, 0);
         strip->audio_out[0] = label;
+        
         label = calf_vumeter_new();
-        gtk_table_attach(GTK_TABLE(strips_table), label, 3, 4, row + 1, row + 2, ao, GTK_SHRINK, 0, 0);
+        gtk_box_pack_start(GTK_BOX(outBox), label,TRUE, TRUE, 0);
         strip->audio_out[1] = label;
-        gtk_widget_show(strip->audio_out[0]);
-        gtk_widget_show(strip->audio_out[1]);
+        
+        gtk_widget_show_all(outBox);
+        gtk_table_attach(GTK_TABLE(strips_table), outBox, 4, 5, row, row + 1, GTK_FILL, GTK_SHRINK, 10, 5);
+        
+        gtk_widget_set_size_request(GTK_WIDGET(outBox), 160, -1);
     }
-    GtkWidget *extra = gtk_button_new_with_label("Delete");
-    gtk_table_attach(GTK_TABLE(strips_table), extra, 4, 5, row, row + 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
-    strip->extra = extra;
-    gtk_signal_connect(GTK_OBJECT(extra), "clicked", G_CALLBACK(extra_button_pressed), 
-        (plugin_ctl_iface *)strip);
-    gtk_widget_show(strip->extra);
+
+    // other stuff bottom right
+    GtkWidget *paramBox = gtk_hbox_new(TRUE, 10);
+    
+    gtk_box_pack_start(GTK_BOX(paramBox), gtk_label_new(NULL), TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(paramBox), gtk_label_new(NULL), TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(paramBox), gtk_label_new(NULL), TRUE, TRUE, 0);
+    
+    GtkWidget *logoImg     = gtk_image_new_from_file(PKGLIBDIR "/logo_button.png");
+    gtk_box_pack_end(GTK_BOX(paramBox), GTK_WIDGET(logoImg), FALSE, FALSE, 0);
+    
+    gtk_table_attach(GTK_TABLE(strips_table), paramBox, 3, 5, row + 1, row + 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 10, 0);
+    gtk_widget_show_all(GTK_WIDGET(paramBox));
+    
+    row += 2;
+    
+    // bottom light
+    GtkWidget *botImg     = gtk_image_new_from_file(PKGLIBDIR "/light_bottom.png");
+    gtk_widget_set_size_request(GTK_WIDGET(botImg), 1, 1);
+    gtk_table_attach(GTK_TABLE(strips_table), botImg, 1, 5, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(0), 0, 0);
+    gtk_widget_show(botImg);
     
     return strip;
 }
@@ -321,7 +419,7 @@ void main_window::create()
     gtk_ui_manager_insert_action_group(ui_mgr, std_actions, 0);
     gtk_ui_manager_add_ui_from_string(ui_mgr, ui_xml, -1, &error);    
     gtk_box_pack_start(GTK_BOX(all_vbox), gtk_ui_manager_get_widget(ui_mgr, "/ui/menubar"), false, false, 0);
-
+    
     plugin_actions = gtk_action_group_new("plugins");
     string plugin_xml = make_plugin_list(plugin_actions);
     gtk_ui_manager_insert_action_group(ui_mgr, plugin_actions, 0);    
@@ -329,13 +427,16 @@ void main_window::create()
 
     
     strips_table = gtk_table_new(1, 6, FALSE);
-    gtk_table_set_col_spacings(GTK_TABLE(strips_table), 10);
-    gtk_table_set_row_spacings(GTK_TABLE(strips_table), 5);
+    gtk_table_set_col_spacings(GTK_TABLE(strips_table), 0);
+    gtk_table_set_row_spacings(GTK_TABLE(strips_table), 0);
+    
+    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new(""), 0, 1, 0, 1, GTK_FILL, GTK_SHRINK, 28, 5);
+    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new("Module"), 1, 2, 0, 1, GTK_FILL, GTK_SHRINK, 70, 5);
+    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new("MIDI"), 2, 3, 0, 1, GTK_FILL, GTK_SHRINK, 10, 5);
+    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new("audio in"), 3, 4, 0, 1, GTK_FILL, GTK_SHRINK, 70, 5);
+    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new("audio out"), 4, 5, 0, 1, GTK_FILL, GTK_SHRINK, 70, 5);
+    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new(""), 5, 6, 0, 1, GTK_FILL, GTK_SHRINK, 28, 5);
     
-    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new("Module"), 0, 1, 0, 1, GTK_FILL, GTK_SHRINK, 0, 0);
-    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new("MIDI In"), 1, 2, 0, 1, GTK_FILL, GTK_SHRINK, 0, 0);
-    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new("Audio In"), 2, 3, 0, 1, GTK_FILL, GTK_SHRINK, 0, 0);
-    gtk_table_attach(GTK_TABLE(strips_table), gtk_label_new("Audio Out"), 3, 4, 0, 1, GTK_FILL, GTK_SHRINK, 0, 0);
     for(GList *p = GTK_TABLE(strips_table)->children; p != NULL; p = p->next)
     {
         GtkTableChild *c = (GtkTableChild *)p->data;
diff --git a/src/modules.cpp b/src/modules.cpp
index 0b08175..e49e977 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -38,9 +38,9 @@ const char *calf_plugins::calf_copyright_info = "(C) 2001-2008 Krzysztof Foltman
 CALF_PORT_NAMES(flanger) = {"In L", "In R", "Out L", "Out R"};
 
 CALF_PORT_PROPS(flanger) = {
-    { 0.1,      0.1, 10,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC | PF_PROP_GRAPH, NULL, "min_delay", "Minimum delay" },
-    { 0.5,      0.1, 10,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "mod_depth", "Modulation depth" },
-    { 0.25,    0.01, 20,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "mod_rate", "Modulation rate" },
+    { 0.1,      0.1, 10,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC | PF_PROP_GRAPH, NULL, "min_delay", "Min delay" },
+    { 0.5,      0.1, 10,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "mod_depth", "Mod depth" },
+    { 0.25,    0.01, 20,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "mod_rate", "Mod rate" },
     { 0.90,   -0.99, 0.99,  0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "feedback", "Feedback" },
     { 0,          0, 360,   9, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "stereo", "Stereo phase" },
     { 0,          0, 1,     2, PF_BOOL | PF_CTL_BUTTON , NULL, "reset", "Reset" },
@@ -56,8 +56,8 @@ CALF_PORT_NAMES(phaser) = {"In L", "In R", "Out L", "Out R"};
 
 CALF_PORT_PROPS(phaser) = {
     { 1000,      20, 20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ | PF_PROP_GRAPH, NULL, "base_freq", "Center Freq" },
-    { 4000,       0, 10800,  0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "mod_depth", "Modulation depth" },
-    { 0.25,    0.01, 20,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "mod_rate", "Modulation rate" },
+    { 4000,       0, 10800,  0, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "mod_depth", "Mod depth" },
+    { 0.25,    0.01, 20,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "mod_rate", "Mod rate" },
     { 0.25,   -0.99, 0.99,  0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "feedback", "Feedback" },
     { 6,          1, 12,   12, PF_INT | PF_SCALE_LINEAR | PF_CTL_KNOB, NULL, "stages", "# Stages" },
     { 180,        0, 360,   9, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "stereo", "Stereo phase" },
@@ -75,6 +75,9 @@ CALF_PORT_NAMES(reverb) = {"In L", "In R", "Out L", "Out R"};
 const char *reverb_room_sizes[] = { "Small", "Medium", "Large", "Tunnel-like", "Large/smooth", "Experimental" };
 
 CALF_PORT_PROPS(reverb) = {
+    { 0,           0,           1,     0,  PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip", "0dB" },
+    { 0,           0,           1,     0,  PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_wet", "Wet amount" },
+    { 0,           0,           1,     0,  PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_out", "Output" },
     { 1.5,      0.4, 15.0,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_SEC, NULL, "decay_time", "Decay time" },
     { 5000,    2000,20000,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ, NULL, "hf_damp", "High Frq Damp" },
     { 2,          0,    5,    0, PF_ENUM | PF_CTL_COMBO , reverb_room_sizes, "room_size", "Room size", },
@@ -172,14 +175,16 @@ CALF_PORT_NAMES(rotary_speaker) = {"In L", "In R", "Out L", "Out R"};
 const char *rotary_speaker_speed_names[] = { "Off", "Chorale", "Tremolo", "HoldPedal", "ModWheel", "Manual" };
 
 CALF_PORT_PROPS(rotary_speaker) = {
-    { 2,         0,  5, 1.01, PF_ENUM | PF_CTL_COMBO, rotary_speaker_speed_names, "vib_speed", "Speed Mode" },
+    { 5,         0,  5, 1.01, PF_ENUM | PF_CTL_COMBO, rotary_speaker_speed_names, "vib_speed", "Speed Mode" },
     { 0.5,        0,    1,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "spacing", "Tap Spacing" },
     { 0.5,        0,    1,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "shift", "Tap Offset" },
     { 0.10,       0,    1,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "mod_depth", "Mod Depth" },
-    { 390,       10,   600,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "treble_speed", "Treble Motor" },
-    { 410,      10,   600,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "bass_speed", "Bass Motor" },
+    { 36,       10,   600,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "treble_speed", "Treble Motor" },
+    { 30,      10,   600,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "bass_speed", "Bass Motor" },
     { 0.7,        0,    1,  101, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "mic_distance", "Mic Distance" },
     { 0.3,        0,    1,  101, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "reflection", "Reflection" },
+    { 0,           0,           1,     0,  PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_l", "Low rotor" },
+    { 0,           0,           1,     0,  PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "meter_h", "High rotor" },
 };
 
 CALF_PLUGIN_INFO(rotary_speaker) = { 0x8483, "RotarySpeaker", "Calf Rotary Speaker", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SimulationPlugin" };
@@ -189,8 +194,8 @@ CALF_PLUGIN_INFO(rotary_speaker) = { 0x8483, "RotarySpeaker", "Calf Rotary Speak
 CALF_PORT_NAMES(multichorus) = {"In L", "In R", "Out L", "Out R"};
 
 CALF_PORT_PROPS(multichorus) = {
-    { 5,        0.1,  10,   0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC | PF_PROP_GRAPH, NULL, "min_delay", "Minimum delay" },
-    { 6,        0.1,  10,   0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC| PF_PROP_GRAPH, NULL, "mod_depth", "Modulation depth" },
+    { 5,        0.1,  10,   0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC | PF_PROP_GRAPH, NULL, "min_delay", "Min delay" },
+    { 6,        0.1,  10,   0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC| PF_PROP_GRAPH, NULL, "mod_depth", "Mod depth" },
     { 0.5,     0.01,  20,   0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_HZ| PF_PROP_GRAPH, NULL, "mod_rate", "Modulation rate" },
     { 180,        0, 360,  91, PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_DEG, NULL, "stereo", "Stereo phase" },
     { 4,          1,   8,   8, PF_INT | PF_SCALE_LINEAR | PF_CTL_FADER, NULL, "voices", "Voices"},
diff --git a/src/modules_dsp.cpp b/src/modules_dsp.cpp
index 16ff4e1..a2f1076 100644
--- a/src/modules_dsp.cpp
+++ b/src/modules_dsp.cpp
@@ -607,8 +607,8 @@ uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples,
         compression = gain;
         gain *= makeup;
 
-        float outL = ins[0][offset] * gain;
-        float outR = ins[1][offset] * gain;
+        float outL = ins[0][offset] * gain * *params[param_input];
+        float outR = ins[1][offset] * gain * *params[param_input];
         
         outs[0][offset] = outL;
         outs[1][offset] = outR;

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list