12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- //MIT, 2015, Michael Popoloski's SharpFont,
- //MIT, 2016-present, WinterDev
- using System.Numerics;
- namespace Typography.OpenFont
- {
- [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
- public struct GlyphPointF
- {
- //from https://docs.microsoft.com/en-us/typography/opentype/spec/glyf
- //'point' of the glyph contour.
- //eg. ... In the glyf table, the position of a point ...
- // ... the point is on the curve; otherwise, it is off the curve....
- internal Vector2 P;
- internal bool onCurve;
- public GlyphPointF(float x, float y, bool onCurve)
- {
- P = new Vector2(x, y);
- this.onCurve = onCurve;
- }
- public GlyphPointF(Vector2 position, bool onCurve)
- {
- P = position;
- this.onCurve = onCurve;
- }
- public float X => this.P.X;
- public float Y => this.P.Y;
- public static GlyphPointF operator *(GlyphPointF p, float n)
- {
- return new GlyphPointF(p.P * n, p.onCurve);
- }
- //-----------------------------------------
- internal GlyphPointF Offset(short dx, short dy) { return new GlyphPointF(new Vector2(P.X + dx, P.Y + dy), onCurve); }
- internal void ApplyScale(float scale)
- {
- P *= scale;
- }
- internal void ApplyScaleOnlyOnXAxis(float scale)
- {
- P = new Vector2(P.X * scale, P.Y);
- }
- internal void UpdateX(float x)
- {
- this.P.X = x;
- }
- internal void UpdateY(float y)
- {
- this.P.Y = y;
- }
- internal void OffsetY(float dy)
- {
- this.P.Y += dy;
- }
- internal void OffsetX(float dx)
- {
- this.P.X += dx;
- }
- #if DEBUG
- internal bool dbugIsEqualsWith(GlyphPointF another)
- {
- return this.P == another.P && this.onCurve == another.onCurve;
- }
- public override string ToString() { return P.ToString() + " " + onCurve.ToString(); }
- #endif
- }
- }
|