public DrawText ( char str, int startAt, int len, |
||
str | char | |
startAt | int | |
len | int | |
point | ||
size | ||
return | void |
internal void PaintRuns(PaintVisitor p) { List <CssRun> tmpRuns = _runs; int j = tmpRuns.Count; if (j < 1) { return; } //----------------------- //iterate from each words CssBox latestOwner = null; DrawBoard innerCanvas = p.InnerDrawBoard; RequestFont enterFont = innerCanvas.CurrentFont; Color enterColor = innerCanvas.CurrentTextColor; for (int i = 0; i < j; ++i) { //----------------- #if DEBUG dbugCounter.dbugRunPaintCount++; #endif //----------------- CssRun w = tmpRuns[i]; switch (w.Kind) { case CssRunKind.SolidContent: { #if DEBUG //System.Diagnostics.Debug.WriteLine("ox,oy=" + p.CanvasOriginX + "," + p.CanvasOriginY); //System.Diagnostics.Debug.WriteLine("clip=" + p.CurrentClipRect); #endif Rectangle currentClipRect = p.CurrentClipRect; Rectangle wRect = new Rectangle((int)w.Left, (int)w.Top, (int)w.Width, (int)w.Height); wRect.Intersect(currentClipRect); #if DEBUG //System.Diagnostics.Debug.WriteLine("empty_clip=" + (wRect.Height == 0 || wRect.Width == 0)); #endif if (wRect.Height != 0 && wRect.Width != 0) { w.OwnerBox.Paint(p, new RectangleF(w.Left, w.Top, w.Width, w.Height)); } } break; case CssRunKind.BlockRun: { //Console.WriteLine("blockrun"); CssBlockRun blockRun = (CssBlockRun)w; int ox = p.CanvasOriginX; int oy = p.CanvasOriginY; //p.SetCanvasOrigin(ox + (int)(blockRun.Left + blockRun.ContentBox.LocalX), oy + (int)blockRun.Top); p.SetCanvasOrigin(ox + (int)(blockRun.Left), oy + (int)blockRun.Top); blockRun.ContentBox.Paint(p); p.SetCanvasOrigin(ox, oy); } break; case CssRunKind.Text: { if (latestOwner != w.OwnerBox) { //change latestOwner = w.OwnerBox; //change font when change owner p.InnerDrawBoard.CurrentFont = latestOwner.ResolvedFont; p.InnerDrawBoard.CurrentTextColor = latestOwner.ActualColor; } CssTextRun textRun = (CssTextRun)w; p.DrawText(CssBox.UnsafeGetTextBuffer(w.OwnerBox), textRun.TextStartIndex, textRun.TextLength, new PointF(w.Left, w.Top), new SizeF(w.Width, w.Height)); //RenderVxFormattedString formattedStr = CssTextRun.GetCachedFormatString(textRun); //if (formattedStr == null) //{ // formattedStr = p.CreateRenderVx(CssBox.UnsafeGetTextBuffer(w.OwnerBox), // textRun.TextStartIndex, // textRun.TextLength); // CssTextRun.SetCachedFormattedString(textRun, formattedStr); //} //if (formattedStr != null) //{ // p.DrawText(formattedStr, // new PointF(w.Left, w.Top), // new SizeF(w.Width, w.Height)); //} //else //{ // p.DrawText(CssBox.UnsafeGetTextBuffer(w.OwnerBox), // textRun.TextStartIndex, // textRun.TextLength, // new PointF(w.Left, w.Top), // new SizeF(w.Width, w.Height)); //} } break; default: { #if DEBUG // w.OwnerBox.dbugPaintTextWordArea(g, offset, w); #endif } break; } } innerCanvas.CurrentFont = enterFont; innerCanvas.CurrentTextColor = enterColor; }
internal void PaintRuns(PaintVisitor p) { List <CssRun> tmpRuns = _runs; int j = tmpRuns.Count; if (j < 1) { return; } //----------------------- //iterate from each words CssBox latestOwner = null; DrawBoard innerCanvas = p.InnerDrawBoard; RequestFont enterFont = innerCanvas.CurrentFont; Color enterColor = innerCanvas.CurrentTextColor; for (int i = 0; i < j; ++i) { //----------------- #if DEBUG dbugCounter.dbugRunPaintCount++; #endif //----------------- CssRun w = tmpRuns[i]; switch (w.Kind) { case CssRunKind.SolidContent: { w.OwnerBox.Paint(p, new RectangleF(w.Left, w.Top, w.Width, w.Height)); } break; case CssRunKind.BlockRun: { //Console.WriteLine("blockrun"); CssBlockRun blockRun = (CssBlockRun)w; int ox = p.CanvasOriginX; int oy = p.CanvasOriginY; //p.SetCanvasOrigin(ox + (int)(blockRun.Left + blockRun.ContentBox.LocalX), oy + (int)blockRun.Top); p.SetCanvasOrigin(ox + (int)(blockRun.Left), oy + (int)blockRun.Top); blockRun.ContentBox.Paint(p); p.SetCanvasOrigin(ox, oy); } break; case CssRunKind.Text: { if (latestOwner != w.OwnerBox) { //change latestOwner = w.OwnerBox; //change font when change owner p.InnerDrawBoard.CurrentFont = latestOwner.ResolvedFont; p.InnerDrawBoard.CurrentTextColor = latestOwner.ActualColor; } CssTextRun textRun = (CssTextRun)w; p.DrawText(CssBox.UnsafeGetTextBuffer(w.OwnerBox), textRun.TextStartIndex, textRun.TextLength, new PointF(w.Left, w.Top), new SizeF(w.Width, w.Height)); } break; default: { #if DEBUG // w.OwnerBox.dbugPaintTextWordArea(g, offset, w); #endif } break; } } innerCanvas.CurrentFont = enterFont; innerCanvas.CurrentTextColor = enterColor; }
internal void PaintRuns(PaintVisitor p) { //iterate from each words CssBox latestOwner = null; var innerCanvas = p.InnerCanvas; var enterFont = innerCanvas.CurrentFont; var enterColor = innerCanvas.CurrentTextColor; var tmpRuns = this._runs; int j = tmpRuns.Count; for (int i = 0; i < j; ++i) { //----------------- #if DEBUG dbugCounter.dbugRunPaintCount++; #endif //----------------- CssRun w = tmpRuns[i]; switch (w.Kind) { case CssRunKind.SolidContent: { w.OwnerBox.Paint(p, new RectangleF(w.Left, w.Top, w.Width, w.Height)); } break; case CssRunKind.BlockRun: { //Console.WriteLine("blockrun"); CssBlockRun blockRun = (CssBlockRun)w; int ox = p.CanvasOriginX; int oy = p.CanvasOriginY; p.SetCanvasOrigin(ox + (int)blockRun.Left, oy + (int)blockRun.Top); blockRun.ContentBox.Paint(p); p.SetCanvasOrigin(ox, oy); } break; case CssRunKind.Text: { if (latestOwner != w.OwnerBox) { //change latestOwner = w.OwnerBox; //change font when change owner p.InnerCanvas.CurrentFont = latestOwner.ResolvedFont; p.InnerCanvas.CurrentTextColor = latestOwner.ActualColor; } CssTextRun textRun = (CssTextRun)w; var wordPoint = new PointF(w.Left, w.Top); p.DrawText(CssBox.UnsafeGetTextBuffer(w.OwnerBox), textRun.TextStartIndex, textRun.TextLength, wordPoint, new SizeF(w.Width, w.Height)); } break; default: { #if DEBUG // w.OwnerBox.dbugPaintTextWordArea(g, offset, w); #endif } break; } } //--- //exit if (j > 0) { innerCanvas.CurrentFont = enterFont; innerCanvas.CurrentTextColor = enterColor; } }