[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