示例#1
0
        /// <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);
        }
示例#2
0
        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;
 */
        }