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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user