Пример #1
0
        /// <summary>
        /// Applies vertical alignment to the linebox
        /// </summary>
        /// <param name="g"></param>
        /// <param name="lineBox"></param>
        private static void ApplyVerticalAlignment(Graphics g, CssLineBox lineBox)
        {
            bool          isTableCell = lineBox.OwnerBox.Display == CssConstants.TableCell;
            float         baseline    = lineBox.GetMaxWordBottom() - GetDescent(lineBox.OwnerBox.ActualFont) - 2;
            List <CssBox> boxes       = new List <CssBox>(lineBox.Rectangles.Keys);

            foreach (CssBox b in boxes)
            {
                float ascent  = GetAscent(b.ActualFont);
                float descent = GetDescent(b.ActualFont);

                //Important notes on http://www.w3.org/TR/CSS21/tables.html#height-layout
                switch (b.VerticalAlign)
                {
                case CssConstants.Sub:
                    lineBox.SetBaseLine(g, b, baseline + lineBox.Rectangles[b].Height * .2f);
                    break;

                case CssConstants.Super:
                    lineBox.SetBaseLine(g, b, baseline - lineBox.Rectangles[b].Height * .2f);
                    break;

                case CssConstants.TextTop:

                    break;

                case CssConstants.TextBottom:

                    break;

                case CssConstants.Top:

                    break;

                case CssConstants.Bottom:

                    break;

                case CssConstants.Middle:

                    break;

                default:
                    //case: baseline
                    lineBox.SetBaseLine(g, b, baseline);
                    break;
                }

                ////Graphic cues
                //g.FillRectangle(Brushes.Aqua, r.Left, r.Top, r.Width, ascent);
                //g.FillRectangle(Brushes.Yellow, r.Left, r.Top + ascent, r.Width, descent);
                //g.DrawLine(Pens.Fuchsia, r.Left, baseline, r.Right, baseline);
            }
        }
Пример #2
0
        private static void ApplyVerticalAlignment(Graphics g, CssLineBox lineBox)
        {
            float maxWordBottom = lineBox.GetMaxWordBottom() - CssLayoutEngine.GetDescent(lineBox.OwnerBox.ActualFont) - 2f;

            foreach (CssBox cssBox in new List <CssBox>(lineBox.Rectangles.Keys))
            {
                CssLayoutEngine.GetAscent(cssBox.ActualFont);
                CssLayoutEngine.GetDescent(cssBox.ActualFont);
                string verticalAlign = cssBox.VerticalAlign;
                string str           = verticalAlign;
                if (verticalAlign != null)
                {
                    switch (str)
                    {
                    case "sub":
                    {
                        RectangleF item = lineBox.Rectangles[cssBox];
                        lineBox.SetBaseLine(g, cssBox, maxWordBottom + item.Height * 0.2f);
                        continue;
                    }

                    case "super":
                    {
                        RectangleF rectangleF = lineBox.Rectangles[cssBox];
                        lineBox.SetBaseLine(g, cssBox, maxWordBottom - rectangleF.Height * 0.2f);
                        continue;
                    }

                    case "text-top":
                    case "text-bottom":
                    case "top":
                    case "bottom":
                    case "middle":
                    {
                        continue;
                    }
                    }
                }
                lineBox.SetBaseLine(g, cssBox, maxWordBottom);
            }
        }
Пример #3
0
        /// <summary>
        /// Applies vertical alignment to the linebox
        /// </summary>
        /// <param name="g"></param>
        /// <param name="lineBox"></param>
        private static void ApplyVerticalAlignment(Graphics g, CssLineBox lineBox)
        {

            bool isTableCell = lineBox.OwnerBox.Display == CssConstants.TableCell;
            float baseline = lineBox.GetMaxWordBottom() - GetDescent(lineBox.OwnerBox.ActualFont) - 2;
            List<CssBox> boxes = new List<CssBox>(lineBox.Rectangles.Keys);

            foreach (CssBox b in boxes)
            {
                float ascent = GetAscent(b.ActualFont);
                float descent = GetDescent(b.ActualFont);

                //Important notes on http://www.w3.org/TR/CSS21/tables.html#height-layout
                switch (b.VerticalAlign)
                {
                    case CssConstants.Sub:
                        lineBox.SetBaseLine(g, b, baseline + lineBox.Rectangles[b].Height * .2f);
                        break;
                    case CssConstants.Super:
                        lineBox.SetBaseLine(g, b, baseline - lineBox.Rectangles[b].Height * .2f);
                        break;
                    case CssConstants.TextTop:

                        break;
                    case CssConstants.TextBottom:

                        break;
                    case CssConstants.Top:
                        
                        break;
                    case CssConstants.Bottom:

                        break;
                    case CssConstants.Middle:

                        break;
                    default:
                        //case: baseline
                        lineBox.SetBaseLine(g, b, baseline);
                        break;
                }

                ////Graphic cues
                //g.FillRectangle(Brushes.Aqua, r.Left, r.Top, r.Width, ascent);
                //g.FillRectangle(Brushes.Yellow, r.Left, r.Top + ascent, r.Width, descent);
                //g.DrawLine(Pens.Fuchsia, r.Left, baseline, r.Right, baseline);

            }


        }