private Vector2 Slider2D(Rect rect, Vector2 value, Vector2 maxvalue, Vector2 minvalue, GUIStyle backStyle, GUIStyle thumbStyle)
{
if (backStyle == null)
{
return(value);
}
if (thumbStyle == null)
{
return(value);
}
int controlID = GUIUtility.GetControlID(ColorPicker.s_Slider2Dhash, FocusType.Native);
if (maxvalue.x < minvalue.x)
{
ColorPicker.swap(ref maxvalue.x, ref minvalue.x);
}
if (maxvalue.y < minvalue.y)
{
ColorPicker.swap(ref maxvalue.y, ref minvalue.y);
}
float num = (thumbStyle.fixedHeight != 0f) ? thumbStyle.fixedHeight : ((float)thumbStyle.padding.vertical);
float num2 = (thumbStyle.fixedWidth != 0f) ? thumbStyle.fixedWidth : ((float)thumbStyle.padding.horizontal);
Vector2 vector = new Vector2((rect.width - (float)(backStyle.padding.right + backStyle.padding.left) - num2 * 2f) / (maxvalue.x - minvalue.x), (rect.height - (float)(backStyle.padding.top + backStyle.padding.bottom) - num * 2f) / (maxvalue.y - minvalue.y));
Rect position = new Rect(rect.x + value.x * vector.x + num2 / 2f + (float)backStyle.padding.left - minvalue.x * vector.x, rect.y + value.y * vector.y + num / 2f + (float)backStyle.padding.top - minvalue.y * vector.y, num2, num);
Event current = Event.current;
switch (current.GetTypeForControl(controlID))
{
case EventType.MouseDown:
if (rect.Contains(current.mousePosition))
{
GUIUtility.hotControl = controlID;
value.x = (current.mousePosition.x - rect.x - num2 - (float)backStyle.padding.left) / vector.x + minvalue.x;
value.y = (current.mousePosition.y - rect.y - num - (float)backStyle.padding.top) / vector.y + minvalue.y;
GUI.changed = true;
Event.current.Use();
}
break;
case EventType.MouseUp:
if (GUIUtility.hotControl == controlID)
{
GUIUtility.hotControl = 0;
current.Use();
}
break;
case EventType.MouseDrag:
if (GUIUtility.hotControl == controlID)
{
value.x = (current.mousePosition.x - rect.x - num2 - (float)backStyle.padding.left) / vector.x + minvalue.x;
value.y = (current.mousePosition.y - rect.y - num - (float)backStyle.padding.top) / vector.y + minvalue.y;
value.x = Mathf.Clamp(value.x, minvalue.x, maxvalue.x);
value.y = Mathf.Clamp(value.y, minvalue.y, maxvalue.y);
GUI.changed = true;
Event.current.Use();
}
break;
case EventType.Repaint:
backStyle.Draw(rect, GUIContent.none, controlID);
thumbStyle.Draw(position, GUIContent.none, controlID);
break;
}
return(value);
}