[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