123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- #region MIT License
- #endregion
- using System;
- using System.Runtime.InteropServices;
- using SharpFont.Internal;
- namespace SharpFont
- {
-
-
-
- public sealed class FTSize : IDisposable
- {
- #region Fields
- private bool userAlloc;
- private bool disposed;
- private bool duplicate;
- private IntPtr reference;
- private SizeRec rec;
- private Face parentFace;
- #endregion
- #region Constructors
-
-
-
-
- public FTSize(Face parent)
- {
- IntPtr reference;
- Error err = FT.FT_New_Size(parent.Reference, out reference);
- if (err != Error.Ok)
- throw new FreeTypeException(err);
- Reference = reference;
- userAlloc = true;
- }
- internal FTSize(IntPtr reference, bool userAlloc, Face parentFace)
- {
- Reference = reference;
- this.userAlloc = userAlloc;
- if (parentFace != null)
- {
- this.parentFace = parentFace;
- parentFace.AddChildSize(this);
- }
- else
- {
- duplicate = true;
- }
- }
-
-
-
- ~FTSize()
- {
- Dispose(false);
- }
- #endregion
- #region Properties
-
-
-
- public bool IsDisposed
- {
- get
- {
- return disposed;
- }
- }
-
-
-
- public Face Face
- {
- get
- {
- if (disposed)
- throw new ObjectDisposedException("Face", "Cannot access a disposed object.");
- return parentFace;
- }
- }
-
-
-
-
- public Generic Generic
- {
- get
- {
- if (disposed)
- throw new ObjectDisposedException("Generic", "Cannot access a disposed object.");
- return new Generic(rec.generic);
- }
- set
- {
- if (disposed)
- throw new ObjectDisposedException("Generic", "Cannot access a disposed object.");
- value.WriteToUnmanagedMemory(new IntPtr(reference.ToInt64() + Marshal.OffsetOf(typeof(FaceRec), "generic").ToInt64()));
- Reference = reference;
- }
- }
-
-
-
- public SizeMetrics Metrics
- {
- get
- {
- if (disposed)
- throw new ObjectDisposedException("Metrics", "Cannot access a disposed object.");
- return new SizeMetrics(rec.metrics);
- }
- }
- internal IntPtr Reference
- {
- get
- {
- if (disposed)
- throw new ObjectDisposedException("Reference", "Cannot access a disposed object.");
- return reference;
- }
- set
- {
- if (disposed)
- throw new ObjectDisposedException("Reference", "Cannot access a disposed object.");
- reference = value;
- this.rec = PInvokeHelper.PtrToStructure<SizeRec>(reference);
- }
- }
- #endregion
- #region Public Methods
-
-
-
-
-
-
-
-
-
-
-
-
- public void Activate()
- {
- if (disposed)
- throw new ObjectDisposedException("Activate", "Cannot access a disposed object.");
- Error err = FT.FT_Activate_Size(Reference);
- if (err != Error.Ok)
- throw new FreeTypeException(err);
- }
-
-
-
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- #endregion
- #region Private Methods
- private void Dispose(bool disposing)
- {
- if (!disposed)
- {
- disposed = true;
-
- if (userAlloc && !duplicate)
- {
- Error err = FT.FT_Done_Size(reference);
- if (err != Error.Ok)
- throw new FreeTypeException(err);
-
-
-
- if (!parentFace.IsDisposed)
- parentFace.RemoveChildSize(this);
- }
- reference = IntPtr.Zero;
- rec = null;
- }
- }
- #endregion
- }
- }
|