using System; using System.Drawing; using System.Text; namespace DevComponents.DotNetBar.Rendering { /// /// Represents the painter for ColorItem in Office 2007 style /// internal class Office2007ColorItemPainter : ColorItemPainter, 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 Internal Implementation public override void PaintColorItem(ColorItemRendererEventArgs e) { Graphics g = e.Graphics; ColorItem item = e.ColorItem; Rectangle r = item.Bounds; Color borderColor = m_ColorTable.ColorItem.Border; Color outerHotColor = m_ColorTable.ColorItem.MouseOverOuterBorder; Color innerHotColor = m_ColorTable.ColorItem.MouseOverInnerBorder; System.Drawing.Drawing2D.SmoothingMode sm = g.SmoothingMode; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default; Region clip = g.Clip; g.SetClip(r); Color selectedColor = Color.Empty; ColorPickerDropDown cpd = null; BaseItem parent = item.Parent; while (parent != null) { if (parent is ColorPickerDropDown) { cpd = parent as ColorPickerDropDown; break; } parent = parent.Parent; } if (cpd != null) selectedColor = cpd.SelectedColor; try { if (!item.Color.IsEmpty) { Rectangle fill = r; fill.Inflate(1, 1); DisplayHelp.FillRectangle(g, fill, item.Color, Color.Empty); } if (item.IsMouseOver || selectedColor == item.Color) { Rectangle inner = r; inner.Inflate(-1, -1); DisplayHelp.DrawRectangle(g, innerHotColor, inner); DisplayHelp.DrawRectangle(g, outerHotColor, r); } else { eColorItemBorder border = item.Border; if (border == eColorItemBorder.All) DisplayHelp.DrawRectangle(g, borderColor, r); else if (border != eColorItemBorder.None) { using (Pen pen = new Pen(borderColor)) { if ((border & eColorItemBorder.Left) == eColorItemBorder.Left) g.DrawLine(pen, r.X, r.Y, r.X, r.Bottom - 1); if ((border & eColorItemBorder.Right) == eColorItemBorder.Right) g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, r.Bottom - 1); if ((border & eColorItemBorder.Top) == eColorItemBorder.Top) g.DrawLine(pen, r.X, r.Y, r.Right - 1, r.Y); if ((border & eColorItemBorder.Bottom) == eColorItemBorder.Bottom) g.DrawLine(pen, r.X, r.Bottom - 1, r.Right - 1, r.Bottom - 1); } } } } finally { if (clip != null) g.Clip = clip; else g.ResetClip(); } g.SmoothingMode = sm; } #endregion } }