aboutsummaryrefslogtreecommitdiffstatsci
path: root/Backends/VkvgBackend/src/TextExtents.cs
blob: 8afb7392a10543c4cb5b5e0ca631d50336622a96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// Copyright (c) 2018-2022  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
//
// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)

using System;
using System.Runtime.InteropServices;

namespace Crow.VkvgBackend
{
	[StructLayout (LayoutKind.Sequential)]
	internal struct TextExtents : IEquatable<TextExtents>
	{
		float xBearing;
		float yBearing;
		float width;
		float height;
		float xAdvance;
		float yAdvance;

		public float XBearing {
			get => xBearing;
			set { xBearing = value; }
		}

		public float YBearing {
			get => yBearing;
			set { yBearing = value; }
		}

		public float Width {
			get => width;
			set { width = value; }
		}

		public float Height {
			get => height;
			set { height = value; }
		}

		public float XAdvance {
			get => xAdvance;
			set { xAdvance = value; }
		}

		public float YAdvance {
			get => yAdvance;
			set { yAdvance = value; }
		}

		public override int GetHashCode () =>
			HashCode.Combine (xBearing, yBearing, width, height, xAdvance, yAdvance);
		public override bool Equals (object obj) => obj is TextExtents te ? Equals (te) : false;

		public bool Equals(TextExtents other) =>
			xBearing == other.xBearing && yBearing == other.yBearing && width == other.width && height == other.height &&
			xAdvance == other.xAdvance && yAdvance == other.yAdvance;
		public static bool operator == (TextExtents extents, TextExtents other) => extents.Equals (other);
		public static bool operator != (TextExtents extents, TextExtents other )=> !extents.Equals (other);
	}
}