Packer.TextBounds
							parent
							
								
									d190df55b2
								
							
						
					
					
						commit
						db5ca97726
					
				|  | @ -1 +1 @@ | |||
| Subproject commit ac63d6c9b2d773792f8c3e5dafe760dd8769a4bf | ||||
| Subproject commit f8872bae59e394b0f8a35224bb39ab8fd041af97 | ||||
|  | @ -12,6 +12,8 @@ namespace MoonWorks.Graphics.Font | |||
| 
 | ||||
| 		public Font Font { get; } | ||||
| 
 | ||||
| 		private byte[] StringBytes; | ||||
| 
 | ||||
| 		private bool IsDisposed; | ||||
| 
 | ||||
| 		public unsafe Packer(GraphicsDevice graphicsDevice, Font font, float fontSize, uint textureWidth, uint textureHeight, uint padding = 1) | ||||
|  | @ -19,6 +21,7 @@ namespace MoonWorks.Graphics.Font | |||
| 			Font = font; | ||||
| 			Handle = Wellspring.Wellspring_CreatePacker(Font.Handle, fontSize, textureWidth, textureHeight, 0, padding); | ||||
| 			Texture = Texture.CreateTexture2D(graphicsDevice, textureWidth, textureHeight, TextureFormat.R8, TextureUsageFlags.Sampler); | ||||
| 			StringBytes = new byte[128]; | ||||
| 		} | ||||
| 
 | ||||
| 		public unsafe bool PackFontRanges(params FontRange[] fontRanges) | ||||
|  | @ -43,6 +46,38 @@ namespace MoonWorks.Graphics.Font | |||
| 			commandBuffer.SetTextureData(Texture, pixelDataPointer, Texture.Width * Texture.Height); | ||||
| 		} | ||||
| 
 | ||||
| 		public unsafe void TextBounds( | ||||
| 			string text, | ||||
| 			float x, | ||||
| 			float y, | ||||
| 			HorizontalAlignment horizontalAlignment, | ||||
| 			VerticalAlignment verticalAlignment, | ||||
| 			out Wellspring.Rectangle rectangle | ||||
| 		) { | ||||
| 			var byteCount = System.Text.Encoding.UTF8.GetByteCount(text); | ||||
| 
 | ||||
| 			if (StringBytes.Length < byteCount) | ||||
| 			{ | ||||
| 				System.Array.Resize(ref StringBytes, byteCount); | ||||
| 			} | ||||
| 
 | ||||
| 			fixed (char* chars = text) | ||||
| 			fixed (byte* bytes = StringBytes) | ||||
| 			{ | ||||
| 				System.Text.Encoding.UTF8.GetBytes(chars, text.Length, bytes, byteCount); | ||||
| 				Wellspring.Wellspring_TextBounds( | ||||
| 					Handle, | ||||
| 					x, | ||||
| 					y, | ||||
| 					(Wellspring.HorizontalAlignment) horizontalAlignment, | ||||
| 					(Wellspring.VerticalAlignment) verticalAlignment, | ||||
| 					(IntPtr) bytes, | ||||
| 					(uint) byteCount, | ||||
| 					out rectangle | ||||
| 				); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		protected virtual void Dispose(bool disposing) | ||||
| 		{ | ||||
| 			if (!IsDisposed) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue