diff options
author | David Robillard <d@drobilla.net> | 2013-06-09 05:37:33 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2013-06-09 05:37:33 +0000 |
commit | 0b266cf96ac04eb9052df6d102e5defafc1b30b0 (patch) | |
tree | 67501c3bd482fada731c29ffd8550465bcdb0a84 /src | |
parent | 423bcd39d6c6e8870128df2715a262bc8e59603f (diff) | |
download | ganv-0b266cf96ac04eb9052df6d102e5defafc1b30b0.tar.gz ganv-0b266cf96ac04eb9052df6d102e5defafc1b30b0.tar.bz2 ganv-0b266cf96ac04eb9052df6d102e5defafc1b30b0.zip |
Redraw control slider when range changes.
git-svn-id: http://svn.drobilla.net/lad/trunk/ganv@5139 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src')
-rw-r--r-- | src/port.c | 22 |
1 files changed, 12 insertions, 10 deletions
@@ -32,7 +32,7 @@ static const guchar check_off[] = { 0xE2, 0x98, 0x90, 0 }; static const guchar check_on[] = { 0xE2, 0x98, 0x91, 0 }; static void -ganv_port_update_control_slider(GanvPort* port, float value); +ganv_port_update_control_slider(GanvPort* port, float value, gboolean force); G_DEFINE_TYPE(GanvPort, ganv_port, GANV_TYPE_BOX) @@ -293,7 +293,7 @@ ganv_port_set_width(GanvBox* box, GanvPort* port = GANV_PORT(box); parent_class->set_width(box, width); if (port->impl->control) { - ganv_port_update_control_slider(port, port->impl->control->value); + ganv_port_update_control_slider(port, port->impl->control->value, TRUE); ganv_port_place_value_label(port); } } @@ -498,8 +498,7 @@ ganv_port_set_value_label(GanvPort* port, } static void -ganv_port_update_control_slider(GanvPort* port, - float value) +ganv_port_update_control_slider(GanvPort* port, float value, gboolean force) { GanvPortImpl* impl = port->impl; if (!impl->control) { @@ -525,7 +524,7 @@ ganv_port_update_control_slider(GanvPort* port, value = impl->control->max; } - if (value == impl->control->value) { + if (!force && value == impl->control->value) { return; // No change, do nothing } @@ -550,7 +549,7 @@ ganv_port_set_control_is_toggle(GanvPort* port, { if (port->impl->control) { port->impl->control->is_toggle = is_toggle; - ganv_port_update_control_slider(port, port->impl->control->value); + ganv_port_update_control_slider(port, port->impl->control->value, TRUE); } } @@ -560,7 +559,8 @@ ganv_port_set_control_is_integer(GanvPort* port, { if (port->impl->control) { port->impl->control->is_integer = is_integer; - ganv_port_update_control_slider(port, lrintf(port->impl->control->value)); + const float rounded = rintf(port->impl->control->value); + ganv_port_update_control_slider(port, rounded, TRUE); } } @@ -574,7 +574,7 @@ ganv_port_set_control_value(GanvPort* port, ganv_port_set_value_label( port, (const char*)((value == 0.0f) ? check_off : check_on)); } - ganv_port_update_control_slider(port, value); + ganv_port_update_control_slider(port, value, FALSE); } void @@ -594,11 +594,12 @@ ganv_port_set_control_min(GanvPort* port, float min) { if (port->impl->control) { + const gboolean force = port->impl->control->min != min; port->impl->control->min = min; if (port->impl->control->max < min) { port->impl->control->max = min; } - ganv_port_update_control_slider(port, port->impl->control->value); + ganv_port_update_control_slider(port, port->impl->control->value, force); } } @@ -607,11 +608,12 @@ ganv_port_set_control_max(GanvPort* port, float max) { if (port->impl->control) { + const gboolean force = port->impl->control->max != max; port->impl->control->max = max; if (port->impl->control->min > max) { port->impl->control->min = max; } - ganv_port_update_control_slider(port, port->impl->control->value); + ganv_port_update_control_slider(port, port->impl->control->value, force); } } |