290 lines
8.3 KiB
C#
290 lines
8.3 KiB
C#
#if FRAMEWORK20
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
public class OfficeMobile2014SuperTabItem : SuperTabItemBaseDisplay
|
|
{
|
|
#region Constants
|
|
|
|
private const int Radius = 8;
|
|
private const int Dia = Radius * 2;
|
|
private const int Offset = 2;
|
|
private const int StripeTop = 7;
|
|
private const int StripeBot = 5;
|
|
private const int PadFill = 3;
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Constructor for OfficeMobile2014 style SuperTabItem base display
|
|
/// </summary>
|
|
/// <param name="tabItem">Associated SuperTabItem</param>
|
|
public OfficeMobile2014SuperTabItem(SuperTabItem tabItem)
|
|
: base(tabItem)
|
|
{
|
|
}
|
|
|
|
#region ContentRectangle
|
|
|
|
/// <summary>
|
|
/// Calculates the Content Rectangle for the tab
|
|
/// </summary>
|
|
/// <returns>Content Rectangle</returns>
|
|
internal override Rectangle ContentRectangle()
|
|
{
|
|
Rectangle r = TabItem.DisplayRectangle;
|
|
|
|
int tabOverlap = (TabStripItem.TabDisplay.TabOverlap);
|
|
int tabSpacing = (TabStripItem.TabDisplay.TabSpacing);
|
|
int n = tabOverlap + tabSpacing;
|
|
|
|
if (TabStripItem.IsVertical == true)
|
|
{
|
|
r.Y += (tabOverlap / 2 + tabSpacing);
|
|
r.Height -= (tabOverlap + tabSpacing * 2);
|
|
}
|
|
else
|
|
{
|
|
r.X += (tabOverlap / 2 + tabSpacing);
|
|
r.Width -= (tabOverlap + tabSpacing * 2);
|
|
}
|
|
|
|
int stripeTop = Dpi.Width(StripeTop);
|
|
int padFill = Dpi.Width(PadFill);
|
|
switch (TabItem.TabAlignment)
|
|
{
|
|
case eTabStripAlignment.Top:
|
|
r.Height -= stripeTop;
|
|
break;
|
|
|
|
case eTabStripAlignment.Bottom:
|
|
r.Height -= StripeBot;
|
|
r.Y += StripeBot;
|
|
break;
|
|
|
|
case eTabStripAlignment.Left:
|
|
if (TabStripItem.HorizontalText == false)
|
|
{
|
|
r.X -= padFill;
|
|
r.Y += padFill;
|
|
}
|
|
|
|
r.Width -= stripeTop;
|
|
break;
|
|
|
|
default:
|
|
if (TabStripItem.HorizontalText == true)
|
|
{
|
|
r.X += padFill;
|
|
r.Width -= StripeBot;
|
|
}
|
|
else
|
|
{
|
|
r.X += stripeTop;
|
|
r.Width -= stripeTop;
|
|
r.Height += stripeTop;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return (r);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region TabItemPath
|
|
|
|
/// <summary>
|
|
/// Creates the tab item GraphicsPath
|
|
/// </summary>
|
|
/// <returns>Tab path</returns>
|
|
internal override GraphicsPath TabItemPath()
|
|
{
|
|
GraphicsPath path = base.TabItemPath();
|
|
|
|
if (path != null)
|
|
return (path);
|
|
|
|
switch (TabItem.TabAlignment)
|
|
{
|
|
case eTabStripAlignment.Top:
|
|
return (TopTabPath());
|
|
|
|
case eTabStripAlignment.Bottom:
|
|
return (BottomTabPath());
|
|
|
|
case eTabStripAlignment.Left:
|
|
return (LeftTabPath());
|
|
|
|
default:
|
|
return (RightTabPath());
|
|
}
|
|
}
|
|
|
|
#region TopTabPath
|
|
|
|
/// <summary>
|
|
/// Create the Top tab path
|
|
/// </summary>
|
|
/// <returns>GraphicsPath</returns>
|
|
private GraphicsPath TopTabPath()
|
|
{
|
|
Rectangle r = TabItem.DisplayRectangle;
|
|
r.Width -= Dpi.Width1;
|
|
r.Height -= Dpi.Height(StripeBot);
|
|
|
|
int k = Math.Min(20, r.Height);
|
|
float scale = (float)k / 20;
|
|
|
|
int delta = (int)(90 * scale) - 25;
|
|
int n = (int)((TabStripItem.TabDisplay.TabOverlap / 2) * scale);
|
|
|
|
// Create the path
|
|
|
|
GraphicsPath path = new GraphicsPath();
|
|
|
|
int dia = Dpi.Width(Dia);
|
|
Rectangle ar = new Rectangle(r.X - Dpi.Width(Radius), r.Bottom - dia, dia, dia);
|
|
path.AddArc(ar, 90, -delta);
|
|
|
|
int offset = Dpi.Width(Offset);
|
|
ar = new Rectangle(r.X + Dpi.Width(Radius) + Dpi.Width(offset), r.Y, dia, dia);
|
|
path.AddArc(ar, 270 - delta, delta);
|
|
|
|
ar = new Rectangle(r.Right - (dia + offset + n), r.Y, dia, dia);
|
|
path.AddArc(ar, 270, delta);
|
|
|
|
ar = new Rectangle(r.Right - (dia - offset * 2), r.Bottom - dia, dia, dia);
|
|
path.AddArc(ar, 90 + delta, -delta);
|
|
|
|
return (path);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region BottomTabPath
|
|
|
|
/// <summary>
|
|
/// Creates the Bottom tab path
|
|
/// </summary>
|
|
/// <returns>GraphicsPath</returns>
|
|
private GraphicsPath BottomTabPath()
|
|
{
|
|
Rectangle r = TabItem.DisplayRectangle;
|
|
r.Width -= 1;
|
|
r.Height -= (StripeBot + 1);
|
|
r.Y += StripeBot;
|
|
|
|
// Create the path
|
|
|
|
GraphicsPath path = new GraphicsPath();
|
|
|
|
int k = Math.Min(20, r.Height);
|
|
float scale = (float)k / 20;
|
|
|
|
int delta = (int)(90 * scale) - 25;
|
|
int n = (int)((TabStripItem.TabDisplay.TabOverlap / 2) * scale);
|
|
|
|
Rectangle ar = new Rectangle(r.X - Radius, r.Y, Dia, Dia);
|
|
path.AddArc(ar, 270, delta);
|
|
|
|
ar = new Rectangle(r.X + Radius + Offset, r.Bottom - Dia, Dia, Dia);
|
|
path.AddArc(ar, 90 + delta, -delta);
|
|
|
|
ar = new Rectangle(r.Right - (Dia + Offset + n), r.Bottom - Dia, Dia, Dia);
|
|
path.AddArc(ar, 90, -delta);
|
|
|
|
ar = new Rectangle(r.Right - (Dia - Offset * 2), r.Y, Dia, Dia);
|
|
path.AddArc(ar, 270 - delta, delta);
|
|
|
|
return (path);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region LeftTabPath
|
|
|
|
/// <summary>
|
|
/// Creates the Left tab path
|
|
/// </summary>
|
|
/// <returns>GraphicsPath</returns>
|
|
private GraphicsPath LeftTabPath()
|
|
{
|
|
Rectangle r = TabItem.DisplayRectangle;
|
|
r.Width -= StripeBot;
|
|
r.Height -= 1;
|
|
|
|
// Create the path
|
|
|
|
GraphicsPath path = new GraphicsPath();
|
|
|
|
int k = Math.Min(20, r.Width);
|
|
float scale = (float)k / 20;
|
|
|
|
int delta = (int)(90 * scale) - 25;
|
|
int n = (int)((TabStripItem.TabDisplay.TabOverlap / 2) * scale);
|
|
|
|
Rectangle ar = new Rectangle(r.Right - Dia, r.Y - Radius, Dia, Dia);
|
|
path.AddArc(ar, 0, delta);
|
|
|
|
ar = new Rectangle(r.X, r.Y + Offset + n, Dia, Dia);
|
|
path.AddArc(ar, -180 + delta, -delta);
|
|
|
|
ar = new Rectangle(r.X, r.Bottom - Dia - Offset, Dia, Dia);
|
|
path.AddArc(ar, 180, -delta);
|
|
|
|
ar = new Rectangle(r.Right - Dia, r.Bottom - Radius + n, Dia, Dia);
|
|
path.AddArc(ar, -delta, delta);
|
|
|
|
return (path);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region RightTabPath
|
|
|
|
/// <summary>
|
|
/// Create the Right tab path
|
|
/// </summary>
|
|
/// <returns>GraphicsPath</returns>
|
|
private GraphicsPath RightTabPath()
|
|
{
|
|
Rectangle r = TabItem.DisplayRectangle;
|
|
r.X += StripeBot;
|
|
r.Width -= (StripeBot + 1);
|
|
r.Height -= 1;
|
|
|
|
// Create the path
|
|
|
|
GraphicsPath path = new GraphicsPath();
|
|
|
|
int k = Math.Min(20, r.Width);
|
|
float scale = (float)k / 20;
|
|
|
|
int delta = (int)(90 * scale) - 25;
|
|
int n = (int)((TabStripItem.TabDisplay.TabOverlap / 2) * scale);
|
|
|
|
Rectangle ar = new Rectangle(r.X, r.Y - Radius, Dia, Dia);
|
|
path.AddArc(ar, 180, -delta);
|
|
|
|
ar = new Rectangle(r.Right - Dia, r.Y + Offset + n, Dia, Dia);
|
|
path.AddArc(ar, -delta, delta);
|
|
|
|
ar = new Rectangle(r.Right - Dia, r.Bottom - Dia - Offset, Dia, Dia);
|
|
path.AddArc(ar, 0, delta);
|
|
|
|
ar = new Rectangle(r.X, r.Bottom - Radius + n, Dia, Dia);
|
|
path.AddArc(ar, 180 + delta, -delta);
|
|
|
|
return (path);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
#endif |