/// <summary> /// internal render /// </summary> internal override IImageAdapter _Render() { for (int t = 0; t < Glyphs.Count; t++) { GlyphChar glyph = (GlyphChar)Glyphs[t]; // Reposition the char in the string SizeF szString = GetTypoMeasure(Text.Substring(0, t + 1)); SizeF szChar = GetTypoMeasure(glyph.Character.ToString()); glyph.Panel.Position = new PointF(szString.Width - szChar.Width, 0); } // Perform Layout LayoutEngine.ArrangeGlyphs(); // Render final result GeneratedImage = GetTypoResult(); return(GeneratedImage); }
override internal IImageAdapter _Render() { IImageAdapter retVal = null; // Render ever glyph hosted by this container foreach (GlyphBase glyph in Glyphs) { glyph.Render(); } // Perform Layout LayoutEngine.Container = this; LayoutEngine.ArrangeGlyphs(); LayoutEngine.Container = null; // Compute final Image Size if (Panel.Size == SizeF.Empty) { float maxWidth = 0f; float maxHeight = 0f; foreach (GlyphBase glyph in Glyphs) { if (glyph.ComputedLayout.PositionF.X + glyph.ComputedLayout.SizeF.Width > maxWidth) { maxWidth = glyph.ComputedLayout.PositionF.X + glyph.ComputedLayout.SizeF.Width; } if (glyph.ComputedLayout.PositionF.Y + glyph.ComputedLayout.SizeF.Height > maxHeight) { maxHeight = glyph.ComputedLayout.PositionF.Y + glyph.ComputedLayout.SizeF.Height; } } retVal = new ImageAdapter((int)(maxWidth + .5f), (int)(maxHeight + .5f), BackgroundColor); } else { retVal = new ImageAdapter((int)(Panel.Size.Width + .5f), (int)(Panel.Size.Width + .5f), BackgroundColor); } //Render final Image foreach (GlyphBase glyph in Glyphs) { retVal = ImageUtility.CopyImageAdapter(retVal, glyph.GeneratedImage, glyph.ComputedLayout.Position, glyph.ComputedLayout.Size, true); } return(retVal); /* * LayoutEngine.ArrangeGlyphs((GlyphBase[])Glyphs.ToArray(typeof(GlyphBase))); * * IImageAdapter retVal = null; * int maxWidth = 0; * int maxHeight = 0; * // Determine the size of IImageAdapter * foreach (GlyphBase glyph in Glyphs) * { * if (glyph.Layout.PositionF.X + glyph.Layout.SizeF.Width > maxWidth) { maxWidth = (int)(glyph.Layout.PositionF.X + glyph.Layout.SizeF.Width); } * if (glyph.Layout.PositionF.Y + glyph.Layout.SizeF.Height > maxHeight) { maxHeight = (int)(glyph.Layout.PositionF.Y + glyph.Layout.SizeF.Height); } * } * retVal = new ImageAdapter(maxWidth, maxHeight, ColorByte.Empty); * * * foreach(GlyphBase glyph in Glyphs) * { * IImageAdapter image = glyph._Render(); * retVal = ImageUtility.CopyImageAdapter(retVal, image, glyph.Layout.Position, glyph.Layout.Size, true); * } * * // Update Image * Image = retVal; * * return retVal; */ }