ソースを参照

Fixing resizable scrollbar division by zero

BearishSun 9 年 前
コミット
2566f2d5dd

+ 17 - 4
Source/BansheeEngine/Source/BsGUISliderHandle.cpp

@@ -327,14 +327,23 @@ namespace BansheeEngine
 
 						newHandleSize = std::max((INT32)mMinHandleSize, right - newLeft);
 						newLeft = right - newHandleSize;
-						newHandlePos = newLeft / (float)(maxSize - newHandleSize);
+
+						float scrollableSize = (float)(maxSize - newHandleSize);
+						if (scrollableSize > 0.0f)
+							newHandlePos = newLeft / scrollableSize;
+						else
+							newHandlePos = 0.0f;
 					}
 					else // Right resize
 					{
 						INT32 newRight = clickPosPx;
 						newHandleSize = std::max((INT32)mMinHandleSize, std::min(newRight, (INT32)maxSize) - left);
 
-						newHandlePos = left / (float)(maxSize - newHandleSize);
+						float scrollableSize = (float)(maxSize - newHandleSize);
+						if (scrollableSize > 0.0f)
+							newHandlePos = left / scrollableSize;
+						else
+							newHandlePos = 0.0f;
 					}
 
 					_setHandleSize(newHandleSize / (float)maxSize);
@@ -493,8 +502,12 @@ namespace BansheeEngine
 
 	void GUISliderHandle::setHandlePosPx(INT32 pos)
 	{
-		float maxScrollAmount = (float)getMaxSize() - getHandleSize();
-		_setHandlePos(pos / maxScrollAmount);
+		float scrollableSize = (float)getMaxSize() - getHandleSize();
+
+		if (scrollableSize > 0.0f)
+			_setHandlePos(pos / scrollableSize);
+		else
+			_setHandlePos(0.0f);
 	}
 
 	UINT32 GUISliderHandle::getMaxSize() const

+ 2 - 2
Source/MBansheeEditor/Windows/AnimationWindow.cs

@@ -19,7 +19,7 @@ namespace BansheeEditor
     {
         private const int FIELD_DISPLAY_WIDTH = 200;
         private const int DRAG_START_DISTANCE = 3;
-        private const float DRAG_SCALE = 10.0f;
+        private const float DRAG_SCALE = 1.0f;
         private const float ZOOM_SCALE = 0.1f/120.0f; // One scroll step is usually 120 units, we want 1/10 of that
 
         private SceneObject selectedSO;
@@ -399,7 +399,7 @@ namespace BansheeEditor
 
                 Vector2 offset = guiCurveEditor.Offset;
                 offset.x = Math.Max(0.0f, offset.x + dragX);
-                offset.y += dragY;
+                offset.y -= dragY;
                 
                 guiCurveEditor.Offset = offset;
                 UpdateScrollBarSize();