From 3de9de4e2d442efcd0f63da4409814d7b88abfe9 Mon Sep 17 00:00:00 2001 From: "H. Utku Maden" Date: Sun, 14 May 2023 23:30:26 +0300 Subject: [PATCH] New conversion operators and make some explicit. --- Quik/CommandQueue/Frame.cs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Quik/CommandQueue/Frame.cs b/Quik/CommandQueue/Frame.cs index f6fbd3b..d793aec 100644 --- a/Quik/CommandQueue/Frame.cs +++ b/Quik/CommandQueue/Frame.cs @@ -180,21 +180,33 @@ namespace Quik.CommandQueue _f4 = f4; } - public T As() where T : class + public T As() { return (T)_object; } - public static implicit operator int(in Frame frame) => frame._i1; - public static implicit operator float(in Frame frame) => frame._f1; - public static implicit operator Command(in Frame frame) => (Command)frame._i1; + public static explicit operator int(in Frame frame) => frame._i1; + public static explicit operator float(in Frame frame) => frame._f1; + public static explicit operator Command(in Frame frame) => (Command)frame._i1; + public static explicit operator QuikVec2(in Frame frame) => + frame.IsFloat ? new QuikVec2(frame._f1, frame._f2) : new QuikVec2(frame._i1, frame._i2); + public static explicit operator QuikColor(in Frame frame) => + new QuikColor((byte)frame._i1, (byte)frame._i2, (byte)frame._i3, (byte)frame._i4); + public static explicit operator QuikRectangle(in Frame frame) => + frame.IsFloat ? + new QuikRectangle(frame._f1, frame._f2, frame._f3, frame._f4) : + new QuikRectangle(frame._i1, frame._i2, frame._i3, frame._i4); + public static explicit operator QuikLine(in Frame frame) => + frame.IsFloat ? + new QuikLine(frame._f1, frame._f2, frame._f3, frame._f4) : + new QuikLine(frame._i1, frame._i2, frame._i3, frame._i4); public static explicit operator Frame(int i) => new Frame(i); public static explicit operator Frame(float f) => new Frame(f); public static implicit operator Frame(Command cmd) => new Frame(cmd); public static implicit operator Frame(in QuikVec2 vector) => new Frame(vector.X, vector.Y); public static implicit operator Frame(in QuikColor color) => new Frame(color.R, color.G, color.B, color.A); - public static implicit operator Frame(in QuikRectangle rect) => new Frame(rect.Min.X, rect.Min.Y, rect.Max.X, rect.Max.Y); + public static implicit operator Frame(in QuikRectangle rect) => new Frame(rect.Max.X, rect.Max.Y, rect.Min.X, rect.Min.Y); public static implicit operator Frame(in QuikLine line) => new Frame(line.Start.X, line.Start.Y, line.End.X, line.Start.Y); public static void Create(in QuikBezier bezier, out Frame a, out Frame b)