internal static CCTLLine NewCTLLine()
 {
     var newLine = new CCTLLine();
     newLine.glyphRun = new List<LetterInfo>();
     newLine.bounds = CCSize.Zero;
     return newLine;
 }
Beispiel #2
0
        public CCTLLine GetLine(int startRange, int endRange)
        {
            var breakText = label.Text;

            var stringRange  = breakText.Substring(startRange, endRange - startRange);
            int stringLength = string.IsNullOrEmpty(stringRange) ? 0 : stringRange.TrimEnd().Length;

            if (stringLength <= 0)
            {
                return(CCTLLine.NewCTLLine());
            }

            endRange = startRange + stringLength;

            CCFontLetterDefinition letterDefinition = new CCFontLetterDefinition();

            int charXOffset = 0;
            int charYOffset = 0;
            int charAdvance = 0;

            CCPoint letterPosition;
            var     nextFontPositionX        = 0.0f;
            var     nextFontPositionY        = 0.0f;
            var     contentScaleFactorWidth  = CCLabel.DefaultTexelToContentSizeRatios.Width;
            var     contentScaleFactorHeight = CCLabel.DefaultTexelToContentSizeRatios.Height;
            var     line = CCTLLine.NewCTLLine();
            var     additionalKerning = label.AdditionalKerning;

            for (int x = startRange; x < endRange; x++)
            {
                var c = breakText[x];

                if (fontAtlas.GetLetterDefinitionForChar(c, out letterDefinition))
                {
                    charXOffset = (int)letterDefinition.XOffset;
                    charYOffset = (int)letterDefinition.YOffset;
                    charAdvance = (int)letterDefinition.XAdvance;
                }
                else
                {
                    charXOffset = -1;
                    charYOffset = -1;
                    charAdvance = -1;
                }

                var kerning = kernings[x];
                letterDefinition.Kerning = kerning;

                letterPosition.X = (nextFontPositionX + charXOffset + kerning) / contentScaleFactorWidth;
                letterPosition.Y = (nextFontPositionY - charYOffset) / contentScaleFactorHeight;


                nextFontPositionX += charAdvance + kerning + additionalKerning;

                line.AddGlyph(letterPosition, letterDefinition, x);
            }

            return(line);
        }
Beispiel #3
0
        internal static CCTLLine NewCTLLine()
        {
            var temp = new CCTLLine();

            temp.glyphRun = new List <LetterInfo>();
            temp.bounds   = CCSize.Zero;
            return(temp);
        }
Beispiel #4
0
        internal static CCTLLine NewCTLLine()
        {
            var newLine = new CCTLLine();

            newLine.glyphRun = new List <LetterInfo>();
            newLine.bounds   = CCSize.Zero;
            return(newLine);
        }