/// <summary> /// Applies vertical alignment to the linebox /// </summary> /// <param name="g"></param> /// <param name="lineBox"></param> private static void ApplyVerticalAlignment(Graphics g, LineBox lineBox) { var isTableCell = lineBox.OwnerBox.Display == Constants.TableCell; var baseline = lineBox.GetMaxWordBottom() - GetDescent(lineBox.OwnerBox.ActualFont) - 2; var boxes = new List<Box>(lineBox.Rectangles.Keys); foreach (var b in boxes) { var ascent = GetAscent(b.ActualFont); var descent = GetDescent(b.ActualFont); //Important notes on http://www.w3.org/TR/CSS21/tables.html#height-layout switch (b.VerticalAlign) { case Constants.Sub: lineBox.SetBaseLine(g, b, baseline + lineBox.Rectangles[b].Height*.2f); break; case Constants.Super: lineBox.SetBaseLine(g, b, baseline - lineBox.Rectangles[b].Height*.2f); break; case Constants.TextTop: break; case Constants.TextBottom: break; case Constants.Top: break; case Constants.Bottom: break; case Constants.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); } }