[SCM] calf/master: + Tube, Knob: fix knob dead zone logic, update requested sizes for tube widget
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:39:46 UTC 2013
The following commit has been merged in the master branch:
commit 91f25c5fbb9cec3124447d278c8953a213b258db
Author: Markus Schmidt <schmidt at boomshop.net>
Date: Mon Nov 9 19:38:16 2009 +0000
+ Tube, Knob: fix knob dead zone logic, update requested sizes for tube widget
diff --git a/src/custom_ctl.cpp b/src/custom_ctl.cpp
index 4ddf32c..6620284 100644
--- a/src/custom_ctl.cpp
+++ b/src/custom_ctl.cpp
@@ -972,21 +972,24 @@ 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, float scale)
+static inline float deadzone(GtkWidget *widget, float value, float incr, float scale)
{
- float dzw = 2 / scale;
- if (value >= 0.5 + dzw)
- value += dzw;
- if (value < 0.5 - dzw)
- value -= dzw;
-
- value += incr;
-
- if (value >= (0.5 - dzw) && value <= (0.5 + dzw))
- return 0.5;
- if (value < 0.5)
- return value + dzw;
- return value - dzw;
+ CalfKnob *self = CALF_KNOB(widget);
+ float dz = 20 / scale;
+ if(self->last_dz < 0.f) {
+ self -> last_dz = value + incr;
+ } else if (self->last_dz > 1.f) {
+ self->last_dz = 1.f;
+ } else {
+ self->last_dz += incr;
+ }
+ if(self->last_dz > 0.5 + dz) {
+ return std::min(0.5 + (self->last_dz - 0.5 - dz) * 0.5 / (0.5 - dz), (double)1);
+ }
+ if(self->last_dz < 0.5 - dz) {
+ return std::max(self->last_dz * 0.5 / (0.5 - dz), (double)0);
+ }
+ return 0.5;
}
static gboolean
@@ -1008,7 +1011,7 @@ calf_knob_pointer_motion (GtkWidget *widget, GdkEventMotion *event)
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)));
+ gtk_range_set_value(GTK_RANGE(widget), deadzone(GTK_WIDGET(widget), gtk_range_get_value(GTK_RANGE(widget)), -(event->y - self->last_y) / (scale * sens), (scale * sens)));
}
else
{
@@ -1057,6 +1060,7 @@ calf_knob_init (CalfKnob *self)
GTK_WIDGET_SET_FLAGS (GTK_WIDGET(self), GTK_CAN_FOCUS);
widget->requisition.width = 40;
widget->requisition.height = 40;
+ self->last_dz = -1.f;
}
GtkWidget *
@@ -1398,14 +1402,14 @@ calf_tube_expose (GtkWidget *widget, GdkEventExpose *event)
switch(self->direction) {
case 1:
// vertical
- cairo_arc(c, ox + sx * 0.5, oy + sy * 0.3, sx, 0, 2 * M_PI);
- pat = cairo_pattern_create_radial (ox + sx * 0.5, oy + sy * 0.3, 3, ox + sx * 0.5, oy + sy * 0.3, sx);
+ cairo_arc(c, ox + sx * 0.5, oy + sy * 0.2, sx, 0, 2 * M_PI);
+ pat = cairo_pattern_create_radial (ox + sx * 0.5, oy + sy * 0.2, 3, ox + sx * 0.5, oy + sy * 0.2, sx);
break;
default:
case 2:
// horizontal
- cairo_arc(c, ox + sx * 0.7, oy + sy * 0.5, sy, 0, 2 * M_PI);
- pat = cairo_pattern_create_radial (ox + sx * 0.7, oy + sy * 0.5, 3, ox + sx * 0.7, oy + sy * 0.5, sy);
+ cairo_arc(c, ox + sx * 0.8, oy + sy * 0.5, sy, 0, 2 * M_PI);
+ pat = cairo_pattern_create_radial (ox + sx * 0.8, oy + sy * 0.5, 3, ox + sx * 0.8, oy + sy * 0.5, sy);
break;
}
cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, value);
@@ -1418,14 +1422,14 @@ calf_tube_expose (GtkWidget *widget, GdkEventExpose *event)
switch(self->direction) {
case 1:
// vertical
- cairo_arc(c, ox + sx * 0.5, oy + sy * 0.8, sx / 2, 0, 2 * M_PI);
- pat = cairo_pattern_create_radial (ox + sx * 0.5, oy + sy * 0.8, 2, ox + sx * 0.5, oy + sy * 0.8, sx / 2);
+ cairo_arc(c, ox + sx * 0.5, oy + sy * 0.75, sx / 2, 0, 2 * M_PI);
+ pat = cairo_pattern_create_radial (ox + sx * 0.5, oy + sy * 0.75, 2, ox + sx * 0.5, oy + sy * 0.75, sx / 2);
break;
default:
case 2:
// horizontal
- cairo_arc(c, ox + sx / 5, oy + sy * 0.5, sy / 2, 0, 2 * M_PI);
- pat = cairo_pattern_create_radial (ox + sx / 5, oy + sy * 0.5, 2, ox + sx / 5, oy + sy * 0.5, sy / 2);
+ cairo_arc(c, ox + sx * 0.25, oy + sy * 0.5, sy / 2, 0, 2 * M_PI);
+ pat = cairo_pattern_create_radial (ox + sx * 0.25, oy + sy * 0.5, 2, ox + sx * 0.25, oy + sy * 0.5, sy / 2);
break;
}
cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, value);
@@ -1434,7 +1438,7 @@ calf_tube_expose (GtkWidget *widget, GdkEventExpose *event)
cairo_pattern_add_color_stop_rgba (pat, 1, 0.0, 0.2, 0.7, 0);
cairo_set_source (c, pat);
cairo_fill(c);
-
+ cairo_destroy(c);
return TRUE;
}
@@ -1449,12 +1453,12 @@ calf_tube_size_request (GtkWidget *widget,
case 1:
switch(self->size) {
case 1:
- widget->requisition.width = 70;
+ widget->requisition.width = 82;
widget->requisition.height = 130;
break;
default:
case 2:
- widget->requisition.width = 110;
+ widget->requisition.width = 130;
widget->requisition.height = 210;
break;
}
@@ -1464,12 +1468,12 @@ calf_tube_size_request (GtkWidget *widget,
switch(self->size) {
case 1:
widget->requisition.width = 130;
- widget->requisition.height = 70;
+ widget->requisition.height = 82;
break;
default:
case 2:
widget->requisition.width = 210;
- widget->requisition.height = 110;
+ widget->requisition.height = 130;
break;
}
break;
@@ -1511,12 +1515,12 @@ calf_tube_init (CalfTube *self)
case 1:
switch(self->size) {
case 1:
- widget->requisition.width = 70;
+ widget->requisition.width = 82;
widget->requisition.height = 130;
break;
default:
case 2:
- widget->requisition.width = 110;
+ widget->requisition.width = 130;
widget->requisition.height = 210;
break;
}
@@ -1526,12 +1530,12 @@ calf_tube_init (CalfTube *self)
switch(self->size) {
case 1:
widget->requisition.width = 130;
- widget->requisition.height = 70;
+ widget->requisition.height = 82;
break;
default:
case 2:
widget->requisition.width = 210;
- widget->requisition.height = 110;
+ widget->requisition.height = 130;
break;
}
break;
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list