CanvasJustificationOpportunity[] GetJustificationOpportunities(CanvasTextAnalyzer textAnalyzer, LayoutBox layoutBox, out CanvasGlyph[] allGlyphs) { int layoutBoxGlyphCount = layoutBox.GetGlyphCount(); CanvasJustificationOpportunity[] justificationOpportunities = new CanvasJustificationOpportunity[layoutBoxGlyphCount]; allGlyphs = new CanvasGlyph[layoutBoxGlyphCount]; int glyphIndex = 0; for (int i = 0; i < layoutBox.GlyphRuns.Count; i++) { if (layoutBox.GlyphRuns[i].Glyphs.Count == 0) { continue; } CanvasCharacterRange range = layoutBox.GlyphRuns[i].GetRange(); var glyphRunClusterMap = layoutBox.GlyphRuns[i].GetClusterMap(range); var glyphRunShaping = layoutBox.GlyphRuns[i].GetShaping(); var justificationOpportunitiesThisGlyphRun = textAnalyzer.GetJustificationOpportunities( range, layoutBox.GlyphRuns[i].FormattingSpan.FontFace, layoutBox.GlyphRuns[i].FormattingSpan.FontSize, layoutBox.GlyphRuns[i].FormattingSpan.Script, glyphRunClusterMap, glyphRunShaping); for (int j = 0; j < layoutBox.GlyphRuns[i].Glyphs.Count; ++j) { justificationOpportunities[glyphIndex + j] = justificationOpportunitiesThisGlyphRun[j]; allGlyphs[glyphIndex + j] = layoutBox.GlyphRuns[i].Glyphs[j]; } glyphIndex += layoutBox.GlyphRuns[i].Glyphs.Count; } return(justificationOpportunities); }
CanvasJustificationOpportunity[] GetJustificationOpportunities(CanvasTextAnalyzer textAnalyzer, int startingGlyphRunIndex, int endingGlyphRunIndex, int glyphCount, out CanvasGlyph[] allGlyphs) { CanvasJustificationOpportunity[] justificationOpportunities = new CanvasJustificationOpportunity[glyphCount]; allGlyphs = new CanvasGlyph[glyphCount]; int glyphIndex = 0; for (int i = startingGlyphRunIndex; i < endingGlyphRunIndex; ++i) { if (glyphRuns[i].Glyphs.Count == 0) { continue; } CanvasCharacterRange range = glyphRuns[i].GetRange(); var glyphRunClusterMap = glyphRuns[i].GetClusterMap(range); var glyphRunShaping = glyphRuns[i].GetShaping(); var justificationOpportunitiesThisGlyphRun = textAnalyzer.GetJustificationOpportunities( range, glyphRuns[i].FormattingSpan.FontFace, glyphRuns[i].FormattingSpan.FontSize, glyphRuns[i].FormattingSpan.Script, glyphRunClusterMap, glyphRunShaping); for (int j = 0; j < glyphRuns[i].Glyphs.Count; ++j) { justificationOpportunities[glyphIndex + j] = justificationOpportunitiesThisGlyphRun[j]; allGlyphs[glyphIndex + j] = glyphRuns[i].Glyphs[j]; } glyphIndex += glyphRuns[i].Glyphs.Count; } return(justificationOpportunities); }