mirror of
https://github.com/ZuneDev/MicrosoftIris.git
synced 2026-07-27 13:13:29 -07:00
Add project files.
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
// Decompiled with JetBrains decompiler
|
||||
// Type: Microsoft.Iris.Drawing.TextMeasureParams
|
||||
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
||||
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
|
||||
// Assembly location: C:\Program Files\Zune\UIX.dll
|
||||
|
||||
using Microsoft.Iris.RenderAPI.Drawing;
|
||||
using Microsoft.Iris.Session;
|
||||
using Microsoft.Iris.ViewItems;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Microsoft.Iris.Drawing
|
||||
{
|
||||
internal struct TextMeasureParams
|
||||
{
|
||||
public TextMeasureParams.MarshalledData _data;
|
||||
public TextStyle _textStyle;
|
||||
public TextMeasureParams.FormattedRange[] _formattedRanges;
|
||||
public TextStyle.MarshalledData[] _formattedRangeStyles;
|
||||
private GCHandle[] _formattedRangeStyleFontFaces;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
if (!UISession.Default.IsRtl)
|
||||
return;
|
||||
_data._flags |= MeasureFlags.IsRtl;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_formattedRangeStyleFontFaces == null)
|
||||
return;
|
||||
foreach (GCHandle rangeStyleFontFace in _formattedRangeStyleFontFaces)
|
||||
{
|
||||
if (rangeStyleFontFace.IsAllocated)
|
||||
rangeStyleFontFace.Free();
|
||||
}
|
||||
_formattedRangeStyleFontFaces = null;
|
||||
}
|
||||
|
||||
public unsafe void SetContent(char* content)
|
||||
{
|
||||
_data._flags |= MeasureFlags.Content;
|
||||
_data._content = content;
|
||||
}
|
||||
|
||||
public void SetFormat(LineAlignment lineAlignment, TextStyle style)
|
||||
{
|
||||
switch (lineAlignment)
|
||||
{
|
||||
case LineAlignment.Near:
|
||||
_data._alignment = 1;
|
||||
break;
|
||||
case LineAlignment.Center:
|
||||
_data._alignment = 3;
|
||||
break;
|
||||
case LineAlignment.Far:
|
||||
_data._alignment = 2;
|
||||
break;
|
||||
}
|
||||
_textStyle = style;
|
||||
}
|
||||
|
||||
public void TrimLeftSideBearing() => _data._flags |= MeasureFlags.TrimLeftSideBearing;
|
||||
|
||||
public void SetEditMode(bool inEditMode)
|
||||
{
|
||||
if (inEditMode)
|
||||
_data._flags |= MeasureFlags.FormatOnly;
|
||||
else
|
||||
_data._flags &= ~MeasureFlags.FormatOnly;
|
||||
}
|
||||
|
||||
public void SetScale(float scale) => _data._scale = scale;
|
||||
|
||||
public void SetWordWrap(bool wordWrap)
|
||||
{
|
||||
_data._flags |= MeasureFlags.WordWrap;
|
||||
if (wordWrap)
|
||||
_data._flags |= MeasureFlags.WordWrapValue;
|
||||
else
|
||||
_data._flags &= ~MeasureFlags.WordWrapValue;
|
||||
}
|
||||
|
||||
public void SetPasswordChar(char passwordChar)
|
||||
{
|
||||
_data._flags |= MeasureFlags.PasswordMasked;
|
||||
_data._passwordChar = passwordChar;
|
||||
}
|
||||
|
||||
public void SetConstraint(SizeF constraint) => _data._constraint = constraint;
|
||||
|
||||
public void AllocateFormattedRanges(int formattedRangeCount, int formattedRangeStylesCount)
|
||||
{
|
||||
_formattedRanges = new TextMeasureParams.FormattedRange[formattedRangeCount];
|
||||
_formattedRangeStyles = new TextStyle.MarshalledData[formattedRangeStylesCount];
|
||||
_formattedRangeStyleFontFaces = new GCHandle[formattedRangeStylesCount];
|
||||
_data._formattedRangeCount = formattedRangeCount;
|
||||
_data._formattedRangeStylesCount = formattedRangeStylesCount;
|
||||
}
|
||||
|
||||
public TextMeasureParams.FormattedRange[] FormattedRanges => _formattedRanges;
|
||||
|
||||
public unsafe void SetFormattedRangeStyle(int index, TextStyle style)
|
||||
{
|
||||
_formattedRangeStyles[index] = new TextStyle.MarshalledData(style);
|
||||
string fontFace = style.FontFace;
|
||||
if (fontFace == null)
|
||||
return;
|
||||
GCHandle gcHandle = GCHandle.Alloc(fontFace, GCHandleType.Pinned);
|
||||
_formattedRangeStyles[index]._fontFace = (char*)gcHandle.AddrOfPinnedObject().ToPointer();
|
||||
_formattedRangeStyleFontFaces[index] = gcHandle;
|
||||
}
|
||||
|
||||
internal struct MarshalledData
|
||||
{
|
||||
public TextMeasureParams.MeasureFlags _flags;
|
||||
public byte _alignment;
|
||||
[MarshalAs(UnmanagedType.U2)]
|
||||
public char _passwordChar;
|
||||
public unsafe char* _content;
|
||||
public float _scale;
|
||||
public SizeF _constraint;
|
||||
public unsafe TextStyle.MarshalledData* _pTextStyle;
|
||||
public int _formattedRangeCount;
|
||||
public unsafe TextMeasureParams.FormattedRange* _pFormattedRanges;
|
||||
public int _formattedRangeStylesCount;
|
||||
public unsafe TextStyle.MarshalledData* _pFormattedRangeStyles;
|
||||
}
|
||||
|
||||
[Flags]
|
||||
internal enum MeasureFlags : byte
|
||||
{
|
||||
None = 0,
|
||||
Content = 1,
|
||||
IsRtl = 2,
|
||||
WordWrap = 4,
|
||||
WordWrapValue = 8,
|
||||
PasswordMasked = 16, // 0x10
|
||||
TrimLeftSideBearing = 32, // 0x20
|
||||
FormatOnly = 64, // 0x40
|
||||
}
|
||||
|
||||
internal struct FormattedRange
|
||||
{
|
||||
public int FirstCharacter;
|
||||
public int LastCharacter;
|
||||
public Color Color;
|
||||
public int StyleIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user