91 lines
4.0 KiB
C#
91 lines
4.0 KiB
C#
using System;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.Drawing.Drawing2D;
|
|
|
|
namespace DevComponents.DotNetBar.Rendering
|
|
{
|
|
/// <summary>
|
|
/// Represents painter for Office 2007 style ribbon overflow button.
|
|
/// </summary>
|
|
internal class Office2007RibbonOverflowPainter : Office2007ButtonItemPainter
|
|
{
|
|
public override Rectangle GetImageRectangle(ButtonItem button, ItemPaintArgs pa, CompositeImage image)
|
|
{
|
|
Rectangle imageRect = Rectangle.Empty;
|
|
bool isOnMenu = IsOnMenu(button, pa);
|
|
|
|
// Calculate image position
|
|
if (image != null)
|
|
{
|
|
imageRect.Width = image.Width + 16;
|
|
imageRect.Height = image.Height + 16;
|
|
imageRect.X = button.DisplayRectangle.X + (button.DisplayRectangle.Width - imageRect.Width) / 2;
|
|
imageRect.Y = button.DisplayRectangle.Y + 3;
|
|
}
|
|
|
|
return imageRect;
|
|
}
|
|
|
|
public override void PaintButtonImage(ButtonItem button, ItemPaintArgs pa, CompositeImage image, Rectangle imagebounds)
|
|
{
|
|
if (imagebounds.Width <= 0 || imagebounds.Height <= 0) return;
|
|
|
|
// Paint image background
|
|
RibbonOverflowButtonItem overflow = button as RibbonOverflowButtonItem;
|
|
if (overflow == null || overflow.RibbonBar==null)
|
|
{
|
|
base.PaintButtonImage(button, pa, image, imagebounds);
|
|
return;
|
|
}
|
|
ElementStyle backStyle = overflow.RibbonBar.GetPaintBackgroundStyle();
|
|
ElementStyle titleStyle = overflow.RibbonBar.TitleStyle;
|
|
|
|
int cornerSize = 3;
|
|
|
|
if (backStyle.BackColorBlend.Count > 0)
|
|
DisplayHelp.FillRoundedRectangle(pa.Graphics, imagebounds, cornerSize, backStyle.BackColorBlend[0].Color, backStyle.BackColorBlend[backStyle.BackColorBlend.Count-1].Color, overflow.RibbonBar.BackgroundStyle.BackColorGradientAngle);
|
|
else
|
|
DisplayHelp.FillRoundedRectangle(pa.Graphics, imagebounds, cornerSize, backStyle.BackColor, backStyle.BackColor2, backStyle.BackColorGradientAngle);
|
|
if(!button.Expanded)
|
|
DisplayHelp.FillRectangle(pa.Graphics, new Rectangle(imagebounds.X+1, imagebounds.Bottom - 8, imagebounds.Width-2, 7), titleStyle.BackColor, titleStyle.BackColor2, titleStyle.BackColorGradientAngle);
|
|
|
|
if (!backStyle.BorderColor.IsEmpty)
|
|
{
|
|
using (GraphicsPath path = new GraphicsPath())
|
|
{
|
|
path.AddLine(imagebounds.X, imagebounds.Bottom - 8, imagebounds.Right, imagebounds.Bottom - 8);
|
|
ElementStyleDisplay.AddCornerArc(path, imagebounds, cornerSize, eCornerArc.BottomRight);
|
|
ElementStyleDisplay.AddCornerArc(path, imagebounds, cornerSize, eCornerArc.BottomLeft);
|
|
path.CloseAllFigures();
|
|
using (SolidBrush brush = new SolidBrush(Color.FromArgb(192, backStyle.BorderColor)))
|
|
pa.Graphics.FillPath(brush, path);
|
|
}
|
|
}
|
|
|
|
DisplayHelp.DrawRoundGradientRectangle(pa.Graphics, imagebounds, backStyle.BorderColor, backStyle.BorderColor2, backStyle.BorderGradientAngle, 1, cornerSize);
|
|
|
|
imagebounds.X += (imagebounds.Width - image.Width) / 2;
|
|
imagebounds.Y += 4;
|
|
imagebounds.Width = image.Width;
|
|
imagebounds.Height = image.Height;
|
|
|
|
image.DrawImage(pa.Graphics, imagebounds);
|
|
}
|
|
|
|
protected override Rectangle GetTextRectangle(ButtonItem button, ItemPaintArgs pa, eTextFormat stringFormat, CompositeImage image)
|
|
{
|
|
Rectangle r = base.GetTextRectangle(button, pa, stringFormat, image);
|
|
r.Offset(0, 12);
|
|
//r.Height -= 18;
|
|
return r;
|
|
}
|
|
|
|
protected override void PaintState(ButtonItem button, ItemPaintArgs pa, CompositeImage image, Rectangle r, bool isMouseDown)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|