Updated ScrollPanelWidget to handle Scrollbar alignment
This commit is contained in:
@@ -29,6 +29,13 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
Top
|
Top
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum ScrollBar
|
||||||
|
{
|
||||||
|
Left,
|
||||||
|
Right,
|
||||||
|
Hidden
|
||||||
|
}
|
||||||
|
|
||||||
public class ScrollPanelWidget : Widget
|
public class ScrollPanelWidget : Widget
|
||||||
{
|
{
|
||||||
readonly Ruleset modRules;
|
readonly Ruleset modRules;
|
||||||
@@ -39,11 +46,13 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
public int ButtonDepth = ChromeMetrics.Get<int>("ButtonDepth");
|
public int ButtonDepth = ChromeMetrics.Get<int>("ButtonDepth");
|
||||||
public string ClickSound = ChromeMetrics.Get<string>("ClickSound");
|
public string ClickSound = ChromeMetrics.Get<string>("ClickSound");
|
||||||
public string Background = "scrollpanel-bg";
|
public string Background = "scrollpanel-bg";
|
||||||
|
public string ScrollBarBackground = "scrollpanel-bg";
|
||||||
public string Button = "scrollpanel-button";
|
public string Button = "scrollpanel-button";
|
||||||
public int ContentHeight;
|
public int ContentHeight;
|
||||||
public ILayout Layout;
|
public ILayout Layout;
|
||||||
public int MinimumThumbSize = 10;
|
public int MinimumThumbSize = 10;
|
||||||
public ScrollPanelAlign Align = ScrollPanelAlign.Top;
|
public ScrollPanelAlign Align = ScrollPanelAlign.Top;
|
||||||
|
public ScrollBar ScrollBar = ScrollBar.Right;
|
||||||
public bool CollapseHiddenChildren;
|
public bool CollapseHiddenChildren;
|
||||||
|
|
||||||
// Fraction of the remaining scroll-delta to move in 40ms
|
// Fraction of the remaining scroll-delta to move in 40ms
|
||||||
@@ -145,34 +154,55 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
if (thumbHeight == scrollbarHeight)
|
if (thumbHeight == scrollbarHeight)
|
||||||
thumbHeight = 0;
|
thumbHeight = 0;
|
||||||
|
|
||||||
backgroundRect = new Rectangle(rb.X, rb.Y, rb.Width - ScrollbarWidth + 1, rb.Height);
|
switch (ScrollBar)
|
||||||
upButtonRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Y, ScrollbarWidth, ScrollbarWidth);
|
{
|
||||||
downButtonRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Bottom - ScrollbarWidth, ScrollbarWidth, ScrollbarWidth);
|
case ScrollBar.Left:
|
||||||
scrollbarRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Y + ScrollbarWidth - 1, ScrollbarWidth, scrollbarHeight + 2);
|
backgroundRect = new Rectangle(rb.X + ScrollbarWidth, rb.Y, rb.Width + 1, rb.Height);
|
||||||
thumbRect = new Rectangle(rb.Right - ScrollbarWidth, thumbOrigin, ScrollbarWidth, thumbHeight);
|
upButtonRect = new Rectangle(rb.X, rb.Y, ScrollbarWidth, ScrollbarWidth);
|
||||||
|
downButtonRect = new Rectangle(rb.X, rb.Bottom - ScrollbarWidth, ScrollbarWidth, ScrollbarWidth);
|
||||||
|
scrollbarRect = new Rectangle(rb.X, rb.Y + ScrollbarWidth - 1, ScrollbarWidth, scrollbarHeight + 2);
|
||||||
|
thumbRect = new Rectangle(rb.X, thumbOrigin, ScrollbarWidth, thumbHeight);
|
||||||
|
break;
|
||||||
|
case ScrollBar.Right:
|
||||||
|
backgroundRect = new Rectangle(rb.X, rb.Y, rb.Width - ScrollbarWidth + 1, rb.Height);
|
||||||
|
upButtonRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Y, ScrollbarWidth, ScrollbarWidth);
|
||||||
|
downButtonRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Bottom - ScrollbarWidth, ScrollbarWidth, ScrollbarWidth);
|
||||||
|
scrollbarRect = new Rectangle(rb.Right - ScrollbarWidth, rb.Y + ScrollbarWidth - 1, ScrollbarWidth, scrollbarHeight + 2);
|
||||||
|
thumbRect = new Rectangle(rb.Right - ScrollbarWidth, thumbOrigin, ScrollbarWidth, thumbHeight);
|
||||||
|
break;
|
||||||
|
case ScrollBar.Hidden:
|
||||||
|
backgroundRect = new Rectangle(rb.X, rb.Y, rb.Width + 1, rb.Height);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
|
||||||
var upHover = Ui.MouseOverWidget == this && upButtonRect.Contains(Viewport.LastMousePos);
|
|
||||||
upDisabled = thumbHeight == 0 || currentListOffset >= 0;
|
|
||||||
|
|
||||||
var downHover = Ui.MouseOverWidget == this && downButtonRect.Contains(Viewport.LastMousePos);
|
|
||||||
downDisabled = thumbHeight == 0 || currentListOffset <= Bounds.Height - ContentHeight;
|
|
||||||
|
|
||||||
var thumbHover = Ui.MouseOverWidget == this && thumbRect.Contains(Viewport.LastMousePos);
|
|
||||||
WidgetUtils.DrawPanel(Background, backgroundRect);
|
WidgetUtils.DrawPanel(Background, backgroundRect);
|
||||||
WidgetUtils.DrawPanel(Background, scrollbarRect);
|
|
||||||
ButtonWidget.DrawBackground(Button, upButtonRect, upDisabled, upPressed, upHover, false);
|
|
||||||
ButtonWidget.DrawBackground(Button, downButtonRect, downDisabled, downPressed, downHover, false);
|
|
||||||
|
|
||||||
if (thumbHeight > 0)
|
if (ScrollBar != ScrollBar.Hidden)
|
||||||
ButtonWidget.DrawBackground(Button, thumbRect, false, HasMouseFocus && thumbHover, thumbHover, false);
|
{
|
||||||
|
var upHover = Ui.MouseOverWidget == this && upButtonRect.Contains(Viewport.LastMousePos);
|
||||||
|
upDisabled = thumbHeight == 0 || currentListOffset >= 0;
|
||||||
|
|
||||||
var upOffset = !upPressed || upDisabled ? 4 : 4 + ButtonDepth;
|
var downHover = Ui.MouseOverWidget == this && downButtonRect.Contains(Viewport.LastMousePos);
|
||||||
var downOffset = !downPressed || downDisabled ? 4 : 4 + ButtonDepth;
|
downDisabled = thumbHeight == 0 || currentListOffset <= Bounds.Height - ContentHeight;
|
||||||
|
|
||||||
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", upPressed || upDisabled ? "up_pressed" : "up_arrow"),
|
var thumbHover = Ui.MouseOverWidget == this && thumbRect.Contains(Viewport.LastMousePos);
|
||||||
new float2(upButtonRect.Left + upOffset, upButtonRect.Top + upOffset));
|
WidgetUtils.DrawPanel(ScrollBarBackground, scrollbarRect);
|
||||||
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", downPressed || downDisabled ? "down_pressed" : "down_arrow"),
|
ButtonWidget.DrawBackground(Button, upButtonRect, upDisabled, upPressed, upHover, false);
|
||||||
new float2(downButtonRect.Left + downOffset, downButtonRect.Top + downOffset));
|
ButtonWidget.DrawBackground(Button, downButtonRect, downDisabled, downPressed, downHover, false);
|
||||||
|
|
||||||
|
if (thumbHeight > 0)
|
||||||
|
ButtonWidget.DrawBackground(Button, thumbRect, false, HasMouseFocus && thumbHover, thumbHover, false);
|
||||||
|
|
||||||
|
var upOffset = !upPressed || upDisabled ? 4 : 4 + ButtonDepth;
|
||||||
|
var downOffset = !downPressed || downDisabled ? 4 : 4 + ButtonDepth;
|
||||||
|
|
||||||
|
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", upPressed || upDisabled ? "up_pressed" : "up_arrow"),
|
||||||
|
new float2(upButtonRect.Left + upOffset, upButtonRect.Top + upOffset));
|
||||||
|
WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", downPressed || downDisabled ? "down_pressed" : "down_arrow"),
|
||||||
|
new float2(downButtonRect.Left + downOffset, downButtonRect.Top + downOffset));
|
||||||
|
}
|
||||||
|
|
||||||
var drawBounds = backgroundRect.InflateBy(-BorderWidth, -BorderWidth, -BorderWidth, -BorderWidth);
|
var drawBounds = backgroundRect.InflateBy(-BorderWidth, -BorderWidth, -BorderWidth, -BorderWidth);
|
||||||
Game.Renderer.EnableScissor(drawBounds);
|
Game.Renderer.EnableScissor(drawBounds);
|
||||||
@@ -189,7 +219,13 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
Game.Renderer.DisableScissor();
|
Game.Renderer.DisableScissor();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int2 ChildOrigin { get { return RenderOrigin + new int2(0, (int)currentListOffset); } }
|
public override int2 ChildOrigin
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return RenderOrigin + new int2(ScrollBar == ScrollBar.Left ? ScrollbarWidth : 0, (int)currentListOffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override Rectangle GetEventBounds()
|
public override Rectangle GetEventBounds()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user