public override void writeDatasetAttributes(string datasetName, StringVector attributeNames, Int32Vector values) { throw new NotImplementedException(); }
private void InitializeMetrics() { Contract.Requires(_typeface != null, "Typeface cannot be null."); Contract.Requires(_mapping != null, "Mapping cannot be null."); Contract.Requires(_transform != null, "Transform must be initialized first."); ushort glyph = _mapping.Glyph.GetValueOrDefault(); checked { _emHeight = (ushort)Round(_typeface.Height * _emSize); _emBaseline = (short)Round(_typeface.Baseline * _emSize); } // System.Diagnostics.Debug.WriteLine("{2}: {0} {1}", // _typeface.LeftSideBearings[glyph] * _emSize, // _typeface.RightSideBearings[glyph] * _emSize, (char)(int)_mapping.Character); if (_antialiasLevel == AntialiasingLevel.None) { _emSideBearing = new Int32Thickness( Round(_typeface.LeftSideBearings[glyph] * _emSize), Round(_typeface.TopSideBearings[glyph] * _emSize), Round(_typeface.RightSideBearings[glyph] * _emSize), Round(_typeface.BottomSideBearings[glyph] * _emSize) ); } else { _emSideBearing = new Int32Thickness( Floor(_typeface.LeftSideBearings[glyph] * _emSize), Floor(_typeface.TopSideBearings[glyph] * _emSize), Floor(_typeface.RightSideBearings[glyph] * _emSize), Floor(_typeface.BottomSideBearings[glyph] * _emSize) ); } Rect advance = new Rect(new Size(_typeface.AdvanceWidths[glyph], _typeface.AdvanceHeights[glyph])); Rect advanceTransformed = _transform.TransformBounds(advance); _emAdvance = new Int32Vector( Round(advanceTransformed.Width * _emSize), Round(advanceTransformed.Height * _emSize) ); if (!_transform.Value.IsIdentity) { Rect boundBox = _run.ComputeInkBoundingBox(); Rect advanceBox = boundBox.Add(_emSideBearing); Rect boundBoxTransformed = _transform.TransformBounds(boundBox); Rect advanceBoxTransformed = _transform.TransformBounds(advanceBox); Thickness bearingTransformed = boundBox.Subtract(advanceBox); _emSideBearing = new Int32Thickness( Round(bearingTransformed.Left), Round(bearingTransformed.Top), Round(bearingTransformed.Right), Round(bearingTransformed.Bottom) ); } }