Пример #1
0
 public override void writeDatasetAttributes(string datasetName, StringVector attributeNames, Int32Vector values)
 {
     throw new NotImplementedException();
 }
Пример #2
0
            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)
                        );
                }
            }