Fix scroll bars when using negative content area (eg. curve editor)
This commit is contained in:
@@ -1384,9 +1384,7 @@ namespace FlaxEditor.GUI
|
|||||||
// Calculate bounds
|
// Calculate bounds
|
||||||
var bounds = _points[0].Bounds;
|
var bounds = _points[0].Bounds;
|
||||||
for (var i = 1; i < _points.Count; i++)
|
for (var i = 1; i < _points.Count; i++)
|
||||||
{
|
|
||||||
bounds = Rectangle.Union(bounds, _points[i].Bounds);
|
bounds = Rectangle.Union(bounds, _points[i].Bounds);
|
||||||
}
|
|
||||||
|
|
||||||
// Adjust contents bounds to fill the curve area
|
// Adjust contents bounds to fill the curve area
|
||||||
if (EnablePanning != UseMode.Off || !ShowCollapsed)
|
if (EnablePanning != UseMode.Off || !ShowCollapsed)
|
||||||
@@ -2116,9 +2114,7 @@ namespace FlaxEditor.GUI
|
|||||||
// Calculate bounds
|
// Calculate bounds
|
||||||
var bounds = _points[0].Bounds;
|
var bounds = _points[0].Bounds;
|
||||||
for (int i = 1; i < _points.Count; i++)
|
for (int i = 1; i < _points.Count; i++)
|
||||||
{
|
|
||||||
bounds = Rectangle.Union(bounds, _points[i].Bounds);
|
bounds = Rectangle.Union(bounds, _points[i].Bounds);
|
||||||
}
|
|
||||||
|
|
||||||
// Adjust contents bounds to fill the curve area
|
// Adjust contents bounds to fill the curve area
|
||||||
if (EnablePanning != UseMode.Off || !ShowCollapsed)
|
if (EnablePanning != UseMode.Off || !ShowCollapsed)
|
||||||
|
|||||||
@@ -553,7 +553,12 @@ namespace FlaxEngine.GUI
|
|||||||
|
|
||||||
if (vScrollEnabled)
|
if (vScrollEnabled)
|
||||||
{
|
{
|
||||||
VScrollBar.SetScrollRange(scrollBounds.Top, Mathf.Max(Mathf.Max(0, scrollBounds.Top), scrollBounds.Height - height));
|
float max;
|
||||||
|
if (scrollBounds.Top < 0)
|
||||||
|
max = Mathf.Max(scrollBounds.Bottom, scrollBounds.Top + scrollBounds.Height - height);
|
||||||
|
else
|
||||||
|
max = Mathf.Max(scrollBounds.Top, scrollBounds.Height - height);
|
||||||
|
VScrollBar.SetScrollRange(scrollBounds.Top, max);
|
||||||
}
|
}
|
||||||
VScrollBar.Bounds = new Rectangle(Width - _scrollBarsSize, 0, _scrollBarsSize, Height);
|
VScrollBar.Bounds = new Rectangle(Width - _scrollBarsSize, 0, _scrollBarsSize, Height);
|
||||||
}
|
}
|
||||||
@@ -580,7 +585,12 @@ namespace FlaxEngine.GUI
|
|||||||
|
|
||||||
if (hScrollEnabled)
|
if (hScrollEnabled)
|
||||||
{
|
{
|
||||||
HScrollBar.SetScrollRange(scrollBounds.Left, Mathf.Max(Mathf.Max(0, scrollBounds.Left), scrollBounds.Width - width));
|
float max;
|
||||||
|
if (scrollBounds.Left < 0)
|
||||||
|
max = Mathf.Max(scrollBounds.Right, scrollBounds.Left + scrollBounds.Width - width);
|
||||||
|
else
|
||||||
|
max = Mathf.Max(scrollBounds.Left, scrollBounds.Width - width);
|
||||||
|
HScrollBar.SetScrollRange(scrollBounds.Left, max);
|
||||||
}
|
}
|
||||||
HScrollBar.Bounds = new Rectangle(0, Height - _scrollBarsSize, Width - (VScrollBar != null && VScrollBar.Visible ? VScrollBar.Width : 0), _scrollBarsSize);
|
HScrollBar.Bounds = new Rectangle(0, Height - _scrollBarsSize, Width - (VScrollBar != null && VScrollBar.Visible ? VScrollBar.Width : 0), _scrollBarsSize);
|
||||||
}
|
}
|
||||||
@@ -596,17 +606,29 @@ namespace FlaxEngine.GUI
|
|||||||
// Calculate scroll area bounds
|
// Calculate scroll area bounds
|
||||||
var totalMin = Float2.Zero;
|
var totalMin = Float2.Zero;
|
||||||
var totalMax = Float2.Zero;
|
var totalMax = Float2.Zero;
|
||||||
|
var hasTotal = false;
|
||||||
for (int i = 0; i < _children.Count; i++)
|
for (int i = 0; i < _children.Count; i++)
|
||||||
{
|
{
|
||||||
var c = _children[i];
|
var c = _children[i];
|
||||||
if (c.Visible && c.IsScrollable)
|
if (c.Visible && c.IsScrollable)
|
||||||
{
|
{
|
||||||
var min = Float2.Zero;
|
var upperLeft = Float2.Zero;
|
||||||
var max = c.Size;
|
var bottomRight = c.Size;
|
||||||
Matrix3x3.Transform2D(ref min, ref c._cachedTransform, out min);
|
Matrix3x3.Transform2D(ref upperLeft, ref c._cachedTransform, out upperLeft);
|
||||||
Matrix3x3.Transform2D(ref max, ref c._cachedTransform, out max);
|
Matrix3x3.Transform2D(ref bottomRight, ref c._cachedTransform, out bottomRight);
|
||||||
Float2.Min(ref min, ref totalMin, out totalMin);
|
Float2.Min(ref upperLeft, ref bottomRight, out var min);
|
||||||
Float2.Max(ref max, ref totalMax, out totalMax);
|
Float2.Max(ref upperLeft, ref bottomRight, out var max);
|
||||||
|
if (hasTotal)
|
||||||
|
{
|
||||||
|
Float2.Min(ref min, ref totalMin, out totalMin);
|
||||||
|
Float2.Max(ref max, ref totalMax, out totalMax);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
totalMin = min;
|
||||||
|
totalMax = max;
|
||||||
|
hasTotal = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user