10 Commits

Author SHA1 Message Date
3f1875252e Merge branch 'master' into blurg-test 2024-07-28 11:36:20 +03:00
65609bf685 Fix buffer size in QImageBuffer.cs 2024-07-28 11:33:12 +03:00
a95ddb46ad Add some blurg test code. 2024-07-28 11:16:07 +03:00
dadd9f137a Add utility for custom commands into command lists. 2024-07-26 23:48:48 +03:00
23fc485b2a Create Dashboard.BlurgText 2024-07-26 22:20:44 +03:00
c6c76aa8be Update dependencies. 2024-07-18 21:54:44 +03:00
6670667ff6 Fix some broken dependencies. 2024-07-18 20:34:39 +03:00
d06264e424 Rename some classes to fit the new names. 2024-07-18 20:28:02 +03:00
a1f4e6a4dc Rename from QUIK to Dashboard
Due to unforseen naming conflicts, the project has been rebranded under the ReFuel
umbrealla and will now be referred to as Dashboard from now on. Other changes will
occur to suit the library more for the engine whilst keeping the freestanding
nature of the library.

Rename folder.

Rename to Dashboard.OpenTK

Rename to Dashboard.Media.Defaults.

Do the last renames and path fixes.
2024-07-17 23:26:58 +03:00
470475092a Rename namespace to Dashboard. 2024-07-17 23:18:20 +03:00
85 changed files with 666 additions and 366 deletions

View File

@@ -0,0 +1,26 @@
using BlurgText;
using Dashboard.CommandMachine;
namespace Dashboard.BlurgText
{
public static class BlurgCommand
{
public static void PutBlurgText(this CommandList list, DashboardBlurg blurg, BlurgResult result, QVec2 origin)
{
for (int i = 0; i < result.Count; i++)
{
BlurgRect rect = result[i];
QRectangle pos = new QRectangle()
{
Min = origin + new QVec2(rect.X, rect.Y),
Size = new QVec2(rect.Width, rect.Height)
};
QRectangle uv = new QRectangle(rect.U1, rect.V1, rect.U0, rect.V0);
list.Image(blurg.Images[(int)rect.UserData], pos, uv);
}
}
}
}

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Dashboard\Dashboard.csproj" />
<PackageReference Include="BlurgText" Version="0.1.0-nightly-4" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,63 @@
using BlurgText;
using Dashboard.Media;
using Dashboard.Media.Color;
namespace Dashboard.BlurgText
{
public class DashboardBlurg : IDisposable
{
private readonly List<QImageBuffer> images = new List<QImageBuffer>();
public Blurg Blurg { get; }
public IReadOnlyList<QImageBuffer> Images => images.AsReadOnly();
public DashboardBlurg()
{
Blurg = new Blurg(TextureAllocationCallback, TextureUpdateCallback);
}
private nint TextureAllocationCallback(int width, int height)
{
QImageBuffer image = new QImageBuffer(QImageFormat.RgbaU8, width, height);
images.Add(image);
return images.Count - 1;
}
private void TextureUpdateCallback(nint userData, nint buffer, int x, int y, int width, int height)
{
if (width == 0 || height == 0)
return;
QImageLock src = new QImageLock(QImageFormat.RgbaU8, width, height, 1, buffer);
QImageBuffer image = images[(int)userData];
image.LockBits2d(out QImageLock dest, QImageLockOptions.Default);
src.CopyTo(dest, x, y);
image.UnlockBits();
}
private bool _isDisposed = false;
private void Dispose(bool disposing)
{
if (_isDisposed) return;
if (disposing)
{
Blurg.Dispose();
foreach (QImageBuffer image in images)
{
image.Dispose();
}
images.Clear();
}
_isDisposed = true;
}
public void Dispose() => Dispose(true);
}
}

View File

@@ -8,12 +8,12 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ReFuel.FreeType" Version="0.1.0-rc.4" />
<PackageReference Include="ReFuel.StbImage" Version="2.0.0-rc.3" />
<PackageReference Include="ReFuel.FreeType" Version="0.1.0-rc.5" />
<PackageReference Include="ReFuel.StbImage" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Quik\Quik.csproj" />
<ProjectReference Include="..\Dashboard\Dashboard.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,4 +1,4 @@
namespace Quik.Media.Defaults
namespace Dashboard.Media.Defaults
{
internal static class EnvironmentVariables
{

View File

@@ -1,7 +1,7 @@
using System;
using ReFuel.FreeType;
namespace Quik.Media.Defaults
namespace Dashboard.Media.Defaults
{
public static class FTProvider
{

View File

@@ -5,11 +5,11 @@ using System.Linq;
using System.Text.Json.Serialization;
using System.Text.Json;
using ReFuel.FreeType;
using Quik.Media.Font;
using Quik.PAL;
using Quik.Media.Defaults.Linux;
using Dashboard.Media.Font;
using Dashboard.PAL;
using Dashboard.Media.Defaults.Linux;
namespace Quik.Media.Defaults.Fallback
namespace Dashboard.Media.Defaults.Fallback
{
public class FallbackFontDatabase : IFontDataBase
{

View File

@@ -4,12 +4,12 @@ using System.IO;
using System.Linq;
using System.Text;
using ReFuel.FreeType;
using Quik.Media.Defaults.Fallback;
using Quik.Media.Defaults.Linux;
using Quik.Media.Font;
using Quik.PAL;
using Dashboard.Media.Defaults.Fallback;
using Dashboard.Media.Defaults.Linux;
using Dashboard.Media.Font;
using Dashboard.PAL;
namespace Quik.Media.Defaults
namespace Dashboard.Media.Defaults
{
public static class FontDataBaseProvider
{

View File

@@ -1,9 +1,9 @@
using System.Diagnostics.CodeAnalysis;
using System.IO;
using Quik.PAL;
using Dashboard.PAL;
namespace Quik.Media.Defaults
namespace Dashboard.Media.Defaults
{
public class FreeTypeFontFactory : IFontFactory
{

View File

@@ -2,9 +2,9 @@ using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using System.Text;
using Quik;
using Dashboard;
namespace Quik.Media.Defaults
namespace Dashboard.Media.Defaults
{
public static unsafe class FontConfig
{

View File

@@ -6,10 +6,10 @@ using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using ReFuel.FreeType;
using Quik.Media.Font;
using Quik.PAL;
using Dashboard.Media.Font;
using Dashboard.PAL;
namespace Quik.Media.Defaults.Linux
namespace Dashboard.Media.Defaults.Linux
{
/// <summary>
/// Font database for Linux libfontconfig systems.

View File

@@ -1,4 +1,4 @@
namespace Quik.Media.Defaults.Linux
namespace Dashboard.Media.Defaults.Linux
{
internal static class LinuxFonts
{

View File

@@ -2,10 +2,10 @@ using System;
using System.Buffers;
using System.IO;
using ReFuel.FreeType;
using Quik.Media.Color;
using Quik.Media.Font;
using Dashboard.Media.Color;
using Dashboard.Media.Font;
namespace Quik.Media.Defaults
namespace Dashboard.Media.Defaults
{
public class QFontFreeType : QFont
{

View File

@@ -1,9 +1,9 @@
using System;
using System.IO;
using Quik.Media.Color;
using Dashboard.Media.Color;
using ReFuel.Stb;
namespace Quik.Media.Defaults
namespace Dashboard.Media.Defaults
{
public unsafe class QImageStbi : QImage
{

View File

@@ -4,12 +4,12 @@ using System.Collections;
using System.IO;
using System.Linq;
using System.Net;
using Quik.Media.Font;
using Dashboard.Media.Font;
// WebRequest is obsolete but runs on .NET framework.
#pragma warning disable SYSLIB0014
namespace Quik.Media.Defaults
namespace Dashboard.Media.Defaults
{
public class StbMediaLoader : MediaLoader<string>, MediaLoader<Uri>, MediaLoader<FileInfo>, MediaLoader<FontFace>
{

View File

@@ -10,7 +10,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Quik\Quik.csproj" />
<ProjectReference Include="..\Dashboard\Dashboard.csproj" />
<EmbeddedResource Include="glsl\**"/>
</ItemGroup>

View File

@@ -2,14 +2,14 @@ using System;
using System.Collections.Generic;
using OpenTK.Windowing.Desktop;
using OpenTK.Windowing.GraphicsLibraryFramework;
using Quik.CommandMachine;
using Quik.Media;
using Quik.OpenGL;
using Quik.PAL;
using Dashboard.CommandMachine;
using Dashboard.Media;
using Dashboard.OpenGL;
using Dashboard.PAL;
namespace Quik.OpenTK
namespace Dashboard.OpenTK
{
public class OpenTKPlatform : IQuikPlatform
public class OpenTKPlatform : IDashboardPlatform
{
private readonly List<OpenTKPort> _ports = new List<OpenTKPort>();
@@ -25,7 +25,7 @@ namespace Quik.OpenTK
private bool IsGLInitialized = false;
public IQuikPortHandle CreatePort()
public IDashHandle CreatePort()
{
NativeWindow window = new NativeWindow(DefaultSettings);
OpenTKPort port = new OpenTKPort(window);
@@ -62,31 +62,31 @@ namespace Quik.OpenTK
NativeWindow.ProcessWindowEvents(block);
}
public void DestroyPort(IQuikPortHandle port) => ((OpenTKPort)port).Dispose();
public void DestroyPort(IDashHandle port) => ((OpenTKPort)port).Dispose();
public string PortGetTitle(IQuikPortHandle port) => ((OpenTKPort)port).Title;
public string PortGetTitle(IDashHandle port) => ((OpenTKPort)port).Title;
public void PortSetTitle(IQuikPortHandle port, string title) => ((OpenTKPort)port).Title = title;
public void PortSetTitle(IDashHandle port, string title) => ((OpenTKPort)port).Title = title;
public QVec2 PortGetSize(IQuikPortHandle port) => ((OpenTKPort)port).Size;
public QVec2 PortGetSize(IDashHandle port) => ((OpenTKPort)port).Size;
public void PortSetSize(IQuikPortHandle port, QVec2 size) => ((OpenTKPort)port).Size = size;
public void PortSetSize(IDashHandle port, QVec2 size) => ((OpenTKPort)port).Size = size;
public QVec2 PortGetPosition(IQuikPortHandle port) => ((OpenTKPort)port).Position;
public QVec2 PortGetPosition(IDashHandle port) => ((OpenTKPort)port).Position;
public void PortSetPosition(IQuikPortHandle port, QVec2 position) => ((OpenTKPort)port).Position = position;
public void PortSetPosition(IDashHandle port, QVec2 position) => ((OpenTKPort)port).Position = position;
public bool PortIsValid(IQuikPortHandle port) => ((OpenTKPort)port).IsValid;
public bool PortIsValid(IDashHandle port) => ((OpenTKPort)port).IsValid;
public void PortSubscribeEvent(IQuikPortHandle port, EventHandler handler) => ((OpenTKPort)port).EventRaised += handler;
public void PortSubscribeEvent(IDashHandle port, EventHandler handler) => ((OpenTKPort)port).EventRaised += handler;
public void PortUnsubscribeEvent(IQuikPortHandle port, EventHandler handler) => ((OpenTKPort)port).EventRaised -= handler;
public void PortUnsubscribeEvent(IDashHandle port, EventHandler handler) => ((OpenTKPort)port).EventRaised -= handler;
public void PortFocus(IQuikPortHandle port) => ((OpenTKPort)port).Focus();
public void PortFocus(IDashHandle port) => ((OpenTKPort)port).Focus();
public void PortShow(IQuikPortHandle port, bool shown = true) => ((OpenTKPort)port).Show(shown);
public void PortShow(IDashHandle port, bool shown = true) => ((OpenTKPort)port).Show(shown);
public void PortPaint(IQuikPortHandle port, CommandList commands) => ((OpenTKPort)port).Paint(commands);
public void PortPaint(IDashHandle port, CommandList commands) => ((OpenTKPort)port).Paint(commands);
public void GetMaximumImage(out int width, out int height)
{

View File

@@ -1,14 +1,14 @@
using System;
using OpenTK.Mathematics;
using OpenTK.Windowing.Desktop;
using Quik.OpenGL;
using Quik.CommandMachine;
using Quik.PAL;
using Quik.VertexGenerator;
using Dashboard.OpenGL;
using Dashboard.CommandMachine;
using Dashboard.PAL;
using Dashboard.VertexGenerator;
namespace Quik.OpenTK
namespace Dashboard.OpenTK
{
public class OpenTKPort : IQuikPortHandle
public class OpenTKPort : IDashHandle
{
private readonly NativeWindow _window;
private readonly GL21Driver _glDriver;

51
Dashboard.sln Normal file
View File

@@ -0,0 +1,51 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dashboard", "Dashboard\Dashboard.csproj", "{4FE772DD-F424-4EAC-BF88-CB8F751B4926}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dashboard.Media.Defaults", "Dashboard.Media.Defaults\Dashboard.Media.Defaults.csproj", "{3798F6DD-8F84-4B7D-A810-B0D4B5ACB672}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dashboard.OpenTK", "Dashboard.OpenTK\Dashboard.OpenTK.csproj", "{2013470A-915C-46F2-BDD3-FCAA39C845EE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{40F3B724-88A1-4D4F-93AB-FE0DC07A347E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dashboard.Demo", "tests\Dashboard.Demo\Dashboard.Demo.csproj", "{EAA5488E-ADF0-4D68-91F4-FAE98C8691FC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dashboard.BlurgText", "Dashboard.BlurgText\Dashboard.BlurgText.csproj", "{D05A9DEA-A5D1-43DC-AB41-36B07598B749}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4FE772DD-F424-4EAC-BF88-CB8F751B4926}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4FE772DD-F424-4EAC-BF88-CB8F751B4926}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4FE772DD-F424-4EAC-BF88-CB8F751B4926}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4FE772DD-F424-4EAC-BF88-CB8F751B4926}.Release|Any CPU.Build.0 = Release|Any CPU
{3798F6DD-8F84-4B7D-A810-B0D4B5ACB672}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3798F6DD-8F84-4B7D-A810-B0D4B5ACB672}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3798F6DD-8F84-4B7D-A810-B0D4B5ACB672}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3798F6DD-8F84-4B7D-A810-B0D4B5ACB672}.Release|Any CPU.Build.0 = Release|Any CPU
{2013470A-915C-46F2-BDD3-FCAA39C845EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2013470A-915C-46F2-BDD3-FCAA39C845EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2013470A-915C-46F2-BDD3-FCAA39C845EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2013470A-915C-46F2-BDD3-FCAA39C845EE}.Release|Any CPU.Build.0 = Release|Any CPU
{EAA5488E-ADF0-4D68-91F4-FAE98C8691FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EAA5488E-ADF0-4D68-91F4-FAE98C8691FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EAA5488E-ADF0-4D68-91F4-FAE98C8691FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EAA5488E-ADF0-4D68-91F4-FAE98C8691FC}.Release|Any CPU.Build.0 = Release|Any CPU
{D05A9DEA-A5D1-43DC-AB41-36B07598B749}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D05A9DEA-A5D1-43DC-AB41-36B07598B749}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D05A9DEA-A5D1-43DC-AB41-36B07598B749}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D05A9DEA-A5D1-43DC-AB41-36B07598B749}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{EAA5488E-ADF0-4D68-91F4-FAE98C8691FC} = {40F3B724-88A1-4D4F-93AB-FE0DC07A347E}
EndGlobalSection
EndGlobal

View File

@@ -1,4 +1,4 @@
namespace Quik.CommandMachine
namespace Dashboard.CommandMachine
{
/// <summary>
/// Enumeration of built-in Quik commands.

View File

@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace Quik.CommandMachine
namespace Dashboard.CommandMachine
{
public class CommandEngine
{
@@ -170,5 +170,63 @@ namespace Quik.CommandMachine
iterator.Dequeue();
}
}
private static readonly Dictionary<Type, ICommandListSerializer> s_serializers = new Dictionary<Type, ICommandListSerializer>();
/// <summary>
/// Add a custom serializer to the command engine.
/// </summary>
/// <typeparam name="T">Type object type.</typeparam>
/// <param name="serializer">The serializer.</param>
/// <param name="overwrite">True to allow overwriting.</param>
public static void AddSerializer<T>(ICommandListSerializer serializer, bool overwrite = false)
{
if (overwrite)
{
s_serializers[typeof(T)] = serializer;
}
else
{
s_serializers.Add(typeof(T), serializer);
}
}
/// <summary>
/// Add a custom serializer to the command engine.
/// </summary>
/// <typeparam name="T">Type object type.</typeparam>
/// <param name="serializer">The serializer.</param>
/// <param name="overwrite">True to allow overwriting.</param>
public static void AddSerializer<T>(ICommandListSerializer<T> serializer, bool overwrite = false)
=> AddSerializer<T>((ICommandListSerializer)serializer, overwrite);
/// <summary>
/// Get a serializer for the given object.
/// </summary>
/// <typeparam name="T">The object type.</typeparam>
/// <param name="value">Required parameter for the C# type inference to work.</param>
/// <returns>The serializer.</returns>
public static ICommandListSerializer<T> GetSerializer<T>(ICommandListSerializable<T>? value)
where T : ICommandListSerializable<T>, new()
{
if (!s_serializers.TryGetValue(typeof(T), out var serializer))
{
serializer = new CommandListSerializableSerializer<T>();
AddSerializer<T>(serializer);
}
return (ICommandListSerializer<T>)serializer;
}
/// <summary>
/// Get a serializer for the given object.
/// </summary>
/// <typeparam name="T">The object type.</typeparam>
/// <param name="value">Required parameter for the C# type inference to work.</param>
/// <returns>The serializer.</returns>
public static ICommandListSerializer<T> GetSerializer<T>(T? value)
{
return (ICommandListSerializer<T>)s_serializers[typeof(T)];
}
}
}

View File

@@ -1,4 +1,4 @@
namespace Quik.CommandMachine
namespace Dashboard.CommandMachine
{
/// <summary>
/// A delegate for a QUIK command.

View File

@@ -1,11 +1,10 @@
using Quik.Media;
using Dashboard.Media;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
namespace Quik.CommandMachine
namespace Dashboard.CommandMachine
{
public class CommandList : IEnumerable<Frame>
{
@@ -316,6 +315,27 @@ namespace Quik.CommandMachine
}
}
/// <summary>
/// Serialize an object into the command list.
/// </summary>
/// <typeparam name="T">The type of the value to serialize.</typeparam>
/// <param name="value">What to write into the command list.</param>
public void Write<T>(T value)
{
CommandEngine.GetSerializer(value).Serialize(value, this);
}
/// <summary>
/// Serialize an object into the command list.
/// </summary>
/// <typeparam name="T">The type of the value to serialize.</typeparam>
/// <param name="value">What to write into the command list.</param>
public void Write<T>(ICommandListSerializable<T> value)
where T : ICommandListSerializable<T>, new()
{
CommandEngine.GetSerializer(value).Serialize((T)value, this);
}
public CommandQueue GetEnumerator() => new CommandQueue(_frames);
IEnumerator<Frame> IEnumerable<Frame>.GetEnumerator() => GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
@@ -372,6 +392,28 @@ namespace Quik.CommandMachine
public Frame Peek() => TryPeek(out Frame frame) ? frame : throw new Exception("No more frames left.");
/// <summary>
/// Deserialize an object from the command queue.
/// </summary>
/// <typeparam name="T">Type of the object to deserialize.</typeparam>
/// <param name="value">The deserialized value.</param>
public void Read<T>([NotNull] out T? value)
{
value = CommandEngine.GetSerializer(default(T)).Deserialize(this);
}
/// <summary>
/// Deserialize an object from the command queue.
/// </summary>
/// <typeparam name="T">Type of the object to deserialize.</typeparam>
/// <param name="value">The deserialized value.</param>
public void Read<T>([NotNull] out ICommandListSerializable<T>? value)
where T : ICommandListSerializable<T>, new()
{
value = CommandEngine.GetSerializer(value = null).Deserialize(this);
}
/// <inheritdoc/>
public bool MoveNext()
{
if (_current + 1 < _frames.Count)
@@ -382,6 +424,7 @@ namespace Quik.CommandMachine
return false;
}
/// <inheritdoc/>
public void Reset()
{
_current = -1;

View File

@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
namespace Quik.CommandMachine
namespace Dashboard.CommandMachine
{
[StructLayout(LayoutKind.Explicit)]
public struct Frame

View File

@@ -0,0 +1,68 @@
namespace Dashboard.CommandMachine
{
/// <summary>
/// Enumeration of command types in the Dashboard command lists.
/// </summary>
public enum FrameType
{
/// <summary>
/// A null value.
/// </summary>
None,
/// <summary>
/// A command frame.
/// </summary>
Command,
/// <summary>
/// An integer frame.
/// </summary>
IVec1,
/// <summary>
/// A two dimensional integer vector frame.
/// </summary>
IVec2,
/// <summary>
/// A three dimensional integer vector frame.
/// </summary>
IVec3,
/// <summary>
/// A four dimensional integer vector frame.
/// </summary>
IVec4,
/// <summary>
/// A floating point frame.
/// </summary>
Vec1,
/// <summary>
/// A two dimensional floating point vector frame.
/// </summary>
Vec2,
/// <summary>
/// A three dimensional floating point vector frame.
/// </summary>
Vec3,
/// <summary>
/// A four dimensional floating point vector frame.
/// </summary>
Vec4,
/// <summary>
/// A serialized object frame.
/// </summary>
Serialized,
/// <summary>
/// A .Net object frame.
/// </summary>
Object,
}
}

View File

@@ -1,4 +1,4 @@
namespace Quik.CommandMachine
namespace Dashboard.CommandMachine
{
public enum ImageCommandFlags
{

View File

@@ -0,0 +1,69 @@
using System.Diagnostics.CodeAnalysis;
using System.Threading;
namespace Dashboard.CommandMachine
{
public interface ICommandListSerializable { }
/// <summary>
/// Interface for objects that can be serialized into the Dashboard command stream.
/// </summary>
public interface ICommandListSerializable<T> : ICommandListSerializable
{
/// <summary>
/// Seralize object.
/// </summary>
/// <param name="list">The object to serialize into.</param>
void Serialize(CommandList list);
/// <summary>
/// Deserialize object.
/// </summary>
/// <param name="queue">The command queue to deserialize from.</param>
void Deserialize(CommandQueue queue);
}
/// <summary>
/// Base interface for all Command List serializers.
/// </summary>
public interface ICommandListSerializer { }
public interface ICommandListSerializer<T> : ICommandListSerializer
{
/// <summary>
/// Serialize an object into the command list.
/// </summary>
/// <param name="value">The object to serialize.</param>
/// <param name="list">The command list to serialize into.</param>
void Serialize(T value, CommandList list);
/// <summary>
/// Deserialize an object from the command queue.
/// </summary>
/// <param name="queue">The command queue.</param>
/// <returns>The object deserialized from the command queue.</returns>
[return: NotNull]
T Deserialize(CommandQueue queue);
}
/// <summary>
/// Class for automatic serialization of <see cref="ICommandListSerializable"/> objects.
/// </summary>
/// <typeparam name="T">The object type to convert.</typeparam>
internal class CommandListSerializableSerializer<T> : ICommandListSerializer<T>
where T : ICommandListSerializable<T>, new()
{
public T Deserialize(CommandQueue queue)
{
T value = new T();
value.Deserialize(queue);
return value;
}
public void Serialize(T value, CommandList list)
{
value.Serialize(list);
}
}
}

View File

@@ -1,7 +1,7 @@
using System;
namespace Quik.Controls
namespace Dashboard.Controls
{
public enum Dock
{

View File

@@ -2,7 +2,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
namespace Quik.Controls
namespace Dashboard.Controls
{
public abstract class ContainerControl : Control, ICollection<Control>
{

View File

@@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
using Quik.CommandMachine;
using Dashboard.CommandMachine;
namespace Quik.Controls
namespace Dashboard.Controls
{
public abstract class Control : UIBase
{

View File

@@ -2,9 +2,9 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Quik.CommandMachine;
using Dashboard.CommandMachine;
namespace Quik.Controls
namespace Dashboard.Controls
{
public class FlowBox : ContainerControl
{

View File

@@ -1,8 +1,8 @@
using Quik.CommandMachine;
using Quik.Media;
using Quik.Typography;
using Dashboard.CommandMachine;
using Dashboard.Media;
using Dashboard.Typography;
namespace Quik.Controls
namespace Dashboard.Controls
{
public class Label : Control
{

View File

@@ -1,8 +1,8 @@
using System;
using Quik.CommandMachine;
using Dashboard.CommandMachine;
namespace Quik.Controls
namespace Dashboard.Controls
{
/// <summary>
/// Bases for all UI elements.

View File

@@ -1,6 +1,6 @@
using System;
namespace Quik.Controls
namespace Dashboard.Controls
{
public class View : UIBase
{

View File

@@ -1,6 +1,6 @@
using System;
namespace Quik.Media.Color
namespace Dashboard.Media.Color
{
public static class FormatConvert
{

View File

@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
namespace Quik.Media.Color
namespace Dashboard.Media.Color
{
public class QImageBuffer : QImage
{
@@ -22,7 +22,7 @@ namespace Quik.Media.Color
Height = height;
Depth = depth;
buffer = new byte[width * height * depth];
buffer = new byte[(long)width * height * depth * format.BytesPerPixel()];
}
~QImageBuffer()
{

View File

@@ -1,6 +1,6 @@
using System;
namespace Quik.Media.Color
namespace Dashboard.Media.Color
{
public unsafe struct LockIO
{

View File

@@ -1,4 +1,4 @@
namespace Quik.Media
namespace Dashboard.Media
{
public static class Extensions
{

View File

@@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
using Quik.Media.Color;
using Dashboard.Media.Color;
namespace Quik.Media.Font
namespace Dashboard.Media.Font
{
public struct FontAtlasGlyphInfo
{

View File

@@ -1,7 +1,7 @@
using System;
using System.Text;
namespace Quik.Media.Font
namespace Dashboard.Media.Font
{
public readonly struct FontFace : IEquatable<FontFace>
{

View File

@@ -1,4 +1,4 @@
namespace Quik.Media.Font
namespace Dashboard.Media.Font
{
public enum FontSlant
{

View File

@@ -1,4 +1,4 @@
namespace Quik.Media.Font
namespace Dashboard.Media.Font
{
/// <summary>
/// Enumeration of font stretch values.

View File

@@ -1,6 +1,6 @@
using System;
namespace Quik.Media.Font
namespace Dashboard.Media.Font
{
public enum FontWeight
{

View File

@@ -1,4 +1,4 @@
namespace Quik.Media.Font
namespace Dashboard.Media.Font
{
public enum SystemFontFamily
{

View File

@@ -1,6 +1,6 @@
using System;
namespace Quik.Media
namespace Dashboard.Media
{
public enum QImageFormat
{

View File

@@ -1,7 +1,7 @@
using System;
using System.IO;
namespace Quik.Media
namespace Dashboard.Media
{
public enum MediaHint
{

View File

@@ -1,10 +1,10 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Quik.Media;
using Quik.Media.Font;
using Dashboard.Media;
using Dashboard.Media.Font;
namespace Quik.Media
namespace Dashboard.Media
{
/// <summary>
/// Abstract class that represents a font.
@@ -59,14 +59,14 @@ namespace Quik.Media
{
Size = size;
QuikApplication.Current.Platform.GetMaximumImage(out int height, out int width);
DashboardApplication.Current.Platform.GetMaximumImage(out int height, out int width);
// Do no allow to create a texture that is greater than 16 square characters at 200 DPI.
width = Math.Min(width, (int)(size * 200 * 16));
height = Math.Min(height, (int)(size * 200 * 16));
// width = height = 256;
atlas = new FontAtlas(width, height, QuikApplication.Current.FontProvider.RasterizerOptions.Sdf);
atlas = new FontAtlas(width, height, DashboardApplication.Current.FontProvider.RasterizerOptions.Sdf);
}
public void Get(int codepoint, out FontGlyph glyph, QFont font)
@@ -78,7 +78,7 @@ namespace Quik.Media
out QGlyphMetrics metrics,
codepoint,
Size,
QuikApplication.Current.FontProvider.RasterizerOptions);
DashboardApplication.Current.FontProvider.RasterizerOptions);
if (image != null)
{

View File

@@ -1,4 +1,4 @@
namespace Quik.Media
namespace Dashboard.Media
{
/// <summary>
/// Glyph properties with metrics based on FreeType glyph metrics.

View File

@@ -1,5 +1,5 @@
using System;
namespace Quik.Media
namespace Dashboard.Media
{
public abstract class QImage : IDisposable
{
@@ -65,8 +65,8 @@ namespace Quik.Media
public unsafe void CopyTo(QImageLock destination, int x, int y)
{
if (
Width + x > destination.Width ||
Height + y > destination.Height)
Width + x >= destination.Width ||
Height + y >= destination.Height)
{
throw new Exception("Image falls outside the bounds of the destination.");
}

View File

@@ -1,6 +1,6 @@
using System;
namespace Quik
namespace Dashboard
{
public enum MouseButton : byte
{

View File

@@ -1,7 +1,7 @@
using System;
using System.Runtime.CompilerServices;
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
public unsafe static partial class GL
{

View File

@@ -1,8 +1,8 @@
using System.Runtime.CompilerServices;
using System.Text;
using static Quik.OpenGL.GLEnum;
using static Dashboard.OpenGL.GLEnum;
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
public unsafe static partial class GL
{

View File

@@ -2,9 +2,9 @@ using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using static Quik.OpenGL.GLEnum;
using static Dashboard.OpenGL.GLEnum;
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
public unsafe static partial class GL
{

View File

@@ -1,7 +1,7 @@
using System;
using System.Runtime.CompilerServices;
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
public unsafe static partial class GL
{

View File

@@ -1,6 +1,6 @@
using System.Runtime.CompilerServices;
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
public unsafe static partial class GL
{

View File

@@ -1,7 +1,7 @@
using System;
using System.Runtime.CompilerServices;
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
public unsafe static partial class GL
{

View File

@@ -2,7 +2,7 @@ using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
public delegate IntPtr GetProcAddressProc(string procName);

View File

@@ -1,13 +1,13 @@
using System;
using System.IO;
using System.Collections.Generic;
using Quik.VertexGenerator;
using static Quik.OpenGL.GLEnum;
using Quik.Media;
using Dashboard.VertexGenerator;
using static Dashboard.OpenGL.GLEnum;
using Dashboard.Media;
using System.Linq;
using System.Diagnostics;
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
public class GL21Driver : IDisposable
{
@@ -46,8 +46,8 @@ namespace Quik.OpenGL
{
if (IsInit) return;
int vs = CreateShader(GL_VERTEX_SHADER, "Quik.res.gl21.vert");
int fs = CreateShader(GL_FRAGMENT_SHADER, "Quik.res.gl21.frag");
int vs = CreateShader(GL_VERTEX_SHADER, "Dashboard.res.gl21.vert");
int fs = CreateShader(GL_FRAGMENT_SHADER, "Dashboard.res.gl21.frag");
program = GL.CreateProgram();
GL.AttachShader(program, vs);

View File

@@ -1,4 +1,4 @@
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
public enum GLEnum : int
{

View File

@@ -1,7 +1,7 @@
using System;
using static Quik.OpenGL.GLEnum;
using static Dashboard.OpenGL.GLEnum;
namespace Quik.OpenGL
namespace Dashboard.OpenGL
{
[System.Serializable]
public class GraphicsException : System.Exception

View File

@@ -1,20 +1,20 @@
using Quik.CommandMachine;
using Quik.Controls;
using Dashboard.CommandMachine;
using Dashboard.Controls;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Quik.PAL
namespace Dashboard.PAL
{
/// <summary>
/// An abstraction layer over the UI input and output.
/// </summary>
public class QuikPort
public class Dash
{
private readonly IQuikPortHandle handle;
private readonly IQuikPlatform platform;
private readonly IDashHandle handle;
private readonly IDashboardPlatform platform;
public string Title
{
@@ -50,7 +50,7 @@ namespace Quik.PAL
}
}
public QuikPort(IQuikPlatform platform)
public Dash(IDashboardPlatform platform)
{
this.platform = platform;
handle = platform.CreatePort();

View File

@@ -1,20 +1,20 @@
using System;
using Quik.CommandMachine;
using Quik.Media;
using Dashboard.CommandMachine;
using Dashboard.Media;
namespace Quik.PAL
namespace Dashboard.PAL
{
/// <summary>
/// An empty interface to statically type Quik port handles.
/// </summary>
public interface IQuikPortHandle
public interface IDashHandle
{
}
/// <summary>
/// The primary primary platform abstraction interface for Quik hosts.
/// The primary primary platform abstraction interface for dashboard hosts.
/// </summary>
public interface IQuikPlatform : IDisposable
public interface IDashboardPlatform : IDisposable
{
/// <summary>
/// The title of the application.
@@ -41,20 +41,20 @@ namespace Quik.PAL
/// Create a window.
/// </summary>
/// <returns>The window instance.</returns>
IQuikPortHandle CreatePort();
void DestroyPort(IQuikPortHandle port);
string PortGetTitle(IQuikPortHandle port);
void PortSetTitle(IQuikPortHandle port, string title);
QVec2 PortGetSize(IQuikPortHandle port);
void PortSetSize(IQuikPortHandle port, QVec2 size);
QVec2 PortGetPosition(IQuikPortHandle port);
void PortSetPosition(IQuikPortHandle port, QVec2 position);
bool PortIsValid(IQuikPortHandle port);
void PortSubscribeEvent(IQuikPortHandle port, EventHandler handler);
void PortUnsubscribeEvent(IQuikPortHandle port, EventHandler handler);
void PortFocus(IQuikPortHandle port);
void PortShow(IQuikPortHandle port, bool shown = true);
void PortPaint(IQuikPortHandle port, CommandList commands);
IDashHandle CreatePort();
void DestroyPort(IDashHandle port);
string PortGetTitle(IDashHandle port);
void PortSetTitle(IDashHandle port, string title);
QVec2 PortGetSize(IDashHandle port);
void PortSetSize(IDashHandle port, QVec2 size);
QVec2 PortGetPosition(IDashHandle port);
void PortSetPosition(IDashHandle port, QVec2 position);
bool PortIsValid(IDashHandle port);
void PortSubscribeEvent(IDashHandle port, EventHandler handler);
void PortUnsubscribeEvent(IDashHandle port, EventHandler handler);
void PortFocus(IDashHandle port);
void PortShow(IDashHandle port, bool shown = true);
void PortPaint(IDashHandle port, CommandList commands);
void GetMaximumImage(out int width, out int height);
void GetMaximumImage(out int width, out int height, out int depth);
}

View File

@@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
using System.IO;
using Quik.Media.Font;
using Dashboard.Media.Font;
namespace Quik.PAL
namespace Dashboard.PAL
{
/// <summary>
/// Flags that effect font search criterea.

View File

@@ -1,9 +1,9 @@
using System.Diagnostics.CodeAnalysis;
using System.IO;
using Quik.Media;
using Dashboard.Media;
namespace Quik.PAL
namespace Dashboard.PAL
{
public interface IFontFactory
{

View File

@@ -1,23 +1,23 @@
using System;
using System.Collections.Generic;
using System.Threading;
using Quik.CommandMachine;
using Quik.Controls;
using Quik.Media;
using Quik.PAL;
using Quik.Typography;
using Dashboard.CommandMachine;
using Dashboard.Controls;
using Dashboard.Media;
using Dashboard.PAL;
using Dashboard.Typography;
namespace Quik
namespace Dashboard
{
/// <summary>
/// Main class for Quik applications.
/// </summary>
public class QuikApplication
public class DashboardApplication
{
/// <summary>
/// The application platform driver.
/// </summary>
public IQuikPlatform Platform { get; }
public IDashboardPlatform Platform { get; }
/// <summary>
/// Title of the application.
@@ -37,7 +37,7 @@ namespace Quik
set => Platform.Icon = value;
}
public QuikPort? MainPort { get; private set; } = null;
public PAL.Dash? MainPort { get; private set; } = null;
public FontProvider FontProvider { get; }
@@ -46,7 +46,7 @@ namespace Quik
/// </summary>
public List<MediaLoader> MediaLoaders { get; } = new List<MediaLoader>();
public QuikApplication(IQuikPlatform platform)
public DashboardApplication(IDashboardPlatform platform)
{
Platform = platform;
FontProvider = new FontProvider(this);
@@ -103,7 +103,7 @@ namespace Quik
public void Init(View mainView)
{
MainPort = new QuikPort(Platform) { UIElement = mainView };
MainPort = new PAL.Dash(Platform) { UIElement = mainView };
MainPort.EventRaised += (sender, ea) => mainView.NotifyEvent(sender, ea);
}
@@ -123,9 +123,9 @@ namespace Quik
return true;
}
public static QuikApplication Current { get; private set; } = null!;
public static DashboardApplication Current { get; private set; } = null!;
public static void SetCurrentApplication(QuikApplication application)
public static void SetCurrentApplication(DashboardApplication application)
{
Current = application;
}

View File

@@ -2,7 +2,7 @@ using System;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
namespace Quik
namespace Dashboard
{
/// <summary>
/// A 2 dimensional Vector.

View File

@@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
using Quik.Media;
using Quik.Media.Font;
using Dashboard.Media;
using Dashboard.Media.Font;
namespace Quik
namespace Dashboard
{
public enum TextAlignment
{

View File

@@ -1,12 +1,12 @@
using Quik.Media;
using Quik.Media.Font;
using Quik.PAL;
using Dashboard.Media;
using Dashboard.Media.Font;
using Dashboard.PAL;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace Quik.Typography
namespace Dashboard.Typography
{
/// <summary>
/// The font provider is a caching object that provides fonts for typesetting classes.
@@ -18,7 +18,7 @@ namespace Quik.Typography
public readonly FontRasterizerOptions RasterizerOptions;
public IFontDataBase? Database { get; set; }
public IFontFactory? FontFactory { get; set; }
private readonly QuikApplication App;
private readonly DashboardApplication App;
public QFont this[FontFace info]
{
@@ -51,7 +51,7 @@ namespace Quik.Typography
}
}
public FontProvider(QuikApplication app, in FontRasterizerOptions options)
public FontProvider(DashboardApplication app, in FontRasterizerOptions options)
{
RasterizerOptions = options;
App = app;
@@ -73,7 +73,7 @@ namespace Quik.Typography
FontFactory = (IFontFactory?)ctor?.Invoke(null);
}
}
public FontProvider(QuikApplication app)
public FontProvider(DashboardApplication app)
: this(app, FontRasterizerOptions.Default)
{
}

View File

@@ -3,9 +3,9 @@ using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using Quik.Media;
using Dashboard.Media;
namespace Quik.Typography
namespace Dashboard.Typography
{
/// <summary>
/// An atomic horizontal block of text which cannot be further divided.

View File

@@ -1,10 +1,10 @@
using Quik.CommandMachine;
using Quik.Media;
using Dashboard.CommandMachine;
using Dashboard.Media;
using System;
using System.Collections.Generic;
using System.Text;
namespace Quik.Typography
namespace Dashboard.Typography
{
public static class Typesetter
{

View File

@@ -1,7 +1,7 @@
using System;
using System.Text;
namespace Quik.Typography
namespace Dashboard.Typography
{
public static class UnicodeUtil
{

View File

@@ -1,10 +1,10 @@
using Quik.Media;
using Dashboard.Media;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace Quik.VertexGenerator
namespace Dashboard.VertexGenerator
{
public class DrawQueue : IEnumerable<DrawCall>
{

View File

@@ -1,6 +1,6 @@
using System.Diagnostics;
namespace Quik.VertexGenerator
namespace Dashboard.VertexGenerator
{
/// <summary>
/// Represents a GPU vertex.

View File

@@ -1,6 +1,6 @@
using System;
namespace Quik.VertexGenerator
namespace Dashboard.VertexGenerator
{
/// <summary>
/// A small list which whose items can be used by reference.

View File

@@ -1,10 +1,10 @@
using System;
using System.Collections.Generic;
using Quik.CommandMachine;
using Quik.Media;
using Quik.Typography;
using Dashboard.CommandMachine;
using Dashboard.Media;
using Dashboard.Typography;
namespace Quik.VertexGenerator
namespace Dashboard.VertexGenerator
{
public class VertexGeneratorEngine : CommandEngine
{

View File

@@ -1,84 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.9.34701.34
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Quik", "Quik\Quik.csproj", "{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Quik.OpenTK", "Quik.OpenTK\Quik.OpenTK.csproj", "{586E5E28-1D07-4CC2-B04F-0BC420564F57}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{AE05ADE5-A809-479F-97D5-BEAFE7604285}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuikDemo", "tests\QuikDemo\QuikDemo.csproj", "{79CBF97F-4884-4692-94FB-75DDEB61E26F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Quik.Media.Defaults", "Quik.Media.Defaults\Quik.Media.Defaults.csproj", "{B517D2BF-CB9D-4448-BE50-EA85E100EB47}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Debug|x64.ActiveCfg = Debug|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Debug|x64.Build.0 = Debug|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Debug|x86.ActiveCfg = Debug|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Debug|x86.Build.0 = Debug|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Release|Any CPU.Build.0 = Release|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Release|x64.ActiveCfg = Release|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Release|x64.Build.0 = Release|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Release|x86.ActiveCfg = Release|Any CPU
{B86B2B99-DAE4-43CE-A040-1D8E143B94A7}.Release|x86.Build.0 = Release|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Debug|x64.ActiveCfg = Debug|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Debug|x64.Build.0 = Debug|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Debug|x86.ActiveCfg = Debug|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Debug|x86.Build.0 = Debug|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Release|Any CPU.Build.0 = Release|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Release|x64.ActiveCfg = Release|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Release|x64.Build.0 = Release|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Release|x86.ActiveCfg = Release|Any CPU
{586E5E28-1D07-4CC2-B04F-0BC420564F57}.Release|x86.Build.0 = Release|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Debug|x64.ActiveCfg = Debug|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Debug|x64.Build.0 = Debug|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Debug|x86.ActiveCfg = Debug|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Debug|x86.Build.0 = Debug|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Release|Any CPU.Build.0 = Release|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Release|x64.ActiveCfg = Release|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Release|x64.Build.0 = Release|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Release|x86.ActiveCfg = Release|Any CPU
{79CBF97F-4884-4692-94FB-75DDEB61E26F}.Release|x86.Build.0 = Release|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Debug|x64.ActiveCfg = Debug|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Debug|x64.Build.0 = Debug|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Debug|x86.ActiveCfg = Debug|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Debug|x86.Build.0 = Debug|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Release|Any CPU.Build.0 = Release|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Release|x64.ActiveCfg = Release|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Release|x64.Build.0 = Release|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Release|x86.ActiveCfg = Release|Any CPU
{B517D2BF-CB9D-4448-BE50-EA85E100EB47}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{79CBF97F-4884-4692-94FB-75DDEB61E26F} = {AE05ADE5-A809-479F-97D5-BEAFE7604285}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {EF011093-DA56-4E14-B2AB-D565B64F73E1}
EndGlobalSection
EndGlobal

View File

@@ -1,17 +0,0 @@
namespace Quik.CommandMachine
{
public enum FrameType
{
None,
Command,
IVec1,
IVec2,
IVec3,
IVec4,
Vec1,
Vec2,
Vec3,
Vec4,
Object,
}
}

View File

@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\..\Dashboard\Dashboard.csproj" />
<ProjectReference Include="..\..\Dashboard.Media.Defaults\Dashboard.Media.Defaults.csproj" />
<ProjectReference Include="..\..\Dashboard.OpenTK\Dashboard.OpenTK.csproj" />
<ProjectReference Include="..\..\Dashboard.BlurgText\Dashboard.BlurgText.csproj" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,52 @@
using Dashboard;
using Dashboard.CommandMachine;
using Dashboard.Controls;
using Dashboard.OpenTK;
using Dashboard.Media.Defaults;
using Dashboard.Media;
using Dashboard.PAL;
using Dashboard.BlurgText;
using BlurgText;
namespace Dashboard.Demo
{
public static class Program
{
public static readonly DashboardApplication Application = new DashboardApplication(new OpenTKPlatform());
public static void Main(string[] args)
{
Application.Run(new EmptyView());
}
}
public class EmptyView : View
{
private QFont? font;
DashboardBlurg dblurg = new DashboardBlurg();
BlurgResult? result;
// private readonly Label Label = new Label() { Text = "Hello world!", Position = new QVec2(300, 300) };
protected override void PaintBegin(CommandList cmd)
{
base.PaintBegin(cmd);
if (result == null)
{
// IFontDataBase db = FontDataBaseProvider.Instance;
// font = new QFontFreeType(db.FontFileInfo(db.Sans).OpenRead());
// Label.Font = font;
// Label.TextSize = 12;
// Label.InvalidateVisual();
var font = dblurg.Blurg.AddFontFile("/usr/share/fonts/google-noto/NotoSans-Regular.ttf");
result = dblurg.Blurg.BuildString(font!, 12, BlurgColor.White, "Hello World");
}
cmd.PutBlurgText(dblurg, result!, new QVec2(300, 300));
cmd.Rectangle(new QRectangle(16, 16, 0, 0));
// Label.Paint(cmd);
}
}
}

View File

@@ -1,44 +0,0 @@
using Quik;
using Quik.CommandMachine;
using Quik.Controls;
using Quik.OpenTK;
using Quik.Media.Defaults;
using Quik.Media;
using Quik.PAL;
namespace QuikDemo
{
public static class Program
{
public static readonly QuikApplication Application = new QuikApplication(new OpenTKPlatform());
public static void Main(string[] args)
{
Application.Run(new EmptyView());
}
}
public class EmptyView : View
{
private QFont? font;
private readonly Label Label = new Label() { Text = "Hello world!", Position = new QVec2(300, 300) };
protected override void PaintBegin(CommandList cmd)
{
base.PaintBegin(cmd);
if (font == null)
{
IFontDataBase db = FontDataBaseProvider.Instance;
font = new QFontFreeType(db.FontFileInfo(db.Sans).OpenRead());
Label.Font = font;
Label.TextSize = 12;
Label.InvalidateVisual();
}
cmd.Rectangle(new QRectangle(16, 16, 0, 0));
Label.Paint(cmd);
}
}
}

View File

@@ -1,16 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\..\Quik\Quik.csproj" />
<ProjectReference Include="..\..\Quik.Media.Defaults\Quik.Media.Defaults.csproj" />
<ProjectReference Include="..\..\Quik.OpenTK\Quik.OpenTK.csproj" />
</ItemGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>