diff --git a/src/kits/interface/ChannelControl.cpp b/src/kits/interface/ChannelControl.cpp index bd4439d2a0..a6907eebe1 100644 --- a/src/kits/interface/ChannelControl.cpp +++ b/src/kits/interface/ChannelControl.cpp @@ -439,7 +439,19 @@ status_t BChannelControl::SetLimitsFor(int32 fromChannel, int32 channelCount, const int32 *minimum, const int32 *maximum) { - return B_ERROR; + if (fromChannel + channelCount > CountChannels()) + channelCount = CountChannels() - fromChannel; + for (int i=0; i maximum[i]) + return B_BAD_VALUE; + fChannelMin[fromChannel + i] = minimum[i]; + fChannelMax[fromChannel + i] = maximum[i]; + if (fChannelValues[fromChannel + i] < minimum[i]) + fChannelValues[fromChannel + i] = minimum[i]; + else if (fChannelValues[fromChannel + i] > maximum[i]) + fChannelValues[fromChannel + i] = maximum[i]; + } + return B_OK; } @@ -447,7 +459,19 @@ status_t BChannelControl::GetLimitsFor(int32 fromChannel, int32 channelCount, int32 *minimum, int32 *maximum) const { - return B_ERROR; + if (minimum == NULL || maximum == NULL) + return B_BAD_VALUE; + + if (fChannelMin == NULL || fChannelMax == NULL) + return B_ERROR; + if (fromChannel + channelCount > CountChannels()) + channelCount = CountChannels() - fromChannel; + for (int i=0; i= 0 && channel < MaxChannelCount()) { float range = ThumbRangeFor(channel); int32 limitRange = MaxLimitList()[channel] - MinLimitList()[channel]; - delta = ValueList()[channel] * range / limitRange; + delta = (ValueList()[channel] - MinLimitList()[channel]) * range / limitRange; if (Vertical()) delta = range - delta; @@ -814,7 +814,7 @@ BChannelSlider::MouseMovedCommon(BPoint point, BPoint point2) else floatValue = range + (point.x - fMinpoint); - int32 value = (int32)(floatValue / range * limitRange); + int32 value = (int32)(floatValue / range * limitRange) + MinLimitList()[fCurrentChannel]; if (fAllChannels) SetAllValue(value); else