Compare commits
3 Commits
master
...
blurg-test
Author | SHA1 | Date | |
---|---|---|---|
3f1875252e | |||
65609bf685 | |||
a95ddb46ad |
26
Dashboard.BlurgText/BlurgCommand.cs
Normal file
26
Dashboard.BlurgText/BlurgCommand.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -7,6 +7,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Dashboard\Dashboard.csproj" />
|
||||||
<PackageReference Include="BlurgText" Version="0.1.0-nightly-4" />
|
<PackageReference Include="BlurgText" Version="0.1.0-nightly-4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
63
Dashboard.BlurgText/DashboardBlurg.cs
Normal file
63
Dashboard.BlurgText/DashboardBlurg.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
@ -22,7 +22,7 @@ namespace Dashboard.Media.Color
|
|||||||
Height = height;
|
Height = height;
|
||||||
Depth = depth;
|
Depth = depth;
|
||||||
|
|
||||||
buffer = new byte[width * height * depth];
|
buffer = new byte[(long)width * height * depth * format.BytesPerPixel()];
|
||||||
}
|
}
|
||||||
~QImageBuffer()
|
~QImageBuffer()
|
||||||
{
|
{
|
||||||
|
@ -65,8 +65,8 @@ namespace Dashboard.Media
|
|||||||
public unsafe void CopyTo(QImageLock destination, int x, int y)
|
public unsafe void CopyTo(QImageLock destination, int x, int y)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
Width + x > destination.Width ||
|
Width + x >= destination.Width ||
|
||||||
Height + y > destination.Height)
|
Height + y >= destination.Height)
|
||||||
{
|
{
|
||||||
throw new Exception("Image falls outside the bounds of the destination.");
|
throw new Exception("Image falls outside the bounds of the destination.");
|
||||||
}
|
}
|
||||||
|
@ -4,11 +4,12 @@
|
|||||||
<ProjectReference Include="..\..\Dashboard\Dashboard.csproj" />
|
<ProjectReference Include="..\..\Dashboard\Dashboard.csproj" />
|
||||||
<ProjectReference Include="..\..\Dashboard.Media.Defaults\Dashboard.Media.Defaults.csproj" />
|
<ProjectReference Include="..\..\Dashboard.Media.Defaults\Dashboard.Media.Defaults.csproj" />
|
||||||
<ProjectReference Include="..\..\Dashboard.OpenTK\Dashboard.OpenTK.csproj" />
|
<ProjectReference Include="..\..\Dashboard.OpenTK\Dashboard.OpenTK.csproj" />
|
||||||
|
<ProjectReference Include="..\..\Dashboard.BlurgText\Dashboard.BlurgText.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<ImplicitUsings>disable</ImplicitUsings>
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -5,6 +5,8 @@ using Dashboard.OpenTK;
|
|||||||
using Dashboard.Media.Defaults;
|
using Dashboard.Media.Defaults;
|
||||||
using Dashboard.Media;
|
using Dashboard.Media;
|
||||||
using Dashboard.PAL;
|
using Dashboard.PAL;
|
||||||
|
using Dashboard.BlurgText;
|
||||||
|
using BlurgText;
|
||||||
|
|
||||||
namespace Dashboard.Demo
|
namespace Dashboard.Demo
|
||||||
{
|
{
|
||||||
@ -21,24 +23,30 @@ namespace Dashboard.Demo
|
|||||||
public class EmptyView : View
|
public class EmptyView : View
|
||||||
{
|
{
|
||||||
private QFont? font;
|
private QFont? font;
|
||||||
private readonly Label Label = new Label() { Text = "Hello world!", Position = new QVec2(300, 300) };
|
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)
|
protected override void PaintBegin(CommandList cmd)
|
||||||
{
|
{
|
||||||
base.PaintBegin(cmd);
|
base.PaintBegin(cmd);
|
||||||
|
|
||||||
if (font == null)
|
if (result == null)
|
||||||
{
|
{
|
||||||
IFontDataBase db = FontDataBaseProvider.Instance;
|
// IFontDataBase db = FontDataBaseProvider.Instance;
|
||||||
font = new QFontFreeType(db.FontFileInfo(db.Sans).OpenRead());
|
// font = new QFontFreeType(db.FontFileInfo(db.Sans).OpenRead());
|
||||||
|
|
||||||
Label.Font = font;
|
// Label.Font = font;
|
||||||
Label.TextSize = 12;
|
// Label.TextSize = 12;
|
||||||
Label.InvalidateVisual();
|
// 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));
|
cmd.Rectangle(new QRectangle(16, 16, 0, 0));
|
||||||
Label.Paint(cmd);
|
// Label.Paint(cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user