private void GetTrackBarDrawingInfo (TrackBar tb, out float pixels_betweenticks, out Rectangle thumb_area, out Rectangle thumb_pos, out Point channel_startpoint, out Point bottomtick_startpoint, out Point toptick_startpoint)
{
thumb_area = Rectangle.Empty;
thumb_pos = Rectangle.Empty;
if (tb.Orientation == Orientation.Vertical) {
toptick_startpoint = new Point ();
bottomtick_startpoint = new Point ();
channel_startpoint = new Point ();
float pixel_len;
const int space_from_right = 8;
const int space_from_left = 8;
const int space_from_bottom = 11;
Rectangle area = tb.ClientRectangle;
switch (tb.TickStyle) {
case TickStyle.BottomRight:
case TickStyle.None:
channel_startpoint.Y = 8;
channel_startpoint.X = 9;
bottomtick_startpoint.Y = 13;
bottomtick_startpoint.X = 24;
break;
case TickStyle.TopLeft:
channel_startpoint.Y = 8;
channel_startpoint.X = 19;
toptick_startpoint.Y = 13;
toptick_startpoint.X = 8;
break;
case TickStyle.Both:
channel_startpoint.Y = 8;
channel_startpoint.X = 18;
bottomtick_startpoint.Y = 13;
bottomtick_startpoint.X = 32;
toptick_startpoint.Y = 13;
toptick_startpoint.X = 8;
break;
default:
break;
}
thumb_area.X = area.X + channel_startpoint.X;
thumb_area.Y = area.Y + channel_startpoint.Y;
thumb_area.Height = area.Height - space_from_right - space_from_left;
thumb_area.Width = TrackBarVerticalTrackWidth;
pixel_len = thumb_area.Height - 11;
if (tb.Maximum == tb.Minimum) {
pixels_betweenticks = 0;
} else {
pixels_betweenticks = pixel_len / (tb.Maximum - tb.Minimum);
}
thumb_pos.Y = thumb_area.Bottom - space_from_bottom - (int)(pixels_betweenticks * (float)(tb.Value - tb.Minimum));
} else {
toptick_startpoint = new Point ();
bottomtick_startpoint = new Point ();
channel_startpoint = new Point ();
float pixel_len;
const int space_from_right = 8;
const int space_from_left = 8;
Rectangle area = tb.ClientRectangle;
switch (tb.TickStyle) {
case TickStyle.BottomRight:
case TickStyle.None:
channel_startpoint.X = 8;
channel_startpoint.Y = 9;
bottomtick_startpoint.X = 13;
bottomtick_startpoint.Y = 24;
break;
case TickStyle.TopLeft:
channel_startpoint.X = 8;
channel_startpoint.Y = 19;
toptick_startpoint.X = 13;
toptick_startpoint.Y = 8;
break;
case TickStyle.Both:
channel_startpoint.X = 8;
channel_startpoint.Y = 18;
bottomtick_startpoint.X = 13;
bottomtick_startpoint.Y = 32;
toptick_startpoint.X = 13;
toptick_startpoint.Y = 8;
break;
default:
break;
}
thumb_area.X = area.X + channel_startpoint.X;
thumb_area.Y = area.Y + channel_startpoint.Y;
thumb_area.Width = area.Width - space_from_right - space_from_left;
thumb_area.Height = TrackBarHorizontalTrackHeight;
pixel_len = thumb_area.Width - 11;
if (tb.Maximum == tb.Minimum) {
pixels_betweenticks = 0;
} else {
pixels_betweenticks = pixel_len / (tb.Maximum - tb.Minimum);
}
thumb_pos.X = channel_startpoint.X + (int)(pixels_betweenticks * (float) (tb.Value - tb.Minimum));
}
thumb_pos.Size = TrackBarGetThumbSize (tb);
}