Exemplo n.º 1
0
        public static void CreateLineBoxes(Graphics g, CssBox blockBox)
        {
            blockBox.LineBoxes.Clear();
            float      actualRight      = blockBox.ActualRight - blockBox.ActualPaddingRight - blockBox.ActualBorderRightWidth;
            PointF     location         = blockBox.Location;
            float      x                = location.X + blockBox.ActualPaddingLeft - 0f + blockBox.ActualBorderLeftWidth;
            PointF     pointF           = blockBox.Location;
            float      y                = pointF.Y + blockBox.ActualPaddingTop - 0f + blockBox.ActualBorderTopWidth;
            float      actualTextIndent = x + blockBox.ActualTextIndent;
            float      single           = y;
            float      single1          = y;
            float      single2          = 0f;
            CssLineBox cssLineBox       = new CssLineBox(blockBox);

            CssLayoutEngine.FlowBox(g, blockBox, blockBox, actualRight, single2, x, ref cssLineBox, ref actualTextIndent, ref single, ref single1);
            foreach (CssLineBox lineBox in blockBox.LineBoxes)
            {
                CssLayoutEngine.BubbleRectangles(blockBox, lineBox);
                lineBox.AssignRectanglesToBoxes();
                CssLayoutEngine.ApplyAlignment(g, lineBox);
                if (blockBox.Direction != "rtl")
                {
                    continue;
                }
                CssLayoutEngine.ApplyRightToLeft(lineBox);
            }
            blockBox.ActualBottom = single1 + blockBox.ActualPaddingBottom + blockBox.ActualBorderBottomWidth;
        }
Exemplo n.º 2
0
 private static void FlowBox(Graphics g, CssBox blockbox, CssBox box, float maxright, float linespacing, float startx, ref CssLineBox line, ref float curx, ref float cury, ref float maxbottom)
 {
     box.FirstHostingLineBox = line;
     foreach (CssBox cssBox in box.Boxes)
     {
         float actualMarginLeft        = cssBox.ActualMarginLeft + cssBox.ActualBorderLeftWidth + cssBox.ActualPaddingLeft;
         float actualMarginRight       = cssBox.ActualMarginRight + cssBox.ActualBorderRightWidth + cssBox.ActualPaddingRight;
         float actualBorderTopWidth    = cssBox.ActualBorderTopWidth;
         float actualPaddingTop        = cssBox.ActualPaddingTop;
         float actualBorderBottomWidth = cssBox.ActualBorderBottomWidth;
         float single = cssBox.ActualPaddingTop;
         cssBox.RectanglesReset();
         cssBox.MeasureWordsSize(g);
         curx = curx + actualMarginLeft;
         if (cssBox.Words.Count <= 0)
         {
             CssLayoutEngine.FlowBox(g, blockbox, cssBox, maxright, linespacing, startx, ref line, ref curx, ref cury, ref maxbottom);
         }
         else
         {
             foreach (CssBoxWord word in cssBox.Words)
             {
                 if (cssBox.WhiteSpace != "nowrap" && curx + word.Width + actualMarginRight > maxright || word.IsLineBreak)
                 {
                     curx = startx;
                     cury = maxbottom + linespacing;
                     line = new CssLineBox(blockbox);
                     if (word.IsImage || word.Equals(cssBox.FirstWord))
                     {
                         curx = curx + actualMarginLeft;
                     }
                 }
                 line.ReportExistanceOf(word);
                 word.Left = curx;
                 word.Top  = cury;
                 curx      = word.Right;
                 maxbottom = Math.Max(maxbottom, word.Bottom);
                 CssLayoutEngine._lastTreatedWord = word;
             }
         }
         curx = curx + actualMarginRight;
     }
     box.LastHostingLineBox = line;
 }