public override IDisposable DrawBack(RenderContext context,
Rectangle rect,
GraphicsPath path,
IPaletteBack palette,
VisualOrientation orientation,
PaletteState state,
IDisposable memento)
{
Debug.Assert(context != null);
Debug.Assert(path != null);
Debug.Assert(palette != null);
// Validate parameter references
if (context == null) throw new ArgumentNullException("context");
if (palette == null) throw new ArgumentNullException("palette");
Debug.Assert(context.Control != null);
Debug.Assert(!context.Control.IsDisposed);
// Is there anything to actually draw?
if ((rect.Width > 0) && (rect.Height > 0))
{
// We want to draw using anti aliasing for a nice smooth effect
using (GraphicsHint smooth = new GraphicsHint(context.Graphics, palette.GetBackGraphicsHint(state)))
{
// Cache commonly used values
Image backImage = palette.GetBackImage(state);
PaletteImageStyle backImageStyle = palette.GetBackImageStyle(state);
PaletteColorStyle backColorStyle = palette.GetBackColorStyle(state);
Color backColor1 = palette.GetBackColor1(state);
Color backColor2 = palette.GetBackColor2(state);
float backColorAngle = palette.GetBackColorAngle(state);
// Get the rectangle to use when dealing with gradients
Rectangle gradientRect = context.GetAlignedRectangle(palette.GetBackColorAlign(state), rect);
switch (backColorStyle)
{
case PaletteColorStyle.GlassSimpleFull:
memento = RenderGlassHelpers.DrawBackGlassSimpleFull(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassNormalFull:
memento = RenderGlassHelpers.DrawBackGlassNormalFull(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassTrackingFull:
memento = RenderGlassHelpers.DrawBackGlassTrackingFull(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassPressedFull:
memento = RenderGlassHelpers.DrawBackGlassPressedFull(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassCheckedFull:
memento = RenderGlassHelpers.DrawBackGlassCheckedFull(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassCheckedTrackingFull:
memento = RenderGlassHelpers.DrawBackGlassCheckedTrackingFull(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassNormalStump:
memento = RenderGlassHelpers.DrawBackGlassNormalStump(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassTrackingStump:
memento = RenderGlassHelpers.DrawBackGlassTrackingStump(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassPressedStump:
memento = RenderGlassHelpers.DrawBackGlassPressedStump(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassCheckedStump:
memento = RenderGlassHelpers.DrawBackGlassCheckedStump(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassCheckedTrackingStump:
memento = RenderGlassHelpers.DrawBackGlassCheckedTrackingStump(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassThreeEdge:
memento = RenderGlassHelpers.DrawBackGlassThreeEdge(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassNormalSimple:
memento = RenderGlassHelpers.DrawBackGlassNormalSimple(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassTrackingSimple:
memento = RenderGlassHelpers.DrawBackGlassTrackingSimple(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassPressedSimple:
memento = RenderGlassHelpers.DrawBackGlassPressedSimple(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassCheckedSimple:
memento = RenderGlassHelpers.DrawBackGlassCheckedSimple(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassCheckedTrackingSimple:
memento = RenderGlassHelpers.DrawBackGlassCheckedTrackingSimple(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassCenter:
memento = RenderGlassHelpers.DrawBackGlassCenter(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassBottom:
memento = RenderGlassHelpers.DrawBackGlassBottom(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.GlassFade:
memento = RenderGlassHelpers.DrawBackGlassFade(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.ExpertTracking:
memento = RenderExpertHelpers.DrawBackExpertTracking(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.ExpertPressed:
memento = RenderExpertHelpers.DrawBackExpertPressed(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.ExpertChecked:
memento = RenderExpertHelpers.DrawBackExpertChecked(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.ExpertCheckedTracking:
memento = RenderExpertHelpers.DrawBackExpertCheckedTracking(context, rect, backColor1, backColor2, orientation, path, memento);
break;
case PaletteColorStyle.ExpertSquareHighlight:
memento = RenderExpertHelpers.DrawBackExpertSquareHighlight(context, rect, backColor1, backColor2, orientation, path, memento, false);
break;
case PaletteColorStyle.ExpertSquareHighlight2:
memento = RenderExpertHelpers.DrawBackExpertSquareHighlight(context, rect, backColor1, backColor2, orientation, path, memento, true);
break;
case PaletteColorStyle.SolidInside:
DrawBackSolidInside(context, gradientRect, backColor1, backColor2, path);
break;
case PaletteColorStyle.SolidLeftLine:
case PaletteColorStyle.SolidRightLine:
case PaletteColorStyle.SolidTopLine:
case PaletteColorStyle.SolidBottomLine:
case PaletteColorStyle.SolidAllLine:
DrawBackSolidLine(context, rect, backColor1, backColor2, backColorStyle, path);
break;
case PaletteColorStyle.OneNote:
DrawBackOneNote(context, gradientRect, backColor1, backColor2,
backColorStyle, backColorAngle, orientation, path);
break;
case PaletteColorStyle.RoundedTopLeftWhite:
DrawBackRoundedTopLeftWhite(context, rect, gradientRect, backColor1, backColor2,
backColorStyle, backColorAngle, orientation, path);
break;
case PaletteColorStyle.RoundedTopLight:
DrawBackRoundedTopLight(context, rect, gradientRect, backColor1, backColor2,
backColorStyle, backColorAngle, orientation, path);
break;
case PaletteColorStyle.Rounding4:
DrawBackRounded4(context, rect, gradientRect, backColor1, backColor2,
backColorStyle, backColorAngle, orientation, path);
break;
case PaletteColorStyle.Rounding5:
DrawBackRounding5(context, rect, gradientRect, backColor1, backColor2,
backColorStyle, backColorAngle, orientation, path);
break;
case PaletteColorStyle.LinearShadow:
DrawBackLinearShadow(context, rect, gradientRect, backColor1, backColor2,
backColorStyle, backColorAngle, orientation, path);
break;
default:
// Use standard helper routine to create appropriate color brush
using (Brush backBrush = CreateColorBrush(gradientRect, backColor1, backColor2,
backColorStyle, backColorAngle, orientation))
{
context.Graphics.FillPath(backBrush, path);
}
break;
}
// Do we need to draw the image?
if (ShouldDrawImage(backImage))
{
// Get the rectangle to use when dealing with gradients
Rectangle imageRect = context.GetAlignedRectangle(palette.GetBackImageAlign(state), rect);
// Use standard helper routine to create appropriate image brush
using (Brush backBrush = CreateImageBrush(imageRect, backImage, backImageStyle))
context.Graphics.FillPath(backBrush, path);
}
}
}
return memento;
}