- 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
![](https://koobas.hobune.stream/wayback/20220612134449im_/https://answers.unity.com/themes/thub/images/avi.jpg)
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