public void DoLayout() { //user can use other native methods //to do the layout *** //the following code is how-to-layout with //our Typography lib // //then at this step //we calculate span size //resolve each font style _glyphLayout.FontSizeInPoints = FontSizeInPts; // _glyphLayout.EnableComposition = true; _glyphLayout.EnableLigature = true; int lineCount = _lines.Count; List <GlyphPlan> outputGlyphPlan = new List <GlyphPlan>(); GlyphPlanBuffer glyphPlanBuffer = new GlyphPlanBuffer(outputGlyphPlan); Typeface selectedTypeface = this.DefaultTypeface; for (int i = 0; i < lineCount; ++i) { EditableTextLine line = _lines[i]; List <IRun> runList = line.UnsageGetTextRunList(); int runCount = runList.Count; for (int r = 0; r < runCount; ++r) { TextRun tt = runList[r] as TextRun; if (tt == null) { continue; } //this is text run if (tt.IsMeasured) { continue; } // TextRunFontStyle fontStyle = tt.FontStyle; //resolve to actual font face TextBuffer buffer = tt.TextBuffer; char[] rawBuffer = buffer.UnsafeGetInternalBuffer(); int preCount = outputGlyphPlan.Count; _glyphLayout.Layout(selectedTypeface, rawBuffer, tt.StartAt, tt.Len, outputGlyphPlan); int postCount = outputGlyphPlan.Count; // tt.SetGlyphPlanSeq(new GlyphPlanSequence(glyphPlanBuffer, preCount, postCount - preCount)); tt.IsMeasured = true; // } } }
public GlyphPlanSequence(GlyphPlanBuffer glyphBuffer, int startAt, int len) { this.glyphBuffer = glyphBuffer; this.startAt = startAt; this.len = (ushort)len; }
public static GlyphPlanList UnsafeGetInteralGlyphPlanList(GlyphPlanSequence planSeq) { return(GlyphPlanBuffer.UnsafeGetGlyphPlanList(planSeq.glyphBuffer)); }
public static GlyphPlanList UnsafeGetGlyphPlanList(GlyphPlanBuffer buffer) { return(buffer._glyphPlans); }