- Home /
Issue with custom editor window zooming feature
Hi! I am trying to create a custom horizontal zooming feature for a custom editor window. The editor window has time labels across the top. I am using the scroll wheel for my zooming feature and I have noticed if I zoom out really fast sometimes my labels will flip backwards. Instead of going in the direction I want them to they go in the opposite direction. I'm assuming somehow my labelspacing is becoming less than 1. Here is my code :
private int ZoomLevel = 1;
private int MinZoomLevel = 1;
private int MaxZoomLevel = 22;
private int LabelSpacing = 6;
private void OnGUI(){
....
TimeLabels();
if (Event.current.type == EventType.ScrollWheel)
{
AdjustZoomLevel(Event.current);
}
}
private void TimeLabels()
{
if (Event.current.type == EventType.Repaint)
{
float DisplayNum = 0;
float Mod5NumCounter = 0;
for (int i = 0; i < EffectWindow.position.width + MaxHorizontalScrollValue; i += 2)
{
if (i == 0)
{
Handles.DrawLine(new Vector3(LabelsStartingPointX, LabelLineStartingY), new Vector3(LabelsStartingPointX, Label10thLineHeightY));
GUI.Label(new Rect(LabelsStartingPointX, NumberLabelsY, NumberLabelsWidth, NumberLabelsHeight), DisplayNum.ToString());
}
else
{
Mod5NumCounter++;
if (Mod5NumCounter == 5)
{
Handles.DrawLine(new Vector3((LabelsStartingPointX + (i * LabelSpacing)), LabelLineStartingY), new Vector3((LabelsStartingPointX + (i * LabelSpacing)), Label5thLineHeightY));
}
else if (Mod5NumCounter == 10)
{
Handles.DrawLine(new Vector3((LabelsStartingPointX + (i * LabelSpacing)), LabelLineStartingY), new Vector3((LabelsStartingPointX + (i * LabelSpacing)), Label10thLineHeightY));
if (ZoomLevel < 4 )
{
DisplayNum += 0.5f; //10f;
}
else if (ZoomLevel >= 4 && ZoomLevel < 10)
{
DisplayNum += 0.1f;
DisplayNum = (float)Math.Round(DisplayNum, 2);
}
else if (ZoomLevel >= 10 && ZoomLevel < 16)
{
DisplayNum += 0.05f;
DisplayNum = (float)Math.Round(DisplayNum, 2);
}
else if (ZoomLevel >=16)
{
DisplayNum += 0.01f;
DisplayNum = (float)Math.Round(DisplayNum, 2);
}
GUI.Label(new Rect(LabelsStartingPointX + (i * LabelSpacing), NumberLabelsY, NumberLabelsWidth, NumberLabelsHeight), DisplayNum.ToString());
Mod5NumCounter = 0;
}
else
{
Handles.DrawLine(new Vector3((LabelsStartingPointX + (i * LabelSpacing)), LabelLineStartingY), new Vector3((LabelsStartingPointX + (i * LabelSpacing)), Labels1sLineHeightY));
}
}
}
}
}
private void AdjustZoomLevel(Event current)
{
if(ZoomLevel == MinZoomLevel && Event.current.delta.y > 0)
{
current.Use();
return;
}
else if (ZoomLevel == MaxZoomLevel && Event.current.delta.y < 0)
{
current.Use();
return;
}
LabelSpacing -= Event.current.delta.y;
if (Event.current.delta.y > 0)
{//zoom out
ZoomLevel -= 1;
if(ZoomLevel == 3)
{
LabelSpacing = 12;
}
else if (ZoomLevel == 4)
{
LabelSpacing = 3;
}
else if(ZoomLevel == 9)
{
LabelSpacing = 18;
}
else if (ZoomLevel == 10)
{
LabelSpacing = 3;
}
else if (ZoomLevel == 15)
{
LabelSpacing = 18;
}
else if (ZoomLevel == 16)
{
LabelSpacing = 3;
}
}
else
{//zoom in
ZoomLevel += 1;
if(ZoomLevel == 3)
{
LabelSpacing = 12;
}
if (ZoomLevel == 4)
{
LabelSpacing = 3;
}
else if(ZoomLevel == 9)
{
LabelSpacing = 18;
}
else if (ZoomLevel == 10)
{
LabelSpacing = 3;
}
else if (ZoomLevel == 15)
{
LabelSpacing = 18;
}
else if (ZoomLevel == 16)
{
LabelSpacing = 3;
}
}
......
current.Use();
}
Now I may just be doing something stupid but it isn't always the same zoom level where things begin to go wrong. Any and all help is greatly appreciated!
Your answer
Follow this Question
Related Questions
How do I make a progress bar in the editor lock the background? 0 Answers
Editor GUI Foldout header style customization 0 Answers
Unity editor extension - create drag and drop (similar to Buildbox) 1 Answer
Is there a way to avoid the Animation window drop-down menu with a selected Animator? 0 Answers
Is it possible to detect drag and drop in hierachy window? 0 Answers