void DrawLegend()
{
List <Rect> legendRects = new List <Rect>();
List <AudioCurveWrapper> curves = GetShownAudioCurves();
Rect legendRect = GUILayoutUtility.GetRect(10, 40 * EditorGUIUtility.pixelsPerPoint);
legendRect.x += 4 + EditorGUI.indent;
legendRect.width -= 8 + EditorGUI.indent;
// Graph's position acts as reference for Legends
legendRect.y = m_CurveEditor.rect.y + m_CurveEditor.rect.height + 20;
int width = Mathf.Min(75, Mathf.FloorToInt(legendRect.width / curves.Count));
for (int i = 0; i < curves.Count; i++)
{
legendRects.Add(new Rect(legendRect.x + width * i, legendRect.y, width, legendRect.height));
}
bool resetSelections = false;
if (curves.Count != m_SelectedCurves.Length)
{
m_SelectedCurves = new bool[curves.Count];
resetSelections = true;
}
if (EditorGUIExt.DragSelection(legendRects.ToArray(), ref m_SelectedCurves, GUIStyle.none) || resetSelections)
{
// If none are selected, select all
bool someSelected = false;
for (int i = 0; i < curves.Count; i++)
{
if (m_SelectedCurves[i])
{
someSelected = true;
}
}
if (!someSelected)
{
for (int i = 0; i < curves.Count; i++)
{
m_SelectedCurves[i] = true;
}
}
SyncShownCurvesToLegend(curves);
}
for (int i = 0; i < curves.Count; i++)
{
EditorGUI.DrawLegend(legendRects[i], curves[i].color, curves[i].legend.text, m_SelectedCurves[i]);
if (curves[i].curveProp.hasMultipleDifferentValues)
{
GUI.Button(new Rect(legendRects[i].x, legendRects[i].y + 20, legendRects[i].width, 20), "Different");
}
}
}