using System; using System.Text; using System.Drawing; using System.Drawing.Drawing2D; using DevComponents.DotNetBar.Rendering; namespace DevComponents.DotNetBar { internal class Office2007DialogLauncherPainter : DialogLauncherPainter, IOffice2007Painter { #region IOffice2007Painter private Office2007ColorTable m_ColorTable = null; //new Office2007ColorTable(); /// /// Gets or sets color table used by renderer. /// public Office2007ColorTable ColorTable { get { return m_ColorTable; } set { m_ColorTable = value; } } #endregion #region Dialog Launcher Painter public override void PaintDialogLauncher(RibbonBarRendererEventArgs e) { Rectangle r = e.Bounds; Graphics g = e.Graphics; bool rightToLeft = (e.RibbonBar.RightToLeft == System.Windows.Forms.RightToLeft.Yes); Office2007DialogLauncherStateColorTable c = GetColorTable(e); if (!c.TopBackground.IsEmpty && !c.BottomBackground.IsEmpty) { Presentation.Rectangle pr = new Presentation.Rectangle( new Presentation.ShapeBorder(c.OuterBorder), new Presentation.ShapeFill(c.TopBackground)); pr.Padding = new Presentation.PaddingInfo(1, 1, 1, 1); Presentation.Rectangle prb = new Presentation.Rectangle(new Presentation.ShapeFill(c.BottomBackground)); prb.Size.Height = r.Height / 2; pr.Children.Add(prb); prb = new Presentation.Rectangle(new Presentation.ShapeBorder(c.InnerBorder)); pr.Children.Add(prb); Presentation.ShapePaintInfo pi = new Presentation.ShapePaintInfo(g, r); pr.Paint(pi); } Size size = new Size(Dpi.Width8, Dpi.Height8); // Get final dialog launcher bounds if (rightToLeft) r = new Rectangle(r.X + (r.Width - size.Width) / 2, r.Y + (r.Height - size.Height) / 2, size.Width, size.Height); else r = new Rectangle(r.X + (r.Width - size.Width)/2, r.Y + (r.Height - size.Height) / 2, size.Width, size.Height); SmoothingMode sm = g.SmoothingMode; g.SmoothingMode = SmoothingMode.Default; // Create the dialog launcher shape Presentation.ShapeBorder border = new Presentation.ShapeBorder(c.DialogLauncherShade, 1); Presentation.ShapeFill fill = new Presentation.ShapeFill(c.DialogLauncherShade); Presentation.Shape shape = new Presentation.Shape(); // Horizontal line Presentation.Line line = new Presentation.Line(new Presentation.Location(), new Presentation.Location(Dpi.Width6, 0), border); shape.Children.Add(line); // Vertical line line = new Presentation.Line(new Presentation.Location(), new Presentation.Location(0, Dpi.Width6), border); shape.Children.Add(line); Presentation.Rectangle rect = new Presentation.Rectangle(); rect.Fill = fill; rect.Location.X = Dpi.Width5; rect.Location.Y = Dpi.Height5; rect.Size.Width = Dpi.Width3; rect.Size.Height = Dpi.Height3; shape.Children.Add(rect); // Arrow line vertical line = new Presentation.Line(new Presentation.Location(Dpi.Width7, Dpi.Height4), new Presentation.Location(Dpi.Width7, Dpi.Height7), border); shape.Children.Add(line); // Arrow line horizontal line = new Presentation.Line(new Presentation.Location(Dpi.Width4, Dpi.Height7), new Presentation.Location(Dpi.Width7, Dpi.Height7), border); shape.Children.Add(line); // Arrow line cross line = new Presentation.Line(new Presentation.Location(Dpi.Width4, Dpi.Height4), new Presentation.Location(Dpi.Width5, Dpi.Height5), border); shape.Children.Add(line); r.Offset(Dpi.Width1, Dpi.Height1); Presentation.ShapePaintInfo p = new Presentation.ShapePaintInfo(g, r); shape.Paint(p); border.Color1 = c.DialogLauncher; fill.Color1 = c.DialogLauncher; r.Offset(-Dpi.Width1, -Dpi.Height1); p.Bounds = r; shape.Paint(p); g.SmoothingMode = sm; } private Office2007DialogLauncherStateColorTable GetColorTable(RibbonBarRendererEventArgs e) { if (e.Pressed) return m_ColorTable.DialogLauncher.Pressed; else if (e.MouseOver) return m_ColorTable.DialogLauncher.MouseOver; else return m_ColorTable.DialogLauncher.Default; } #endregion } }