Remove references to old control types, at least for now.
This commit is contained in:
parent
6b8b3f2f0d
commit
2bcac4a83e
@ -1,107 +0,0 @@
|
|||||||
using Quik.CommandMachine;
|
|
||||||
using Quik.Typography;
|
|
||||||
|
|
||||||
namespace Quik.Controls
|
|
||||||
{
|
|
||||||
public class Button : Control
|
|
||||||
{
|
|
||||||
public string Text { get; set; } = "Button";
|
|
||||||
public float Padding { get; set; } = 4.0f;
|
|
||||||
|
|
||||||
// public QuikFont Font { get; set; }
|
|
||||||
|
|
||||||
public QuikStrokeStyle NormalStroke { get; set; }
|
|
||||||
public QuikFillStyle NormalFill { get; set; }
|
|
||||||
public QuikStrokeStyle HoverStroke { get; set; }
|
|
||||||
public QuikFillStyle HoverFill { get; set; }
|
|
||||||
public QuikStrokeStyle ActiveStroke { get; set; }
|
|
||||||
public QuikFillStyle ActiveFill { get; set; }
|
|
||||||
|
|
||||||
private ButtonClass _class = ButtonClass.Normal;
|
|
||||||
|
|
||||||
private enum ButtonClass
|
|
||||||
{
|
|
||||||
Normal,
|
|
||||||
Hover,
|
|
||||||
Active
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected override void OnMouseEnter(MouseMoveEventArgs args)
|
|
||||||
{
|
|
||||||
base.OnMouseEnter(args);
|
|
||||||
|
|
||||||
if (_class == ButtonClass.Normal)
|
|
||||||
_class = ButtonClass.Hover;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnMouseLeave(MouseMoveEventArgs args)
|
|
||||||
{
|
|
||||||
base.OnMouseLeave(args);
|
|
||||||
|
|
||||||
if (_class == ButtonClass.Hover)
|
|
||||||
_class = ButtonClass.Normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnMouseDown(MouseButtonEventArgs args)
|
|
||||||
{
|
|
||||||
base.OnMouseDown(args);
|
|
||||||
|
|
||||||
if (_class == ButtonClass.Hover)
|
|
||||||
_class = ButtonClass.Active;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnMouseUp(MouseButtonEventArgs args)
|
|
||||||
{
|
|
||||||
base.OnMouseUp(args);
|
|
||||||
|
|
||||||
if (_class == ButtonClass.Active)
|
|
||||||
{
|
|
||||||
_class = ButtonClass.Hover;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnPaint(CommandQueue draw)
|
|
||||||
{
|
|
||||||
QRectangle bounds = AbsoluteBounds;
|
|
||||||
|
|
||||||
switch (_class)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
case ButtonClass.Normal:
|
|
||||||
draw.Rectangle(bounds);
|
|
||||||
// draw.Commands.Enqueue(new QuikCommandRectangle(bounds) {
|
|
||||||
// StrokeStyle = NormalStroke,
|
|
||||||
// FillStyle = NormalFill
|
|
||||||
// });
|
|
||||||
break;
|
|
||||||
// case ButtonClass.Hover:
|
|
||||||
// draw.Commands.Enqueue(new QuikCommandRectangle(bounds) {
|
|
||||||
// StrokeStyle = HoverStroke,
|
|
||||||
// FillStyle = HoverFill
|
|
||||||
// });
|
|
||||||
// break;
|
|
||||||
// case ButtonClass.Active:
|
|
||||||
// draw.Commands.Enqueue(new QuikCommandRectangle(bounds) {
|
|
||||||
// StrokeStyle = ActiveStroke,
|
|
||||||
// FillStyle = ActiveFill
|
|
||||||
// });
|
|
||||||
// break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Position the text so that it is centered.
|
|
||||||
// float ascender = Root.Context.DefaultFont.Ascender;
|
|
||||||
// float descender = -Root.Context.DefaultFont.Descender;
|
|
||||||
// QuikVec2 position =
|
|
||||||
// bounds.Min +
|
|
||||||
// new QuikVec2(
|
|
||||||
// Padding,
|
|
||||||
// (
|
|
||||||
// (bounds.Size.Y - ascender - descender) /
|
|
||||||
// 2)
|
|
||||||
// + descender);
|
|
||||||
|
|
||||||
// draw.PutText(Text, position);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,140 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Quik.CommandMachine;
|
|
||||||
|
|
||||||
namespace Quik.Controls
|
|
||||||
{
|
|
||||||
public class Container : Control, IList<Control>
|
|
||||||
{
|
|
||||||
private List<Control> _children = new List<Control>();
|
|
||||||
public IEnumerator<Control> GetEnumerator() => _children.GetEnumerator();
|
|
||||||
IEnumerator IEnumerable.GetEnumerator()
|
|
||||||
{
|
|
||||||
return GetEnumerator();
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void Add(Control item)
|
|
||||||
{
|
|
||||||
_children.Add(item);
|
|
||||||
item.NotifyParentChanged(new ParentChangedEventArgs(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void Clear()
|
|
||||||
{
|
|
||||||
foreach (Control child in _children)
|
|
||||||
{
|
|
||||||
child.NotifyParentChanged(ParentChangedEventArgs.Disowned);
|
|
||||||
}
|
|
||||||
_children.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Contains(Control item) => _children.Contains(item);
|
|
||||||
|
|
||||||
public void CopyTo(Control[] array, int arrayIndex) => _children.CopyTo(array, arrayIndex);
|
|
||||||
|
|
||||||
public virtual bool Remove(Control item)
|
|
||||||
{
|
|
||||||
if (_children.Remove(item))
|
|
||||||
{
|
|
||||||
item.NotifyParentChanged(ParentChangedEventArgs.Disowned);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Count => _children.Count;
|
|
||||||
public bool IsReadOnly => false;
|
|
||||||
|
|
||||||
public int IndexOf(Control item) =>_children.IndexOf(item);
|
|
||||||
|
|
||||||
public virtual void Insert(int index, Control item)
|
|
||||||
{
|
|
||||||
_children.Insert(index, item);
|
|
||||||
NotifyParentChanged(new ParentChangedEventArgs(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void RemoveAt(int index)
|
|
||||||
{
|
|
||||||
_children.RemoveAt(index);
|
|
||||||
_children[index].NotifyParentChanged(ParentChangedEventArgs.Disowned);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual Control this[int index]
|
|
||||||
{
|
|
||||||
get => _children[index];
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_children[index].NotifyParentChanged(ParentChangedEventArgs.Disowned);
|
|
||||||
_children[index] = value;
|
|
||||||
value.NotifyParentChanged(new ParentChangedEventArgs(this));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Control this[string name] => _children.Find(x => x.Name == name);
|
|
||||||
|
|
||||||
internal override void NotifyUpdate()
|
|
||||||
{
|
|
||||||
base.NotifyUpdate();
|
|
||||||
|
|
||||||
foreach (Control child in _children)
|
|
||||||
{
|
|
||||||
child.NotifyUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal override void NotifyPaint(CommandQueue draw)
|
|
||||||
{
|
|
||||||
base.NotifyPaint(draw);
|
|
||||||
|
|
||||||
foreach (Control child in _children)
|
|
||||||
{
|
|
||||||
child.NotifyPaint(draw);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal override void NotifyRootChanged(RootChangedEventArgs args)
|
|
||||||
{
|
|
||||||
base.NotifyRootChanged(args);
|
|
||||||
|
|
||||||
foreach (Control child in _children)
|
|
||||||
{
|
|
||||||
child.NotifyRootChanged(args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal override void NotifyMouseMove(MouseMoveEventArgs args)
|
|
||||||
{
|
|
||||||
base.NotifyMouseMove(args);
|
|
||||||
|
|
||||||
foreach (Control child in _children)
|
|
||||||
{
|
|
||||||
child.NotifyMouseMove(args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal override void NotifyMouseDown(MouseButtonEventArgs args)
|
|
||||||
{
|
|
||||||
base.NotifyMouseDown(args);
|
|
||||||
|
|
||||||
foreach (Control child in _children)
|
|
||||||
{
|
|
||||||
child.NotifyMouseDown(args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal override void NotifyMouseUp(MouseButtonEventArgs args)
|
|
||||||
{
|
|
||||||
base.NotifyMouseUp(args);
|
|
||||||
|
|
||||||
foreach (Control child in _children)
|
|
||||||
{
|
|
||||||
child.NotifyMouseUp(args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,154 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Quik.CommandMachine;
|
|
||||||
|
|
||||||
namespace Quik.Controls
|
|
||||||
{
|
|
||||||
public class Control
|
|
||||||
{
|
|
||||||
public string Name { get; set; } = null;
|
|
||||||
|
|
||||||
public Control Parent { get; set; } = null;
|
|
||||||
|
|
||||||
protected RootControl Root { get; set; } = null;
|
|
||||||
|
|
||||||
public QRectangle Bounds { get; set; }
|
|
||||||
|
|
||||||
public bool Focused { get => Root.FocusedControl == this; }
|
|
||||||
|
|
||||||
public QRectangle AbsoluteBounds
|
|
||||||
{
|
|
||||||
get => Parent is null
|
|
||||||
? Bounds
|
|
||||||
: new QRectangle(Parent.Bounds.Min + Bounds.Max, Parent.Bounds.Min + Bounds.Min);
|
|
||||||
set => Bounds = Parent is null
|
|
||||||
? value
|
|
||||||
: new QRectangle(value.Min - Parent.Bounds.Min, value.Max - Parent.Bounds.Min);
|
|
||||||
}
|
|
||||||
|
|
||||||
private MouseButton DownButtons;
|
|
||||||
|
|
||||||
// Hierarchy events.
|
|
||||||
|
|
||||||
public event EventHandler Update;
|
|
||||||
public event EventHandler<CommandQueue> Paint;
|
|
||||||
public event EventHandler<RootChangedEventArgs> RootChanging;
|
|
||||||
public event EventHandler<ParentChangedEventArgs> ParentChanging;
|
|
||||||
public event EventHandler<FocusChangedEventArgs> FocusLost;
|
|
||||||
public event EventHandler<FocusChangedEventArgs> FocusAcquired;
|
|
||||||
|
|
||||||
// Mouse events.
|
|
||||||
|
|
||||||
public event EventHandler<MouseButtonEventArgs> Clicked;
|
|
||||||
public event EventHandler<MouseButtonEventArgs> MouseDown;
|
|
||||||
public event EventHandler<MouseButtonEventArgs> MouseUp;
|
|
||||||
public event EventHandler<MouseMoveEventArgs> MouseEnter;
|
|
||||||
public event EventHandler<MouseMoveEventArgs> MouseMove;
|
|
||||||
// public event EventHandler<MouseMoveEventArgs> MouseHover;
|
|
||||||
public event EventHandler<MouseMoveEventArgs> MouseLeave;
|
|
||||||
|
|
||||||
protected virtual void OnUpdate() => Update?.Invoke(this, EventArgs.Empty);
|
|
||||||
protected virtual void OnPaint(CommandQueue draw) => Paint?.Invoke(this, draw);
|
|
||||||
protected virtual void OnParentChanging(ParentChangedEventArgs args) => ParentChanging?.Invoke(this, args);
|
|
||||||
protected virtual void OnRootChanging(RootChangedEventArgs args) => RootChanging?.Invoke(this, args);
|
|
||||||
protected virtual void OnFocusLost(FocusChangedEventArgs args) => FocusLost?.Invoke(this, args);
|
|
||||||
protected virtual void OnFocusAcquired(FocusChangedEventArgs args) => FocusAcquired?.Invoke(this, args);
|
|
||||||
|
|
||||||
protected virtual void OnClicked(MouseButtonEventArgs args) => Clicked?.Invoke(this, args);
|
|
||||||
protected virtual void OnMouseDown(MouseButtonEventArgs args) => MouseDown?.Invoke(this, args);
|
|
||||||
protected virtual void OnMouseUp(MouseButtonEventArgs args) => MouseUp?.Invoke(this, args);
|
|
||||||
protected virtual void OnMouseEnter(MouseMoveEventArgs args) => MouseEnter?.Invoke(this, args);
|
|
||||||
protected virtual void OnMouseMove(MouseMoveEventArgs args) => MouseMove?.Invoke(this, args);
|
|
||||||
// protected virtual void OnMouseHover(MouseMoveEventArgs args) => MouseHover?.Invoke(this, args);
|
|
||||||
protected virtual void OnMouseLeave(MouseMoveEventArgs args) => MouseLeave?.Invoke(this, args);
|
|
||||||
|
|
||||||
public void Focus()
|
|
||||||
{
|
|
||||||
Root?.Focus(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal virtual void NotifyUpdate()
|
|
||||||
{
|
|
||||||
OnUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
internal virtual void NotifyPaint(CommandQueue draw)
|
|
||||||
{
|
|
||||||
OnPaint(draw);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void NotifyFocusChanged(FocusChangedEventArgs args)
|
|
||||||
{
|
|
||||||
if (args.Focused == this)
|
|
||||||
{
|
|
||||||
OnFocusAcquired(args);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OnFocusLost(args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal virtual void NotifyParentChanged(ParentChangedEventArgs args)
|
|
||||||
{
|
|
||||||
OnParentChanging(args);
|
|
||||||
Parent = args.NewParent;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal virtual void NotifyRootChanged(RootChangedEventArgs args)
|
|
||||||
{
|
|
||||||
OnRootChanging(args);
|
|
||||||
Root = args.NewRoot;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal virtual void NotifyMouseMove(MouseMoveEventArgs args)
|
|
||||||
{
|
|
||||||
QRectangle bounds = AbsoluteBounds;
|
|
||||||
|
|
||||||
if (bounds.Contains(args.AbsolutePosition))
|
|
||||||
{
|
|
||||||
if (!bounds.Contains(args.AbsolutePosition - args.Motion))
|
|
||||||
{
|
|
||||||
OnMouseEnter(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
OnMouseMove(args);
|
|
||||||
}
|
|
||||||
else if (bounds.Contains(args.AbsolutePosition - args.Motion))
|
|
||||||
{
|
|
||||||
OnMouseLeave(args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal virtual void NotifyMouseDown(MouseButtonEventArgs args)
|
|
||||||
{
|
|
||||||
if (AbsoluteBounds.Contains(args.AbsolutePosition))
|
|
||||||
{
|
|
||||||
OnMouseDown(args);
|
|
||||||
DownButtons = args.Buttons;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal virtual void NotifyMouseUp(MouseButtonEventArgs args)
|
|
||||||
{
|
|
||||||
if (AbsoluteBounds.Contains(args.AbsolutePosition))
|
|
||||||
{
|
|
||||||
MouseButton mask;
|
|
||||||
|
|
||||||
OnMouseUp(args);
|
|
||||||
|
|
||||||
if ((mask = DownButtons & args.Buttons) > 0)
|
|
||||||
{
|
|
||||||
MouseButtonEventArgs nargs = new MouseButtonEventArgs(args.AbsolutePosition, mask);
|
|
||||||
Focus();
|
|
||||||
OnClicked(nargs);
|
|
||||||
}
|
|
||||||
|
|
||||||
DownButtons &= ~mask;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DownButtons = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace Quik.Controls
|
|
||||||
{
|
|
||||||
public class ParentChangedEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
public Control NewParent { get; }
|
|
||||||
|
|
||||||
public ParentChangedEventArgs(Control newParent)
|
|
||||||
{
|
|
||||||
NewParent = newParent;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ParentChangedEventArgs Disowned { get; } = new ParentChangedEventArgs(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class RootChangedEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
public RootControl NewRoot { get; }
|
|
||||||
|
|
||||||
public RootChangedEventArgs(RootControl newRoot)
|
|
||||||
{
|
|
||||||
NewRoot = newRoot;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static RootChangedEventArgs Disowned { get; } = new RootChangedEventArgs(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class FocusChangedEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
public Control Focused { get; }
|
|
||||||
|
|
||||||
public FocusChangedEventArgs(Control focused)
|
|
||||||
{
|
|
||||||
Focused = focused;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
using Quik.CommandMachine;
|
|
||||||
using Quik.Typography;
|
|
||||||
|
|
||||||
namespace Quik.Controls
|
|
||||||
{
|
|
||||||
public class Label : Control
|
|
||||||
{
|
|
||||||
public bool MultiLine { get; set; } = false;
|
|
||||||
public string Text { get; set; } = "";
|
|
||||||
|
|
||||||
public float Padding { get; set; } = 4.0f;
|
|
||||||
|
|
||||||
// public QuikFont Font { get; set; }
|
|
||||||
|
|
||||||
// protected override void OnPaint(CommandQueue draw)
|
|
||||||
// {
|
|
||||||
// if (MultiLine)
|
|
||||||
// {
|
|
||||||
// QuikRectangle absolute = AbsoluteBounds;
|
|
||||||
// QuikVec2 paddingVector = new QuikVec2(Padding, Padding);
|
|
||||||
// QuikRectangle rectangle;
|
|
||||||
// rectangle.Min = absolute.Min + paddingVector;
|
|
||||||
// rectangle.Max = absolute.Min - paddingVector;
|
|
||||||
|
|
||||||
// // FIXME: For now use a puttext command.
|
|
||||||
// draw.PutText(Text, rectangle.Min + new QuikVec2(0, rectangle.Size.Y / 3f));
|
|
||||||
|
|
||||||
// // draw.FlowText(Text, rectangle);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// QuikVec2 position = AbsoluteBounds.Min + new QuikVec2(Padding, Padding + AbsoluteBounds.Size.Y / 3f);
|
|
||||||
// draw.PutText(Text, position);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,110 +0,0 @@
|
|||||||
|
|
||||||
using Quik.CommandMachine;
|
|
||||||
|
|
||||||
namespace Quik.Controls
|
|
||||||
{
|
|
||||||
public sealed class RootControl : Container
|
|
||||||
{
|
|
||||||
// public QuikContext Context { get; }
|
|
||||||
public Control FocusedControl { get; private set; }
|
|
||||||
|
|
||||||
public RootControl(object context)
|
|
||||||
{
|
|
||||||
// Context = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Focus(Control which)
|
|
||||||
{
|
|
||||||
FocusChangedEventArgs args = new FocusChangedEventArgs(which);
|
|
||||||
|
|
||||||
FocusedControl?.NotifyFocusChanged(args);
|
|
||||||
(FocusedControl = which).NotifyFocusChanged(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
public new void NotifyUpdate()
|
|
||||||
{
|
|
||||||
base.NotifyUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
public new void NotifyPaint(CommandQueue draw)
|
|
||||||
{
|
|
||||||
base.NotifyPaint(draw);
|
|
||||||
}
|
|
||||||
|
|
||||||
private MouseState LastMouseState;
|
|
||||||
public void NotifyMouse(in MouseState state)
|
|
||||||
{
|
|
||||||
MouseMoveEventArgs move = new MouseMoveEventArgs(
|
|
||||||
state.AbsolutePosition,
|
|
||||||
LastMouseState.AbsolutePosition);
|
|
||||||
MouseButtonEventArgs up = new MouseButtonEventArgs(
|
|
||||||
state.AbsolutePosition,
|
|
||||||
LastMouseState.ButtonsDown & ~state.ButtonsDown);
|
|
||||||
MouseButtonEventArgs down = new MouseButtonEventArgs(
|
|
||||||
state.AbsolutePosition,
|
|
||||||
~LastMouseState.ButtonsDown & state.ButtonsDown);
|
|
||||||
|
|
||||||
if (move.Motion.Magnitude > 0)
|
|
||||||
NotifyMouseMove(move);
|
|
||||||
|
|
||||||
if (up.Buttons != 0)
|
|
||||||
NotifyMouseUp(up);
|
|
||||||
|
|
||||||
if (down.Buttons != 0)
|
|
||||||
NotifyMouseDown(down);
|
|
||||||
|
|
||||||
LastMouseState = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Add(Control item)
|
|
||||||
{
|
|
||||||
base.Add(item);
|
|
||||||
item.NotifyRootChanged(new RootChangedEventArgs(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Clear()
|
|
||||||
{
|
|
||||||
foreach (Control child in this)
|
|
||||||
{
|
|
||||||
child.NotifyRootChanged(RootChangedEventArgs.Disowned);
|
|
||||||
}
|
|
||||||
base.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Insert(int index, Control item)
|
|
||||||
{
|
|
||||||
base.Insert(index, item);
|
|
||||||
item.NotifyRootChanged(new RootChangedEventArgs(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Remove(Control item)
|
|
||||||
{
|
|
||||||
if(base.Remove(item))
|
|
||||||
{
|
|
||||||
item.NotifyRootChanged(RootChangedEventArgs.Disowned);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void RemoveAt(int index)
|
|
||||||
{
|
|
||||||
this[index].NotifyRootChanged(RootChangedEventArgs.Disowned);
|
|
||||||
base.RemoveAt(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Control this[int index]
|
|
||||||
{
|
|
||||||
get => base[index];
|
|
||||||
set
|
|
||||||
{
|
|
||||||
base[index].NotifyRootChanged(RootChangedEventArgs.Disowned);
|
|
||||||
base[index] = value;
|
|
||||||
value.NotifyRootChanged(new RootChangedEventArgs(this));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
66
Quik/Controls/UIBase.cs
Normal file
66
Quik/Controls/UIBase.cs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
|
||||||
|
using System;
|
||||||
|
using Quik.CommandMachine;
|
||||||
|
|
||||||
|
namespace Quik.Controls
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Bases for all UI elements.
|
||||||
|
/// </summary>
|
||||||
|
public abstract class UIBase
|
||||||
|
{
|
||||||
|
public UIBase Parent { get; protected set; }
|
||||||
|
public string Id { get; set; }
|
||||||
|
public QRectangle Bounds { get; set; }
|
||||||
|
|
||||||
|
public QVec2 Position
|
||||||
|
{
|
||||||
|
get => Bounds.Min;
|
||||||
|
set => Bounds = new QRectangle(Bounds.Max - Bounds.Min + value, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public QVec2 Size
|
||||||
|
{
|
||||||
|
get => Bounds.Max - Bounds.Min;
|
||||||
|
set => Bounds = new QRectangle(value + Bounds.Min, Bounds.Min);
|
||||||
|
}
|
||||||
|
|
||||||
|
public QRectangle AbsoluteBounds
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (Parent == null)
|
||||||
|
{
|
||||||
|
return Bounds;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new QRectangle(Bounds.Max + Parent.Position, Bounds.Min + Parent.Position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyEvent(object sender, EventArgs args)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void PaintBegin(CommandQueue cmd)
|
||||||
|
{
|
||||||
|
cmd.PushViewport();
|
||||||
|
cmd.StoreViewport(AbsoluteBounds);
|
||||||
|
cmd.PushZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void PaintEnd(CommandQueue cmd)
|
||||||
|
{
|
||||||
|
cmd.PopZ();
|
||||||
|
cmd.PopViewport();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Paint(CommandQueue cmd)
|
||||||
|
{
|
||||||
|
PaintBegin(cmd);
|
||||||
|
PaintEnd(cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
8
Quik/Controls/View.cs
Normal file
8
Quik/Controls/View.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Quik.Controls
|
||||||
|
{
|
||||||
|
public class View : UIBase
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -42,10 +42,10 @@ namespace Quik
|
|||||||
return AbsolutePosition - origin;
|
return AbsolutePosition - origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
public QVec2 RelativePosition(Controls.Control control)
|
// public QVec2 RelativePosition(Controls.Control control)
|
||||||
{
|
// {
|
||||||
return AbsolutePosition - control.AbsoluteBounds.Min;
|
// return AbsolutePosition - control.AbsoluteBounds.Min;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MouseMoveEventArgs : EventArgs
|
public class MouseMoveEventArgs : EventArgs
|
||||||
@ -66,9 +66,9 @@ namespace Quik
|
|||||||
return AbsolutePosition - origin;
|
return AbsolutePosition - origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
public QVec2 RelativePosition(Controls.Control control)
|
// public QVec2 RelativePosition(Controls.Control control)
|
||||||
{
|
// {
|
||||||
return AbsolutePosition - control.AbsoluteBounds.Min;
|
// return AbsolutePosition - control.AbsoluteBounds.Min;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user