/// <summary>
        /// Compute unshaped glyph run object from the specified character-based info
        /// </summary>
        internal sealed override GlyphRun ComputeUnshapedGlyphRun(
            Point origin,
            char[]        characterString,
            IList <double> characterAdvances
            )
        {
            bool          nullFont;
            GlyphTypeface glyphTypeface = GetGlyphTypeface(out nullFont);

            Invariant.Assert(glyphTypeface != null);

            return(glyphTypeface.ComputeUnshapedGlyphRun(
                       origin,
                       new CharacterBufferRange(
                           characterString,
                           0, // offsetToFirstChar
                           characterString.Length
                           ),
                       characterAdvances,
                       _emSize,
                       (float)_properties.PixelsPerDip,
                       _properties.FontHintingEmSize,
                       nullFont,
                       CultureMapper.GetSpecificCulture(_properties.CultureInfo),
                       (_shapeTypeface == null || _shapeTypeface.DeviceFont == null) ? null : _shapeTypeface.DeviceFont.Name,
                       _textFormattingMode
                       ));
        }