public override int TrackBarValueFromMousePosition (int x, int y, TrackBar tb)
{
int result = tb.Value;
int value_pos = tb.Value;
float pixels_betweenticks;
Rectangle thumb_pos = Rectangle.Empty, thumb_area = Rectangle.Empty;
Point channel_startpoint = Point.Empty, na_point = Point.Empty;
GetTrackBarDrawingInfo (tb, out pixels_betweenticks, out thumb_area, out thumb_pos, out channel_startpoint, out na_point, out na_point);
/* Convert thumb position from mouse position to value*/
if (tb.Orientation == Orientation.Vertical) {
value_pos = (int)Math.Round (((thumb_area.Bottom - y - (float)thumb_pos.Height / 2) / (float)pixels_betweenticks), 0);
if (value_pos + tb.Minimum > tb.Maximum)
value_pos = tb.Maximum - tb.Minimum;
else if (value_pos + tb.Minimum < tb.Minimum)
value_pos = 0;
result = value_pos + tb.Minimum;
} else {
value_pos = (int)Math.Round (((x - channel_startpoint.X - (float)thumb_pos.Width / 2) / (float) pixels_betweenticks), 0);
if (value_pos + tb.Minimum > tb.Maximum)
value_pos = tb.Maximum - tb.Minimum;
else if (value_pos + tb.Minimum < tb.Minimum)
value_pos = 0;
result = value_pos + tb.Minimum;
}
return result;
}