Rename various types.

This commit is contained in:
H. Utku Maden 2024-07-28 14:19:13 +03:00
parent d959c42e99
commit 50552914c1
37 changed files with 184 additions and 184 deletions

@ -20,7 +20,7 @@ namespace Dashboard.BlurgText
private nint TextureAllocationCallback(int width, int height) private nint TextureAllocationCallback(int width, int height)
{ {
QImageBuffer image = new QImageBuffer(QImageFormat.RgbaU8, width, height); QImageBuffer image = new QImageBuffer(ImageFormat.RgbaU8, width, height);
images.Add(image); images.Add(image);
return images.Count - 1; return images.Count - 1;
} }
@ -30,7 +30,7 @@ namespace Dashboard.BlurgText
if (width == 0 || height == 0) if (width == 0 || height == 0)
return; return;
QImageLock src = new QImageLock(QImageFormat.RgbaU8, width, height, 1, buffer); QImageLock src = new QImageLock(ImageFormat.RgbaU8, width, height, 1, buffer);
QImageBuffer image = images[(int)userData]; QImageBuffer image = images[(int)userData];
image.LockBits2d(out QImageLock dest, QImageLockOptions.Default); image.LockBits2d(out QImageLock dest, QImageLockOptions.Default);

@ -5,7 +5,7 @@ using System.Linq;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using System.Text.Json; using System.Text.Json;
using ReFuel.FreeType; using ReFuel.FreeType;
using Dashboard.Media.Font; using Dashboard.Media.Fonts;
using Dashboard.PAL; using Dashboard.PAL;
using Dashboard.Media.Defaults.Linux; using Dashboard.Media.Defaults.Linux;

@ -6,7 +6,7 @@ using System.Text;
using ReFuel.FreeType; using ReFuel.FreeType;
using Dashboard.Media.Defaults.Fallback; using Dashboard.Media.Defaults.Fallback;
using Dashboard.Media.Defaults.Linux; using Dashboard.Media.Defaults.Linux;
using Dashboard.Media.Font; using Dashboard.Media.Fonts;
using Dashboard.PAL; using Dashboard.PAL;
namespace Dashboard.Media.Defaults namespace Dashboard.Media.Defaults

@ -3,19 +3,19 @@ using System.Buffers;
using System.IO; using System.IO;
using ReFuel.FreeType; using ReFuel.FreeType;
using Dashboard.Media.Color; using Dashboard.Media.Color;
using Dashboard.Media.Font; using Dashboard.Media.Fonts;
using OpenTK.Mathematics; using OpenTK.Mathematics;
namespace Dashboard.Media.Defaults namespace Dashboard.Media.Defaults
{ {
public class QFontFreeType : QFont public class FontFreeType : Font
{ {
private MemoryStream ms; private MemoryStream ms;
private FTFace face; private FTFace face;
public override FontFace Face => throw new NotImplementedException(); public override FontFace Face => throw new NotImplementedException();
public QFontFreeType(Stream stream) public FontFreeType(Stream stream)
{ {
ms = new MemoryStream(); ms = new MemoryStream();
stream.CopyTo(ms); stream.CopyTo(ms);
@ -32,7 +32,7 @@ namespace Dashboard.Media.Defaults
return FT.GetCharIndex(face, (ulong)rune) != 0; return FT.GetCharIndex(face, (ulong)rune) != 0;
} }
protected override QImage Render(out QGlyphMetrics metrics, int codepoint, float size, in FontRasterizerOptions options) protected override Image Render(out GlyphMetrics metrics, int codepoint, float size, in FontRasterizerOptions options)
{ {
FT.SetCharSize(face, 0, (long)Math.Round(64*size), 0, (uint)Math.Round(options.Resolution)); FT.SetCharSize(face, 0, (long)Math.Round(64*size), 0, (uint)Math.Round(options.Resolution));
@ -40,7 +40,7 @@ namespace Dashboard.Media.Defaults
FT.LoadGlyph(face, index, FTLoadFlags.Default); FT.LoadGlyph(face, index, FTLoadFlags.Default);
ref readonly FTGlyphMetrics ftmetrics = ref face.Glyph.Metrics; ref readonly FTGlyphMetrics ftmetrics = ref face.Glyph.Metrics;
metrics = new QGlyphMetrics(codepoint, metrics = new GlyphMetrics(codepoint,
new Vector2(ftmetrics.Width/64f, ftmetrics.Height/64f), new Vector2(ftmetrics.Width/64f, ftmetrics.Height/64f),
new Vector2(ftmetrics.HorizontalBearingX/64f, ftmetrics.HorizontalBearingY/64f), new Vector2(ftmetrics.HorizontalBearingX/64f, ftmetrics.HorizontalBearingY/64f),
new Vector2(ftmetrics.VerticalBearingX/64f, ftmetrics.VerticalBearingY/64f), new Vector2(ftmetrics.VerticalBearingX/64f, ftmetrics.VerticalBearingY/64f),
@ -55,7 +55,7 @@ namespace Dashboard.Media.Defaults
return null; return null;
} }
QImageBuffer image = new QImageBuffer(QImageFormat.AlphaU8, (int)bitmap.Width, (int)bitmap.Rows); QImageBuffer image = new QImageBuffer(ImageFormat.AlphaU8, (int)bitmap.Width, (int)bitmap.Rows);
image.LockBits2d(out QImageLock lk, QImageLockOptions.Default); image.LockBits2d(out QImageLock lk, QImageLockOptions.Default);
unsafe unsafe

@ -7,11 +7,11 @@ namespace Dashboard.Media.Defaults
{ {
public class FreeTypeFontFactory : IFontFactory public class FreeTypeFontFactory : IFontFactory
{ {
public bool TryOpen(Stream stream, [NotNullWhen(true)] out QFont font) public bool TryOpen(Stream stream, [NotNullWhen(true)] out Font font)
{ {
try try
{ {
font = new QFontFreeType(stream); font = new FontFreeType(stream);
return true; return true;
} }
catch catch

@ -5,7 +5,7 @@ using ReFuel.Stb;
namespace Dashboard.Media.Defaults namespace Dashboard.Media.Defaults
{ {
public unsafe class QImageStbi : QImage public unsafe class ImageStbi : Image
{ {
private readonly StbImage image; private readonly StbImage image;
private QImageBuffer buffer; private QImageBuffer buffer;
@ -17,9 +17,9 @@ namespace Dashboard.Media.Defaults
public override int Depth => 1; public override int Depth => 1;
public override bool IsSdf => isSdf; public override bool IsSdf => isSdf;
public override QImageFormat InternalFormat => Stb2QImageFormat(image.Format); public override ImageFormat InternalFormat => Stb2QImageFormat(image.Format);
public QImageStbi(Stream source) public ImageStbi(Stream source)
{ {
// According to the stbi documentation, only a specific type of PNG // According to the stbi documentation, only a specific type of PNG
// files are premultiplied out of the box (iPhone PNG). Take the // files are premultiplied out of the box (iPhone PNG). Take the
@ -30,15 +30,15 @@ namespace Dashboard.Media.Defaults
image = StbImage.Load(source); image = StbImage.Load(source);
} }
public static QImageFormat Stb2QImageFormat(StbiImageFormat src) public static ImageFormat Stb2QImageFormat(StbiImageFormat src)
{ {
switch (src) switch (src)
{ {
case StbiImageFormat.Grey: return QImageFormat.RedU8; case StbiImageFormat.Grey: return ImageFormat.RedU8;
case StbiImageFormat.Rgb: return QImageFormat.RgbU8; case StbiImageFormat.Rgb: return ImageFormat.RgbU8;
case StbiImageFormat.Rgba: return QImageFormat.RgbaU8; case StbiImageFormat.Rgba: return ImageFormat.RgbaU8;
case StbiImageFormat.GreyAlpha: return QImageFormat.RaU8; case StbiImageFormat.GreyAlpha: return ImageFormat.RaU8;
default: return QImageFormat.Undefined; default: return ImageFormat.Undefined;
} }
} }

@ -6,7 +6,7 @@ using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
using ReFuel.FreeType; using ReFuel.FreeType;
using Dashboard.Media.Font; using Dashboard.Media.Fonts;
using Dashboard.PAL; using Dashboard.PAL;
namespace Dashboard.Media.Defaults.Linux namespace Dashboard.Media.Defaults.Linux

@ -4,7 +4,7 @@ using System.Collections;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using Dashboard.Media.Font; using Dashboard.Media.Fonts;
// WebRequest is obsolete but runs on .NET framework. // WebRequest is obsolete but runs on .NET framework.
#pragma warning disable SYSLIB0014 #pragma warning disable SYSLIB0014

@ -16,7 +16,7 @@ namespace Dashboard.OpenTK
// These shall remain a sad nop for now. // These shall remain a sad nop for now.
public string? Title { get; set; } public string? Title { get; set; }
public QImage? Icon { get; set; } = null; public Media.Image? Icon { get; set; } = null;
public event EventHandler? EventRaised; public event EventHandler? EventRaised;

@ -8,7 +8,7 @@ namespace Dashboard.Controls
public class Label : Control public class Label : Control
{ {
public string Text { get; set; } = string.Empty; public string Text { get; set; } = string.Empty;
public QFont? Font { get; set; } public Font? Font { get; set; }
public float TextSize { get; set; } public float TextSize { get; set; }
public bool AutoSize { get; set; } = true; public bool AutoSize { get; set; } = true;

@ -31,7 +31,7 @@ namespace Dashboard
/// <summary> /// <summary>
/// Application icon. /// Application icon.
/// </summary> /// </summary>
public QImage? Icon public Image? Icon
{ {
get => Platform.Icon; get => Platform.Icon;
set => Platform.Icon = value; set => Platform.Icon = value;

@ -232,7 +232,7 @@ namespace Dashboard.ImmediateDraw
} }
} }
public void Image(QImage texture, in Rectangle rectangle) public void Image(Image texture, in Rectangle rectangle)
{ {
Enqueue(Command.Image); Enqueue(Command.Image);
Enqueue((Frame)(int)ImageCommandFlags.Single); Enqueue((Frame)(int)ImageCommandFlags.Single);
@ -240,7 +240,7 @@ namespace Dashboard.ImmediateDraw
Enqueue(rectangle); Enqueue(rectangle);
} }
public void Image(QImage texture, in Rectangle rectangle, in Rectangle uv) public void Image(Image texture, in Rectangle rectangle, in Rectangle uv)
{ {
Enqueue(Command.Image); Enqueue(Command.Image);
Enqueue((Frame)(int)(ImageCommandFlags.Single | ImageCommandFlags.UVs)); Enqueue((Frame)(int)(ImageCommandFlags.Single | ImageCommandFlags.UVs));
@ -249,7 +249,7 @@ namespace Dashboard.ImmediateDraw
Enqueue(uv); Enqueue(uv);
} }
public void Image(QImage texture, ReadOnlySpan<Rectangle> rectangles, bool interleavedUV = false) public void Image(Image texture, ReadOnlySpan<Rectangle> rectangles, bool interleavedUV = false)
{ {
int count = rectangles.Length; int count = rectangles.Length;
ImageCommandFlags flags = ImageCommandFlags.None; ImageCommandFlags flags = ImageCommandFlags.None;
@ -270,7 +270,7 @@ namespace Dashboard.ImmediateDraw
} }
} }
public void Image(QImage texture, ReadOnlySpan<Rectangle> rectangles, ReadOnlySpan<Rectangle> uvs) public void Image(Image texture, ReadOnlySpan<Rectangle> rectangles, ReadOnlySpan<Rectangle> uvs)
{ {
int count = Math.Min(rectangles.Length, uvs.Length); int count = Math.Min(rectangles.Length, uvs.Length);
Enqueue(Command.Image); Enqueue(Command.Image);
@ -284,7 +284,7 @@ namespace Dashboard.ImmediateDraw
} }
} }
public void Image3D(QImage texture, in Image3DCall call) public void Image3D(Image texture, in Image3DCall call)
{ {
Enqueue(Command.Image); Enqueue(Command.Image);
Enqueue(new Frame(ImageCommandFlags.Image3d | ImageCommandFlags.Single)); Enqueue(new Frame(ImageCommandFlags.Image3d | ImageCommandFlags.Single));
@ -294,7 +294,7 @@ namespace Dashboard.ImmediateDraw
Enqueue(new Frame(call.Layer)); Enqueue(new Frame(call.Layer));
} }
public void Image3D(QImage texture, ReadOnlySpan<Image3DCall> calls) public void Image3D(Image texture, ReadOnlySpan<Image3DCall> calls)
{ {
Enqueue(Command.Image); Enqueue(Command.Image);
Enqueue(new Frame((int)ImageCommandFlags.Image3d, calls.Length)); Enqueue(new Frame((int)ImageCommandFlags.Image3d, calls.Length));

@ -9,12 +9,12 @@ namespace Dashboard.Media.Color
{ {
switch (image.Format) switch (image.Format)
{ {
case QImageFormat.RaF: case ImageFormat.RaF:
case QImageFormat.RaU8: case ImageFormat.RaU8:
case QImageFormat.RgbF: case ImageFormat.RgbF:
case QImageFormat.RgbU8: case ImageFormat.RgbU8:
case QImageFormat.RgbaF: case ImageFormat.RgbaF:
case QImageFormat.RgbaU8: case ImageFormat.RgbaU8:
break; break;
default: default:
return; return;

@ -3,19 +3,19 @@ using System.Runtime.InteropServices;
namespace Dashboard.Media.Color namespace Dashboard.Media.Color
{ {
public class QImageBuffer : QImage public class QImageBuffer : Image
{ {
private byte[] buffer; private byte[] buffer;
GCHandle handle; GCHandle handle;
private bool isSdf = false; private bool isSdf = false;
public override QImageFormat InternalFormat { get; } public override ImageFormat InternalFormat { get; }
public override int Width { get; } public override int Width { get; }
public override int Height { get; } public override int Height { get; }
public override int Depth { get; } public override int Depth { get; }
public override bool IsSdf => isSdf; public override bool IsSdf => isSdf;
public QImageBuffer(QImageFormat format, int width, int height, int depth = 1) public QImageBuffer(ImageFormat format, int width, int height, int depth = 1)
{ {
InternalFormat = format; InternalFormat = format;
Width = width; Width = width;

@ -9,7 +9,7 @@ namespace Dashboard.Media.Color
public int Width => Lock.Width; public int Width => Lock.Width;
public int Height => Lock.Height; public int Height => Lock.Height;
public int Depth => Depth; public int Depth => Depth;
public QImageFormat Format => Lock.Format; public ImageFormat Format => Lock.Format;
public LockIO(QImageLock imageLock) public LockIO(QImageLock imageLock)
{ {
@ -29,11 +29,11 @@ namespace Dashboard.Media.Color
switch (Format) switch (Format)
{ {
default: default:
case QImageFormat.RedU8: return new Color4(ptr[0], 0, 0, 255); case ImageFormat.RedU8: return new Color4(ptr[0], 0, 0, 255);
case QImageFormat.AlphaU8: return new Color4(0, 0, 0, ptr[0]); case ImageFormat.AlphaU8: return new Color4(0, 0, 0, ptr[0]);
case QImageFormat.RaU8: return new Color4(ptr[0], 0, 0, ptr[1]); case ImageFormat.RaU8: return new Color4(ptr[0], 0, 0, ptr[1]);
case QImageFormat.RgbU8: return new Color4(ptr[0], ptr[1], ptr[2], 255); case ImageFormat.RgbU8: return new Color4(ptr[0], ptr[1], ptr[2], 255);
case QImageFormat.RgbaU8: return new Color4(ptr[0], ptr[1], ptr[2], ptr[3]); case ImageFormat.RgbaU8: return new Color4(ptr[0], ptr[1], ptr[2], ptr[3]);
} }
} }
@ -45,22 +45,22 @@ namespace Dashboard.Media.Color
switch (Format) switch (Format)
{ {
default: default:
case QImageFormat.RedU8: case ImageFormat.RedU8:
ptr[0] = (byte)(value.R * 255); ptr[0] = (byte)(value.R * 255);
break; break;
case QImageFormat.AlphaU8: case ImageFormat.AlphaU8:
ptr[0] = (byte)(value.A * 255); ptr[0] = (byte)(value.A * 255);
break; break;
case QImageFormat.RaU8: case ImageFormat.RaU8:
ptr[0] = (byte)(value.R * 255); ptr[0] = (byte)(value.R * 255);
ptr[1] = (byte)(value.A * 255); ptr[1] = (byte)(value.A * 255);
break; break;
case QImageFormat.RgbU8: case ImageFormat.RgbU8:
ptr[0] = (byte)(value.R * 255); ptr[0] = (byte)(value.R * 255);
ptr[1] = (byte)(value.G * 255); ptr[1] = (byte)(value.G * 255);
ptr[2] = (byte)(value.B * 255); ptr[2] = (byte)(value.B * 255);
break; break;
case QImageFormat.RgbaU8: case ImageFormat.RgbaU8:
ptr[0] = (byte)(value.R * 255); ptr[0] = (byte)(value.R * 255);
ptr[1] = (byte)(value.G * 255); ptr[1] = (byte)(value.G * 255);
ptr[2] = (byte)(value.B * 255); ptr[2] = (byte)(value.B * 255);
@ -82,7 +82,7 @@ namespace Dashboard.Media.Color
public int Width => Lock.Width; public int Width => Lock.Width;
public int Height => Lock.Height; public int Height => Lock.Height;
public int Depth => Depth; public int Depth => Depth;
public QImageFormat Format => Lock.Format; public ImageFormat Format => Lock.Format;
public LockIOF(QImageLock imageLock) public LockIOF(QImageLock imageLock)
{ {
@ -102,11 +102,11 @@ namespace Dashboard.Media.Color
switch (Format) switch (Format)
{ {
default: default:
case QImageFormat.RedU8: return new Color4(ptr[0], 0, 0, 1); case ImageFormat.RedU8: return new Color4(ptr[0], 0, 0, 1);
case QImageFormat.AlphaU8: return new Color4(0, 0, 0, ptr[0]); case ImageFormat.AlphaU8: return new Color4(0, 0, 0, ptr[0]);
case QImageFormat.RaU8: return new Color4(ptr[0], 0, 0, ptr[1]); case ImageFormat.RaU8: return new Color4(ptr[0], 0, 0, ptr[1]);
case QImageFormat.RgbU8: return new Color4(ptr[0], ptr[1], ptr[2], 1); case ImageFormat.RgbU8: return new Color4(ptr[0], ptr[1], ptr[2], 1);
case QImageFormat.RgbaU8: return new Color4(ptr[0], ptr[1], ptr[2], ptr[3]); case ImageFormat.RgbaU8: return new Color4(ptr[0], ptr[1], ptr[2], ptr[3]);
} }
} }
@ -118,22 +118,22 @@ namespace Dashboard.Media.Color
switch (Format) switch (Format)
{ {
default: default:
case QImageFormat.RedU8: case ImageFormat.RedU8:
ptr[0] = value.R; ptr[0] = value.R;
break; break;
case QImageFormat.AlphaU8: case ImageFormat.AlphaU8:
ptr[0] = value.A; ptr[0] = value.A;
break; break;
case QImageFormat.RaU8: case ImageFormat.RaU8:
ptr[0] = value.R; ptr[0] = value.R;
ptr[1] = value.A; ptr[1] = value.A;
break; break;
case QImageFormat.RgbU8: case ImageFormat.RgbU8:
ptr[0] = value.R; ptr[0] = value.R;
ptr[1] = value.G; ptr[1] = value.G;
ptr[2] = value.B; ptr[2] = value.B;
break; break;
case QImageFormat.RgbaU8: case ImageFormat.RgbaU8:
ptr[0] = value.R; ptr[0] = value.R;
ptr[1] = value.G; ptr[1] = value.G;
ptr[2] = value.B; ptr[2] = value.B;

@ -2,68 +2,68 @@ namespace Dashboard.Media
{ {
public static class Extensions public static class Extensions
{ {
public static bool IsU8(this QImageFormat format) public static bool IsU8(this ImageFormat format)
{ {
switch (format) switch (format)
{ {
case QImageFormat.AlphaU8: case ImageFormat.AlphaU8:
case QImageFormat.RedU8: case ImageFormat.RedU8:
case QImageFormat.RaU8: case ImageFormat.RaU8:
case QImageFormat.RgbU8: case ImageFormat.RgbU8:
case QImageFormat.RgbaU8: case ImageFormat.RgbaU8:
return true; return true;
default: default:
return false; return false;
} }
} }
public static bool IsFloat(this QImageFormat format) public static bool IsFloat(this ImageFormat format)
{ {
switch (format) switch (format)
{ {
case QImageFormat.AlphaF: case ImageFormat.AlphaF:
case QImageFormat.RedF: case ImageFormat.RedF:
case QImageFormat.RaF: case ImageFormat.RaF:
case QImageFormat.RgbF: case ImageFormat.RgbF:
case QImageFormat.RgbaF: case ImageFormat.RgbaF:
return true; return true;
default: default:
return false; return false;
} }
} }
public static int BytesPerPixel(this QImageFormat format) public static int BytesPerPixel(this ImageFormat format)
{ {
switch (format) switch (format)
{ {
case QImageFormat.AlphaU8: return sizeof(byte); case ImageFormat.AlphaU8: return sizeof(byte);
case QImageFormat.RedU8: return sizeof(byte); case ImageFormat.RedU8: return sizeof(byte);
case QImageFormat.RaU8: return 2 * sizeof(byte); case ImageFormat.RaU8: return 2 * sizeof(byte);
case QImageFormat.RgbU8: return 3 * sizeof(byte); case ImageFormat.RgbU8: return 3 * sizeof(byte);
case QImageFormat.RgbaU8: return 4 * sizeof(byte); case ImageFormat.RgbaU8: return 4 * sizeof(byte);
case QImageFormat.AlphaF: return sizeof(float); case ImageFormat.AlphaF: return sizeof(float);
case QImageFormat.RedF: return sizeof(float); case ImageFormat.RedF: return sizeof(float);
case QImageFormat.RaF: return 2 * sizeof(float); case ImageFormat.RaF: return 2 * sizeof(float);
case QImageFormat.RgbF: return 3 * sizeof(float); case ImageFormat.RgbF: return 3 * sizeof(float);
case QImageFormat.RgbaF: return 4 * sizeof(float); case ImageFormat.RgbaF: return 4 * sizeof(float);
default: return 0; default: return 0;
} }
} }
public static int Channels(this QImageFormat format) public static int Channels(this ImageFormat format)
{ {
switch (format) switch (format)
{ {
case QImageFormat.AlphaU8: return 1; case ImageFormat.AlphaU8: return 1;
case QImageFormat.RedU8: return 1; case ImageFormat.RedU8: return 1;
case QImageFormat.RaU8: return 2; case ImageFormat.RaU8: return 2;
case QImageFormat.RgbU8: return 3; case ImageFormat.RgbU8: return 3;
case QImageFormat.RgbaU8: return 4; case ImageFormat.RgbaU8: return 4;
case QImageFormat.AlphaF: return 1; case ImageFormat.AlphaF: return 1;
case QImageFormat.RedF: return 1; case ImageFormat.RedF: return 1;
case QImageFormat.RaF: return 2; case ImageFormat.RaF: return 2;
case QImageFormat.RgbF: return 3; case ImageFormat.RgbF: return 3;
case QImageFormat.RgbaF: return 4; case ImageFormat.RgbaF: return 4;
default: return 0; default: return 0;
} }
} }

@ -2,14 +2,14 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Dashboard.Media; using Dashboard.Media;
using Dashboard.Media.Font; using Dashboard.Media.Fonts;
namespace Dashboard.Media namespace Dashboard.Media
{ {
/// <summary> /// <summary>
/// Abstract class that represents a font. /// Abstract class that represents a font.
/// </summary> /// </summary>
public abstract class QFont : IDisposable public abstract class Font : IDisposable
{ {
public abstract FontFace Face { get; } public abstract FontFace Face { get; }
public string Family => Face.Family; public string Family => Face.Family;
@ -18,7 +18,7 @@ namespace Dashboard.Media
public FontStretch Stretch => Face.Stretch; public FontStretch Stretch => Face.Stretch;
public abstract bool HasRune(int rune); public abstract bool HasRune(int rune);
protected abstract QImage Render(out QGlyphMetrics metrics, int codepoint, float size, in FontRasterizerOptions options); protected abstract Image Render(out GlyphMetrics metrics, int codepoint, float size, in FontRasterizerOptions options);
private readonly Dictionary<float, SizedFontCollection> _atlasses = new Dictionary<float, SizedFontCollection>(); private readonly Dictionary<float, SizedFontCollection> _atlasses = new Dictionary<float, SizedFontCollection>();
@ -69,13 +69,13 @@ namespace Dashboard.Media
atlas = new FontAtlas(width, height, DbApplication.Current.FontProvider.RasterizerOptions.Sdf); atlas = new FontAtlas(width, height, DbApplication.Current.FontProvider.RasterizerOptions.Sdf);
} }
public void Get(int codepoint, out FontGlyph glyph, QFont font) public void Get(int codepoint, out FontGlyph glyph, Font font)
{ {
if (glyphs.TryGetValue(codepoint, out glyph)) if (glyphs.TryGetValue(codepoint, out glyph))
return; return;
QImage image = font.Render( Image image = font.Render(
out QGlyphMetrics metrics, out GlyphMetrics metrics,
codepoint, codepoint,
Size, Size,
DbApplication.Current.FontProvider.RasterizerOptions); DbApplication.Current.FontProvider.RasterizerOptions);
@ -102,11 +102,11 @@ namespace Dashboard.Media
public readonly struct FontGlyph public readonly struct FontGlyph
{ {
public readonly int CodePoint; public readonly int CodePoint;
public readonly QImage? Image; public readonly Image? Image;
public readonly QGlyphMetrics Metrics; public readonly GlyphMetrics Metrics;
public readonly Rectangle UVs; public readonly Rectangle UVs;
public FontGlyph(int codepoint, QImage? image, in QGlyphMetrics metrics, in Rectangle uvs) public FontGlyph(int codepoint, Image? image, in GlyphMetrics metrics, in Rectangle uvs)
{ {
CodePoint = codepoint; CodePoint = codepoint;
Image = image; Image = image;

@ -3,12 +3,12 @@ using System.Collections.Generic;
using Dashboard.Media.Color; using Dashboard.Media.Color;
using OpenTK.Mathematics; using OpenTK.Mathematics;
namespace Dashboard.Media.Font namespace Dashboard.Media.Fonts
{ {
public struct FontAtlasGlyphInfo public struct FontAtlasGlyphInfo
{ {
public int Codepoint; public int Codepoint;
public QImage Image; public Image Image;
public Rectangle UVs; public Rectangle UVs;
} }
@ -109,7 +109,7 @@ namespace Dashboard.Media.Font
private class AtlasPage : IDisposable private class AtlasPage : IDisposable
{ {
public QImage Image; public Image Image;
public int PointerX, PointerY; public int PointerX, PointerY;
public int RowHeight; public int RowHeight;
public int Expansion; public int Expansion;
@ -118,7 +118,7 @@ namespace Dashboard.Media.Font
public AtlasPage(int width, int height, int expansion) public AtlasPage(int width, int height, int expansion)
{ {
Image = new QImageBuffer(QImageFormat.AlphaU8, width, height); Image = new QImageBuffer(ImageFormat.AlphaU8, width, height);
Expansion = expansion; Expansion = expansion;
Reset(); Reset();
} }

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

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

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

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

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

@ -5,7 +5,7 @@ namespace Dashboard.Media
/// <summary> /// <summary>
/// Glyph properties with metrics based on FreeType glyph metrics. /// Glyph properties with metrics based on FreeType glyph metrics.
/// </summary> /// </summary>
public struct QGlyphMetrics public struct GlyphMetrics
{ {
/// <summary> /// <summary>
/// The code point for the character. /// The code point for the character.
@ -32,7 +32,7 @@ namespace Dashboard.Media
/// </summary> /// </summary>
public Vector2 Advance { get; } public Vector2 Advance { get; }
public QGlyphMetrics( public GlyphMetrics(
int character, int character,
Vector2 size, Vector2 size,
Vector2 horizontalBearing, Vector2 horizontalBearing,

@ -1,12 +1,12 @@
using System; using System;
namespace Dashboard.Media namespace Dashboard.Media
{ {
public abstract class QImage : IDisposable public abstract class Image : IDisposable
{ {
public abstract int Width { get; } public abstract int Width { get; }
public abstract int Height { get; } public abstract int Height { get; }
public abstract int Depth { get; } public abstract int Depth { get; }
public abstract QImageFormat InternalFormat { get; } public abstract ImageFormat InternalFormat { get; }
public virtual int MipMapLevels => 0; public virtual int MipMapLevels => 0;
public virtual bool Premultiplied => false; public virtual bool Premultiplied => false;
public virtual bool IsSdf => false; public virtual bool IsSdf => false;
@ -32,12 +32,12 @@ namespace Dashboard.Media
public struct QImageLockOptions public struct QImageLockOptions
{ {
public QImageFormat Format { get; } public ImageFormat Format { get; }
public bool Premultiply { get; } public bool Premultiply { get; }
public int MipLevel { get; } public int MipLevel { get; }
public static QImageLockOptions Default { get; } = new QImageLockOptions(QImageFormat.RgbaU8, true, 0); public static QImageLockOptions Default { get; } = new QImageLockOptions(ImageFormat.RgbaU8, true, 0);
public QImageLockOptions(QImageFormat format, bool premultiply, int level) public QImageLockOptions(ImageFormat format, bool premultiply, int level)
{ {
Format = format; Format = format;
Premultiply = premultiply; Premultiply = premultiply;
@ -47,13 +47,13 @@ namespace Dashboard.Media
public struct QImageLock public struct QImageLock
{ {
public QImageFormat Format { get; } public ImageFormat Format { get; }
public int Width { get; } public int Width { get; }
public int Height { get; } public int Height { get; }
public int Depth { get; } public int Depth { get; }
public IntPtr ImagePtr { get; } public IntPtr ImagePtr { get; }
public QImageLock(QImageFormat format, int width, int height, int depth, IntPtr ptr) public QImageLock(ImageFormat format, int width, int height, int depth, IntPtr ptr)
{ {
Format = format; Format = format;
Width = width; Width = width;

@ -2,7 +2,7 @@ using System;
namespace Dashboard.Media namespace Dashboard.Media
{ {
public enum QImageFormat public enum ImageFormat
{ {
Undefined, Undefined,
RedU8, RedU8,

@ -331,15 +331,15 @@ namespace Dashboard.OpenGL
internal class TextureManager : IDisposable internal class TextureManager : IDisposable
{ {
private readonly Dictionary<QImage, int> textures = new Dictionary<QImage, int>(); private readonly Dictionary<Image, int> textures = new Dictionary<Image, int>();
private readonly HashSet<QImage> imagesNotUsed = new HashSet<QImage>(); private readonly HashSet<Image> imagesNotUsed = new HashSet<Image>();
private bool isDisposed = false; private bool isDisposed = false;
public void BeginFrame() public void BeginFrame()
{ {
if (imagesNotUsed.Count > 0) if (imagesNotUsed.Count > 0)
{ {
foreach (QImage image in imagesNotUsed) foreach (Image image in imagesNotUsed)
{ {
GL.DeleteTexture(textures[image]); GL.DeleteTexture(textures[image]);
} }
@ -347,13 +347,13 @@ namespace Dashboard.OpenGL
imagesNotUsed.Clear(); imagesNotUsed.Clear();
} }
foreach (QImage image in textures.Keys) foreach (Image image in textures.Keys)
{ {
imagesNotUsed.Add(image); imagesNotUsed.Add(image);
} }
} }
public int GetTexture(QImage image) public int GetTexture(Image image)
{ {
if (textures.TryGetValue(image, out int texture)) if (textures.TryGetValue(image, out int texture))
{ {
@ -372,7 +372,7 @@ namespace Dashboard.OpenGL
return textures[image] = texture; return textures[image] = texture;
} }
public int UploadTexture3d(QImage image3d) public int UploadTexture3d(Image image3d)
{ {
int texture = GL.GenTexture(); int texture = GL.GenTexture();
@ -388,7 +388,7 @@ namespace Dashboard.OpenGL
return texture; return texture;
} }
public int UploadTexture2d(QImage image2d) public int UploadTexture2d(Image image2d)
{ {
int texture = GL.GenTexture(); int texture = GL.GenTexture();
@ -403,15 +403,15 @@ namespace Dashboard.OpenGL
switch (image2d.InternalFormat) switch (image2d.InternalFormat)
{ {
case QImageFormat.RedU8: case ImageFormat.RedU8:
case QImageFormat.RedF: case ImageFormat.RedF:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleR, (int)All.Red); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleR, (int)All.Red);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleG, (int)All.Red); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleG, (int)All.Red);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleB, (int)All.Red); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleB, (int)All.Red);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleA, (int)All.One); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleA, (int)All.One);
break; break;
case QImageFormat.AlphaU8: case ImageFormat.AlphaU8:
case QImageFormat.AlphaF: case ImageFormat.AlphaF:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleR, (int)All.One); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleR, (int)All.One);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleG, (int)All.One); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleG, (int)All.One);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleB, (int)All.One); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleB, (int)All.One);
@ -433,28 +433,28 @@ namespace Dashboard.OpenGL
GL.DeleteTextures(ids.Length, ref ids[0]); GL.DeleteTextures(ids.Length, ref ids[0]);
} }
private static readonly Dictionary<QImageFormat, PixelFormat> s_InternalFormat = new Dictionary<QImageFormat, PixelFormat>() private static readonly Dictionary<ImageFormat, PixelFormat> s_InternalFormat = new Dictionary<ImageFormat, PixelFormat>()
{ {
[QImageFormat.AlphaF] = PixelFormat.Alpha, [ImageFormat.AlphaF] = PixelFormat.Alpha,
[QImageFormat.AlphaU8] = PixelFormat.Alpha, [ImageFormat.AlphaU8] = PixelFormat.Alpha,
[QImageFormat.RedF] = PixelFormat.Red, [ImageFormat.RedF] = PixelFormat.Red,
[QImageFormat.RedU8] = PixelFormat.Red, [ImageFormat.RedU8] = PixelFormat.Red,
[QImageFormat.RgbF] = PixelFormat.Rgb, [ImageFormat.RgbF] = PixelFormat.Rgb,
[QImageFormat.RgbU8] = PixelFormat.Rgb, [ImageFormat.RgbU8] = PixelFormat.Rgb,
[QImageFormat.RgbaU8] = PixelFormat.Rgba, [ImageFormat.RgbaU8] = PixelFormat.Rgba,
[QImageFormat.RgbaF] = PixelFormat.Rgba, [ImageFormat.RgbaF] = PixelFormat.Rgba,
}; };
private static readonly Dictionary<QImageFormat, PixelType> s_PixelType = new Dictionary<QImageFormat, PixelType>() private static readonly Dictionary<ImageFormat, PixelType> s_PixelType = new Dictionary<ImageFormat, PixelType>()
{ {
[QImageFormat.AlphaF] = PixelType.Float, [ImageFormat.AlphaF] = PixelType.Float,
[QImageFormat.RedF] = PixelType.Float, [ImageFormat.RedF] = PixelType.Float,
[QImageFormat.RgbF] = PixelType.Float, [ImageFormat.RgbF] = PixelType.Float,
[QImageFormat.RgbaF] = PixelType.Float, [ImageFormat.RgbaF] = PixelType.Float,
[QImageFormat.AlphaU8] = PixelType.UnsignedByte, [ImageFormat.AlphaU8] = PixelType.UnsignedByte,
[QImageFormat.RedU8] = PixelType.UnsignedByte, [ImageFormat.RedU8] = PixelType.UnsignedByte,
[QImageFormat.RgbU8] = PixelType.UnsignedByte, [ImageFormat.RgbU8] = PixelType.UnsignedByte,
[QImageFormat.RgbaU8] = PixelType.UnsignedByte, [ImageFormat.RgbaU8] = PixelType.UnsignedByte,
}; };
} }
} }

@ -25,7 +25,7 @@ namespace Dashboard.PAL
/// <summary> /// <summary>
/// The default icon for the application. /// The default icon for the application.
/// </summary> /// </summary>
QImage? Icon { get; set; } Image? Icon { get; set; }
/// <summary> /// <summary>
/// The event raised when an event is received. /// The event raised when an event is received.

@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using Dashboard.Media.Font; using Dashboard.Media.Fonts;
namespace Dashboard.PAL namespace Dashboard.PAL
{ {

@ -7,6 +7,6 @@ namespace Dashboard.PAL
{ {
public interface IFontFactory public interface IFontFactory
{ {
bool TryOpen(Stream stream, [NotNullWhen(true)] out QFont font); bool TryOpen(Stream stream, [NotNullWhen(true)] out Font font);
} }
} }

@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Dashboard.Media; using Dashboard.Media;
using Dashboard.Media.Font; using Dashboard.Media.Fonts;
using OpenTK.Mathematics; using OpenTK.Mathematics;
namespace Dashboard namespace Dashboard
@ -110,9 +110,9 @@ namespace Dashboard
set => this["list-marker-position"] = value; set => this["list-marker-position"] = value;
} }
public QImage? ListMarkerImage public Image? ListMarkerImage
{ {
get => (QImage?)this["list-marker-image"]; get => (Image?)this["list-marker-image"];
set => this["list-marker-image"] = value; set => this["list-marker-image"] = value;
} }

@ -1,5 +1,5 @@
using Dashboard.Media; using Dashboard.Media;
using Dashboard.Media.Font; using Dashboard.Media.Fonts;
using Dashboard.PAL; using Dashboard.PAL;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -13,18 +13,18 @@ namespace Dashboard.Typography
/// </summary> /// </summary>
public class FontProvider : IDisposable public class FontProvider : IDisposable
{ {
private Dictionary<FontFace, QFont> Fonts { get; } = new Dictionary<FontFace, QFont>(); private Dictionary<FontFace, Font> Fonts { get; } = new Dictionary<FontFace, Font>();
private HashSet<QFont> UsedFonts { get; } = new HashSet<QFont>(); private HashSet<Font> UsedFonts { get; } = new HashSet<Font>();
public readonly FontRasterizerOptions RasterizerOptions; public readonly FontRasterizerOptions RasterizerOptions;
public IFontDataBase? Database { get; set; } public IFontDataBase? Database { get; set; }
public IFontFactory? FontFactory { get; set; } public IFontFactory? FontFactory { get; set; }
private readonly DbApplication App; private readonly DbApplication App;
public QFont this[FontFace info] public Font this[FontFace info]
{ {
get get
{ {
if (!Fonts.TryGetValue(info, out QFont? font)) if (!Fonts.TryGetValue(info, out Font? font))
{ {
using Stream str = Database?.Open(info) ?? throw new Exception("Font could not be found."); using Stream str = Database?.Open(info) ?? throw new Exception("Font could not be found.");
@ -43,7 +43,7 @@ namespace Dashboard.Typography
} }
} }
public QFont this[SystemFontFamily family] public Font this[SystemFontFamily family]
{ {
get get
{ {
@ -99,7 +99,7 @@ namespace Dashboard.Typography
if (isDisposed) return; if (isDisposed) return;
isDisposed = true; isDisposed = true;
foreach (QFont font in Fonts.Values) foreach (Font font in Fonts.Values)
{ {
font.Dispose(); font.Dispose();
} }

@ -354,13 +354,13 @@ namespace Dashboard.Typography
public struct TypesetCharacter public struct TypesetCharacter
{ {
public int Character; public int Character;
public QImage Texture; public Image Texture;
public Rectangle Position; public Rectangle Position;
public Rectangle UV; public Rectangle UV;
public TypesetCharacter( public TypesetCharacter(
int chr, int chr,
QImage texture, Image texture,
in Rectangle position, in Rectangle position,
in Rectangle uv) in Rectangle uv)
{ {

@ -75,7 +75,7 @@ namespace Dashboard.Typography
} }
} }
public static Vector2 MeasureHorizontal(ReadOnlySpan<char> str, float size, QFont font) public static Vector2 MeasureHorizontal(ReadOnlySpan<char> str, float size, Font font)
{ {
var enumerator = new LineEnumerator(str); var enumerator = new LineEnumerator(str);
@ -103,9 +103,9 @@ namespace Dashboard.Typography
return new Vector2(width, height); return new Vector2(width, height);
} }
public static void TypesetHorizontalDirect(this DrawList list, ReadOnlySpan<char> str, Vector2 origin, float size, QFont font) public static void TypesetHorizontalDirect(this DrawList list, ReadOnlySpan<char> str, Vector2 origin, float size, Font font)
{ {
Dictionary<QImage, FontDrawInfo> drawInfo = new Dictionary<QImage, FontDrawInfo>(); Dictionary<Image, FontDrawInfo> drawInfo = new Dictionary<Image, FontDrawInfo>();
var enumerator = new LineEnumerator(str); var enumerator = new LineEnumerator(str);
Vector2 pen = origin; Vector2 pen = origin;
@ -135,8 +135,8 @@ namespace Dashboard.Typography
int codepoint = r.Value; int codepoint = r.Value;
font.Get(codepoint, size, out FontGlyph glyph); font.Get(codepoint, size, out FontGlyph glyph);
ref readonly QGlyphMetrics metrics = ref glyph.Metrics; ref readonly GlyphMetrics metrics = ref glyph.Metrics;
QImage? image = glyph.Image; Image? image = glyph.Image;
if (image == null) if (image == null)
{ {
@ -175,7 +175,7 @@ namespace Dashboard.Typography
private struct FontDrawInfo private struct FontDrawInfo
{ {
public QImage Image; public Image Image;
public List<Rectangle> rectangles; public List<Rectangle> rectangles;
} }
} }

@ -14,7 +14,7 @@ namespace Dashboard.VertexGenerator
private int _start; private int _start;
private int _baseOffset; private int _baseOffset;
private Rectangle _bounds; private Rectangle _bounds;
private QImage? _texture; private Image? _texture;
public int ZDepth { get; private set; } public int ZDepth { get; private set; }
public DbVertex[] VertexArray => _vertices.InternalArray; public DbVertex[] VertexArray => _vertices.InternalArray;
@ -33,7 +33,7 @@ namespace Dashboard.VertexGenerator
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void StartDrawCall(in Rectangle bounds, QImage? texture, int baseOffset) public void StartDrawCall(in Rectangle bounds, Image? texture, int baseOffset)
{ {
_start = ElementCount; _start = ElementCount;
_texture = texture; _texture = texture;
@ -48,7 +48,7 @@ namespace Dashboard.VertexGenerator
public void StartDrawCall(in Rectangle bounds, int baseOffset) => StartDrawCall(bounds, null, baseOffset); public void StartDrawCall(in Rectangle bounds, int baseOffset) => StartDrawCall(bounds, null, baseOffset);
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void StartDrawCall(in Rectangle bounds, QImage texture) => StartDrawCall(bounds, texture, _vertices.Count); public void StartDrawCall(in Rectangle bounds, Image texture) => StartDrawCall(bounds, texture, _vertices.Count);
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void AddVertex(in DbVertex vertex) public void AddVertex(in DbVertex vertex)
@ -100,9 +100,9 @@ namespace Dashboard.VertexGenerator
public int Start { get; } public int Start { get; }
public int Count { get; } public int Count { get; }
public Rectangle Bounds { get; } public Rectangle Bounds { get; }
public QImage? Texture { get; } public Image? Texture { get; }
public DrawCall(int start, int count, in Rectangle bounds, QImage? texture) public DrawCall(int start, int count, in Rectangle bounds, Image? texture)
{ {
Start = start; Start = start;
Count = count; Count = count;

@ -1016,7 +1016,7 @@ namespace Dashboard.VertexGenerator
{ {
Frame frame = queue.Dequeue(); Frame frame = queue.Dequeue();
ImageCommandFlags flags = (ImageCommandFlags)frame.I1; ImageCommandFlags flags = (ImageCommandFlags)frame.I1;
QImage image = queue.Dequeue().As<QImage>(); Image image = queue.Dequeue().As<Image>();
int count = flags.HasFlag(ImageCommandFlags.Single) ? 1 : frame.I2; int count = flags.HasFlag(ImageCommandFlags.Single) ? 1 : frame.I2;
if (flags.HasFlag(ImageCommandFlags.Image3d)) if (flags.HasFlag(ImageCommandFlags.Image3d))
@ -1029,7 +1029,7 @@ namespace Dashboard.VertexGenerator
} }
} }
private void Image2d(DrawQueue queue, QImage image, int count, bool uv) private void Image2d(DrawQueue queue, Image image, int count, bool uv)
{ {
DrawQueue.StartDrawCall(Viewport, image); DrawQueue.StartDrawCall(Viewport, image);
@ -1073,7 +1073,7 @@ namespace Dashboard.VertexGenerator
DrawQueue.EndDrawCall(); DrawQueue.EndDrawCall();
} }
private void Image3d(DrawQueue queue, QImage image, int count) private void Image3d(DrawQueue queue, Image image, int count)
{ {
DrawQueue.StartDrawCall(Viewport, image); DrawQueue.StartDrawCall(Viewport, image);

@ -20,7 +20,7 @@ namespace Dashboard.Demo
public class EmptyView : View public class EmptyView : View
{ {
private QFont? font; private Font? font;
DashboardBlurg dblurg = new DashboardBlurg(); DashboardBlurg dblurg = new DashboardBlurg();
BlurgResult? result; BlurgResult? result;
// private readonly Label Label = new Label() { Text = "Hello world!", Position = new QVec2(300, 300) }; // private readonly Label Label = new Label() { Text = "Hello world!", Position = new QVec2(300, 300) };