Duality.Resources.Font.ProcessTextAdv C# (CSharp) Method

ProcessTextAdv() private method

private ProcessTextAdv ( string text, int index, GlyphData &glyphData, System.Drawing.Rect &uvRect, float &glyphXAdv, float &glyphXOff ) : void
text string
index int
glyphData GlyphData
uvRect System.Drawing.Rect
glyphXAdv float
glyphXOff float
return void
        private void ProcessTextAdv(string text, int index, out GlyphData glyphData, out Rect uvRect, out float glyphXAdv, out float glyphXOff)
        {
            char glyph = text[index];
            int charIndex = (int)glyph > CharLookup.Length ? 0 : CharLookup[(int)glyph];
            this.texture.LookupAtlas(charIndex, out uvRect);

            this.GetGlyphData(glyph, out glyphData);
            glyphXOff = -glyphData.offsetX;

            if (this.kerning && !this.monospace && !this.needsReload)
            {
                char glyphNext = index + 1 < text.Length ? text[index + 1] : ' ';
                GlyphData glyphDataNext;
                this.GetGlyphData(glyphNext, out glyphDataNext);

                int minSum = int.MaxValue;
                for (int k = 0; k < glyphData.kerningSamplesRight.Length; k++)
                    minSum = Math.Min(minSum, glyphData.kerningSamplesRight[k] + glyphDataNext.kerningSamplesLeft[k]);

                glyphXAdv = (this.monospace ? this.maxGlyphWidth : -glyphData.offsetX + glyphData.width) + this.spacing - minSum;
            }
            else
                glyphXAdv = (this.monospace ? this.maxGlyphWidth : -glyphData.offsetX + glyphData.width) + this.spacing;
        }