Some changes to the UI elements.
This commit is contained in:
parent
8fd00257d3
commit
55e9d775cd
56
Quik/Controls/CommonEnums.cs
Normal file
56
Quik/Controls/CommonEnums.cs
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Quik.Controls
|
||||||
|
{
|
||||||
|
public enum Dock
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Top,
|
||||||
|
Left,
|
||||||
|
Bottom,
|
||||||
|
Right,
|
||||||
|
Center
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum Anchor
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Top = 1 << 0,
|
||||||
|
Left = 1 << 1,
|
||||||
|
Bottom = 1 << 2,
|
||||||
|
Right = 1 << 3,
|
||||||
|
All = Top | Left | Bottom | Right
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum Direction
|
||||||
|
{
|
||||||
|
Vertical,
|
||||||
|
Horizontal
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum TextAlignment
|
||||||
|
{
|
||||||
|
Left,
|
||||||
|
Center,
|
||||||
|
Right,
|
||||||
|
Justify,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum VerticalAlignment
|
||||||
|
{
|
||||||
|
Top,
|
||||||
|
Center,
|
||||||
|
Bottom,
|
||||||
|
Justify,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum HorizontalAlignment
|
||||||
|
{
|
||||||
|
Left,
|
||||||
|
Center,
|
||||||
|
Right,
|
||||||
|
Justify
|
||||||
|
}
|
||||||
|
}
|
50
Quik/Controls/ContainerControl.cs
Normal file
50
Quik/Controls/ContainerControl.cs
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Quik.Controls
|
||||||
|
{
|
||||||
|
public abstract class ContainerControl : Control, ICollection<Control>
|
||||||
|
{
|
||||||
|
private readonly List<Control> children = new List<Control>();
|
||||||
|
|
||||||
|
public int Count => children.Count;
|
||||||
|
|
||||||
|
public bool IsReadOnly => false;
|
||||||
|
|
||||||
|
public void Add(Control item)
|
||||||
|
{
|
||||||
|
children.Add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
children.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Contains(Control item)
|
||||||
|
{
|
||||||
|
return children.Contains(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CopyTo(Control[] array, int arrayIndex)
|
||||||
|
{
|
||||||
|
children.CopyTo(array, arrayIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerator<Control> GetEnumerator()
|
||||||
|
{
|
||||||
|
return children.GetEnumerator();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Remove(Control item)
|
||||||
|
{
|
||||||
|
return children.Remove(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerator IEnumerable.GetEnumerator()
|
||||||
|
{
|
||||||
|
return children.GetEnumerator();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -14,7 +14,10 @@ namespace Quik.Controls
|
|||||||
set => Style["padding"] = value;
|
set => Style["padding"] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsVisualsValid { get; private set; }
|
public bool IsVisualsValid { get; private set; } = false;
|
||||||
|
public bool IsLayoutValid { get; private set; } = false;
|
||||||
|
|
||||||
|
protected bool IsLayoutSuspended { get; private set; } = false;
|
||||||
|
|
||||||
public void InvalidateVisual()
|
public void InvalidateVisual()
|
||||||
{
|
{
|
||||||
@ -22,11 +25,39 @@ namespace Quik.Controls
|
|||||||
OnVisualsInvalidated(this, EventArgs.Empty);
|
OnVisualsInvalidated(this, EventArgs.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void InvalidateLayout()
|
||||||
|
{
|
||||||
|
IsLayoutValid = false;
|
||||||
|
OnLayoutInvalidated(this, EventArgs.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SuspendLayout()
|
||||||
|
{
|
||||||
|
IsLayoutSuspended = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ResumeLayout()
|
||||||
|
{
|
||||||
|
IsLayoutSuspended = false;
|
||||||
|
InvalidateLayout();
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract void ValidateVisual(CommandList cmd);
|
protected abstract void ValidateVisual(CommandList cmd);
|
||||||
|
protected abstract void ValidateLayout();
|
||||||
|
|
||||||
protected override void PaintBegin(CommandList cmd)
|
protected override void PaintBegin(CommandList cmd)
|
||||||
{
|
{
|
||||||
base.PaintBegin(cmd);
|
base.PaintBegin(cmd);
|
||||||
|
|
||||||
|
if (!IsLayoutValid && !IsLayoutSuspended)
|
||||||
|
{
|
||||||
|
ValidateLayout();
|
||||||
|
OnLayoutValidated(this, EventArgs.Empty);
|
||||||
|
IsLayoutValid = true;
|
||||||
|
|
||||||
|
InvalidateVisual();
|
||||||
|
}
|
||||||
|
|
||||||
if (!IsVisualsValid)
|
if (!IsVisualsValid)
|
||||||
{
|
{
|
||||||
ValidateVisual(drawCommands);
|
ValidateVisual(drawCommands);
|
||||||
@ -47,11 +78,13 @@ namespace Quik.Controls
|
|||||||
public event EventHandler StyleChanged;
|
public event EventHandler StyleChanged;
|
||||||
public event EventHandler VisualsInvalidated;
|
public event EventHandler VisualsInvalidated;
|
||||||
public event EventHandler VisualsValidated;
|
public event EventHandler VisualsValidated;
|
||||||
|
public event EventHandler LayoutInvalidated;
|
||||||
|
public event EventHandler LayoutValidated;
|
||||||
|
|
||||||
protected virtual void OnStyleChanged(object sender, EventArgs ea)
|
protected virtual void OnStyleChanged(object sender, EventArgs ea)
|
||||||
{
|
{
|
||||||
StyleChanged?.Invoke(sender, ea);
|
StyleChanged?.Invoke(sender, ea);
|
||||||
InvalidateVisual();
|
InvalidateLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnVisualsInvalidated(object sender, EventArgs ea)
|
protected virtual void OnVisualsInvalidated(object sender, EventArgs ea)
|
||||||
@ -63,5 +96,15 @@ namespace Quik.Controls
|
|||||||
{
|
{
|
||||||
VisualsValidated?.Invoke(sender, ea);
|
VisualsValidated?.Invoke(sender, ea);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void OnLayoutInvalidated(object sender, EventArgs ea)
|
||||||
|
{
|
||||||
|
LayoutInvalidated?.Invoke(sender, ea);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnLayoutValidated(object sender, EventArgs ea)
|
||||||
|
{
|
||||||
|
LayoutValidated?.Invoke(sender, ea);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
23
Quik/Controls/FlowBox.cs
Normal file
23
Quik/Controls/FlowBox.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using Quik.CommandMachine;
|
||||||
|
|
||||||
|
namespace Quik.Controls
|
||||||
|
{
|
||||||
|
public class FlowBox : ContainerControl
|
||||||
|
{
|
||||||
|
public Direction FlowDirection { get; set; }
|
||||||
|
public bool AllowWrap { get; set; }
|
||||||
|
public VerticalAlignment VerticalAlignment { get; set; }
|
||||||
|
public HorizontalAlignment HorizontalAlignment { get; set; }
|
||||||
|
|
||||||
|
protected override void ValidateLayout()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void ValidateVisual(CommandList cmd)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -7,15 +7,26 @@ namespace Quik.Controls
|
|||||||
public class Label : Control
|
public class Label : Control
|
||||||
{
|
{
|
||||||
public string Text { get; set; }
|
public string Text { get; set; }
|
||||||
public QFont TextFont { get; set; }
|
public QFont Font { get; set; }
|
||||||
public float TextSize { get; set; }
|
public float TextSize { get; set; }
|
||||||
|
|
||||||
|
public bool AutoSize { get; set; } = true;
|
||||||
|
|
||||||
|
protected override void ValidateLayout()
|
||||||
|
{
|
||||||
|
if (AutoSize)
|
||||||
|
{
|
||||||
|
QVec2 size = Typesetter.MeasureHorizontal(Text, TextSize, Font);
|
||||||
|
Size = size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void ValidateVisual(CommandList cmd)
|
protected override void ValidateVisual(CommandList cmd)
|
||||||
{
|
{
|
||||||
float padding = Padding;
|
float padding = Padding;
|
||||||
QVec2 origin = new QVec2(padding, padding);
|
QVec2 origin = new QVec2(padding, padding);
|
||||||
|
|
||||||
cmd.TypesetHorizontalDirect(Text, origin, TextSize, TextFont);
|
cmd.TypesetHorizontalDirect(Text, origin, TextSize, Font);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,20 +9,32 @@ namespace Quik.Controls
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class UIBase
|
public abstract class UIBase
|
||||||
{
|
{
|
||||||
|
private QVec2 size;
|
||||||
|
|
||||||
public UIBase Parent { get; protected set; }
|
public UIBase Parent { get; protected set; }
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
public QRectangle Bounds { get; set; }
|
public QRectangle Bounds
|
||||||
|
|
||||||
public QVec2 Position
|
|
||||||
{
|
{
|
||||||
get => Bounds.Min;
|
get => new QRectangle(Position + Size, Position);
|
||||||
set => Bounds = new QRectangle(Bounds.Max - Bounds.Min + value, value);
|
set
|
||||||
|
{
|
||||||
|
Size = value.Size;
|
||||||
|
Position = value.Min;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public QVec2 Position { get; set; }
|
||||||
|
|
||||||
public QVec2 Size
|
public QVec2 Size
|
||||||
{
|
{
|
||||||
get => Bounds.Max - Bounds.Min;
|
get => size;
|
||||||
set => Bounds = new QRectangle(value + Bounds.Min, Bounds.Min);
|
set
|
||||||
|
{
|
||||||
|
QVec2 oldSize = size;
|
||||||
|
size = value;
|
||||||
|
|
||||||
|
OnResized(this, new ResizedEventArgs(size, oldSize));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public QRectangle AbsoluteBounds
|
public QRectangle AbsoluteBounds
|
||||||
@ -40,7 +52,13 @@ namespace Quik.Controls
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NotifyEvent(object sender, EventArgs args)
|
public QVec2 MaximumSize { get; set; } = new QVec2(-1, -1);
|
||||||
|
public QVec2 MinimumSize { get; set; } = new QVec2(-1, -1);
|
||||||
|
|
||||||
|
public bool IsMaximumSizeSet => MaximumSize != new QVec2(-1, -1);
|
||||||
|
public bool IsMinimumSizeSet => MinimumSize != new QVec2(-1, -1);
|
||||||
|
|
||||||
|
public virtual void NotifyEvent(object sender, EventArgs args)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,5 +79,24 @@ namespace Quik.Controls
|
|||||||
PaintBegin(cmd);
|
PaintBegin(cmd);
|
||||||
PaintEnd(cmd);
|
PaintEnd(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public event EventHandler<ResizedEventArgs> Resized;
|
||||||
|
|
||||||
|
public virtual void OnResized(object sender, ResizedEventArgs ea)
|
||||||
|
{
|
||||||
|
Resized?.Invoke(sender, ea);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ResizedEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public QVec2 NewSize { get; }
|
||||||
|
public QVec2 OldSize { get; }
|
||||||
|
|
||||||
|
public ResizedEventArgs(QVec2 newSize, QVec2 oldSize)
|
||||||
|
{
|
||||||
|
NewSize = newSize;
|
||||||
|
OldSize = oldSize;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -21,7 +21,7 @@ namespace QuikDemo
|
|||||||
public class EmptyView : View
|
public class EmptyView : View
|
||||||
{
|
{
|
||||||
private QFont font;
|
private QFont font;
|
||||||
private readonly Label Label = new Label() { Text = "Hello world!", Size = new QVec2(256, 32), Position = new QVec2(300, 300) };
|
private readonly Label Label = new Label() { Text = "Hello world!", Position = new QVec2(300, 300) };
|
||||||
|
|
||||||
protected override void PaintBegin(CommandList cmd)
|
protected override void PaintBegin(CommandList cmd)
|
||||||
{
|
{
|
||||||
@ -32,8 +32,8 @@ namespace QuikDemo
|
|||||||
IFontDataBase db = FontDataBaseProvider.Instance;
|
IFontDataBase db = FontDataBaseProvider.Instance;
|
||||||
font = new QFontFreeType(db.FontFileInfo(db.Sans).OpenRead());
|
font = new QFontFreeType(db.FontFileInfo(db.Sans).OpenRead());
|
||||||
|
|
||||||
Label.TextFont = font;
|
Label.Font = font;
|
||||||
Label.TextSize = 16;
|
Label.TextSize = 12;
|
||||||
Label.InvalidateVisual();
|
Label.InvalidateVisual();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user