[SCM] calf/master: + Knob: fine adjustments with SHIFT held + ChangeLog: updated
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:37:29 UTC 2013
The following commit has been merged in the master branch:
commit 4cade19bb73695c8465df90ca36c9b1df5e454db
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date: Thu Aug 7 19:43:17 2008 +0000
+ Knob: fine adjustments with SHIFT held
+ ChangeLog: updated
git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@260 78b06b96-2940-0410-b7fc-879d825d01d8
diff --git a/ChangeLog b/ChangeLog
index 5809292..7e82781 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Version 0.0.15 (unreleased)
+
++ Organ: new percussive section, using 2-operator FM synthesis for
+ monophonic or polyphonic percussive attack; added global transpose and
+ detune
++ JACK host: eliminate deadlock on exit
++ GUI: bipolar knobs now have a "dead zone" (magnet) in the middle point
++ GUI: dragging a knob with SHIFT held allows for fine adjustments
++ GUI: new controls - curve editor and keyboard
++ LV2: improved extension support (supports my "extended port properties"
+ extension now)
++ Added some API documentation
+
Version 0.0.14
+ OSC: totally new OSC wrapper, to allow for realtime-safe parsing (doesn't
matter as far as functionality goes, will probably be rewritten again
diff --git a/src/calf/custom_ctl.h b/src/calf/custom_ctl.h
index 9271298..cea65d6 100644
--- a/src/calf/custom_ctl.h
+++ b/src/calf/custom_ctl.h
@@ -80,7 +80,7 @@ struct CalfKnob
{
GtkRange parent;
int knob_type;
- double start_x, start_y, start_value;
+ double start_x, start_y, start_value, last_y;
};
struct CalfKnobClass
diff --git a/src/custom_ctl.cpp b/src/custom_ctl.cpp
index 437ac8c..cef71ac 100644
--- a/src/custom_ctl.cpp
+++ b/src/custom_ctl.cpp
@@ -398,6 +398,7 @@ static gboolean
calf_knob_key_press (GtkWidget *widget, GdkEventKey *event)
{
g_assert(CALF_IS_KNOB(widget));
+ CalfKnob *self = CALF_KNOB(widget);
GtkAdjustment *adj = gtk_range_get_adjustment(GTK_RANGE(widget));
switch(event->keyval)
@@ -418,6 +419,27 @@ calf_knob_key_press (GtkWidget *widget, GdkEventKey *event)
calf_knob_incr(widget, 1);
return TRUE;
+ case GDK_Shift_L:
+ case GDK_Shift_R:
+ self->start_value = gtk_range_get_value(GTK_RANGE(widget));
+ self->start_y = self->last_y;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+calf_knob_key_release (GtkWidget *widget, GdkEventKey *event)
+{
+ g_assert(CALF_IS_KNOB(widget));
+ CalfKnob *self = CALF_KNOB(widget);
+
+ if(event->keyval == GDK_Shift_L || event->keyval == GDK_Shift_R)
+ {
+ self->start_value = gtk_range_get_value(GTK_RANGE(widget));
+ self->start_y = self->last_y;
+ return TRUE;
}
return FALSE;
@@ -457,9 +479,9 @@ static inline float endless(float value)
return fmod(1.f - fmod(1.f - value, 1.f), 1.f);
}
-static inline float deadzone(float value, float incr)
+static inline float deadzone(float value, float incr, float scale)
{
- float dzw = 3 / 32.0;
+ float dzw = 10 / scale;
if (value >= 0.501)
value += dzw;
if (value < 0.499)
@@ -480,22 +502,25 @@ calf_knob_pointer_motion (GtkWidget *widget, GdkEventMotion *event)
g_assert(CALF_IS_KNOB(widget));
CalfKnob *self = CALF_KNOB(widget);
+ float scale = (event->state & GDK_SHIFT_MASK) ? 1000 : 100;
+
if (GTK_WIDGET_HAS_GRAB(widget))
{
if (self->knob_type == 3)
{
- gtk_range_set_value(GTK_RANGE(widget), endless(self->start_value - (event->y - self->start_y) / 100));
+ gtk_range_set_value(GTK_RANGE(widget), endless(self->start_value - (event->y - self->start_y) / scale));
}
else
if (self->knob_type == 1)
{
- gtk_range_set_value(GTK_RANGE(widget), deadzone(self->start_value, -(event->y - self->start_y) / 100));
+ gtk_range_set_value(GTK_RANGE(widget), deadzone(self->start_value, -(event->y - self->start_y) / scale, scale));
}
else
{
- gtk_range_set_value(GTK_RANGE(widget), self->start_value - (event->y - self->start_y) / 100);
+ gtk_range_set_value(GTK_RANGE(widget), self->start_value - (event->y - self->start_y) / scale);
}
}
+ self->last_y = event->y;
return FALSE;
}
@@ -517,6 +542,7 @@ calf_knob_class_init (CalfKnobClass *klass)
widget_class->button_release_event = calf_knob_button_release;
widget_class->motion_notify_event = calf_knob_pointer_motion;
widget_class->key_press_event = calf_knob_key_press;
+ widget_class->key_release_event = calf_knob_key_release;
widget_class->scroll_event = calf_knob_scroll;
GError *error = NULL;
klass->knob_image = gdk_pixbuf_new_from_file(PKGLIBDIR "/knob.png", &error);
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list