Added support for draggable BackgroundWidgets

This commit is contained in:
Scott_NZ
2013-04-05 21:09:15 +13:00
parent 8ab817f466
commit 8d0a7b46ac

View File

@@ -8,12 +8,15 @@
*/ */
#endregion #endregion
using System.Drawing;
namespace OpenRA.Widgets namespace OpenRA.Widgets
{ {
public class BackgroundWidget : Widget public class BackgroundWidget : Widget
{ {
public readonly string Background = "dialog"; public readonly string Background = "dialog";
public readonly bool ClickThrough = false; public readonly bool ClickThrough = false;
public readonly bool Draggable = false;
public override void Draw() public override void Draw()
{ {
@@ -22,9 +25,33 @@ namespace OpenRA.Widgets
public BackgroundWidget() : base() { } public BackgroundWidget() : base() { }
bool moving;
int2? prevMouseLocation;
public override bool HandleMouseInput(MouseInput mi) public override bool HandleMouseInput(MouseInput mi)
{ {
return !ClickThrough; if (ClickThrough) return false;
if (!Draggable || moving && (!TakeFocus(mi) || mi.Button != MouseButton.Left)) return true;
if (prevMouseLocation == null)
prevMouseLocation = mi.Location;
var vec = mi.Location - (int2)prevMouseLocation;
prevMouseLocation = mi.Location;
switch (mi.Event)
{
case MouseInputEvent.Up:
moving = false;
LoseFocus(mi);
break;
case MouseInputEvent.Down:
moving = true;
Bounds = new Rectangle(Bounds.X + vec.X, Bounds.Y + vec.Y, Bounds.Width, Bounds.Height);
break;
case MouseInputEvent.Move:
if (moving)
Bounds = new Rectangle(Bounds.X + vec.X, Bounds.Y + vec.Y, Bounds.Width, Bounds.Height);
break;
}
return true;
} }
protected BackgroundWidget(BackgroundWidget other) protected BackgroundWidget(BackgroundWidget other)
@@ -32,6 +59,7 @@ namespace OpenRA.Widgets
{ {
Background = other.Background; Background = other.Background;
ClickThrough = other.ClickThrough; ClickThrough = other.ClickThrough;
Draggable = other.Draggable;
} }
public override Widget Clone() { return new BackgroundWidget(this); } public override Widget Clone() { return new BackgroundWidget(this); }