public override void RenderButton(Graphics g, Rectangle buttonRectangle) { g.SmoothingMode = SmoothingMode.HighQuality; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBilinear; buttonRectangle.Inflate(-1, -1); using (GraphicsPath buttonPath = GetRoundedRectanglePath(buttonRectangle, CornerRadius)) { g.SetClip(buttonPath); //Draw button surface Color buttonSurfaceColor1 = ButtonNormalSurfaceColor1; Color buttonSurfaceColor2 = ButtonNormalSurfaceColor2; if (ToggleSwitch.IsButtonPressed) { buttonSurfaceColor1 = ButtonPressedSurfaceColor1; buttonSurfaceColor2 = ButtonPressedSurfaceColor2; } else if (ToggleSwitch.IsButtonHovered) { buttonSurfaceColor1 = ButtonHoverSurfaceColor1; buttonSurfaceColor2 = ButtonHoverSurfaceColor2; } if (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) { buttonSurfaceColor1 = buttonSurfaceColor1.ToGrayScale(); buttonSurfaceColor2 = buttonSurfaceColor2.ToGrayScale(); } using (Brush buttonSurfaceBrush = new LinearGradientBrush(buttonRectangle, buttonSurfaceColor1, buttonSurfaceColor2, LinearGradientMode.Vertical)) g.FillPath(buttonSurfaceBrush, buttonPath); //Draw button border Color buttonBorderColor1 = ButtonNormalBorderColor1; Color buttonBorderColor2 = ButtonNormalBorderColor2; if (ToggleSwitch.IsButtonPressed) { buttonBorderColor1 = ButtonPressedBorderColor1; buttonBorderColor2 = ButtonPressedBorderColor2; } else if (ToggleSwitch.IsButtonHovered) { buttonBorderColor1 = ButtonHoverBorderColor1; buttonBorderColor2 = ButtonHoverBorderColor2; } if (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) { buttonBorderColor1 = buttonBorderColor1.ToGrayScale(); buttonBorderColor2 = buttonBorderColor2.ToGrayScale(); } using (Brush buttonBorderBrush = new LinearGradientBrush(buttonRectangle, buttonBorderColor1, buttonBorderColor2, LinearGradientMode.Vertical)) using (Pen buttonBorderPen = new Pen(buttonBorderBrush)) g.DrawPath(buttonBorderPen, buttonPath); g.ResetClip(); //Draw button image Image buttonImage = ToggleSwitch.ButtonImage ?? (ToggleSwitch.Checked ? ToggleSwitch.OnButtonImage : ToggleSwitch.OffButtonImage); if (buttonImage != null) { g.SetClip(buttonPath); GMRToggleSwitch.ToggleSwitchButtonAlignment alignment = ToggleSwitch.ButtonImage != null ? ToggleSwitch.ButtonAlignment : (ToggleSwitch.Checked ? ToggleSwitch.OnButtonAlignment : ToggleSwitch.OffButtonAlignment); Size imageSize = buttonImage.Size; Rectangle imageRectangle; int imageXPos = buttonRectangle.X; bool scaleImage = ToggleSwitch.ButtonImage != null ? ToggleSwitch.ButtonScaleImageToFit : (ToggleSwitch.Checked ? ToggleSwitch.OnButtonScaleImageToFit : ToggleSwitch.OffButtonScaleImageToFit); if (scaleImage) { Size canvasSize = buttonRectangle.Size; Size resizedImageSize = ImageHelper.RescaleImageToFit(imageSize, canvasSize); if (alignment == GMRToggleSwitch.ToggleSwitchButtonAlignment.Center) imageXPos = (int)((float)buttonRectangle.X + (((float)buttonRectangle.Width - (float)resizedImageSize.Width) / 2)); else if (alignment == GMRToggleSwitch.ToggleSwitchButtonAlignment.Right) imageXPos = (int)((float)buttonRectangle.X + (float)buttonRectangle.Width - (float)resizedImageSize.Width); imageRectangle = new Rectangle(imageXPos, (int)((float)buttonRectangle.Y + (((float)buttonRectangle.Height - (float)resizedImageSize.Height) / 2)), resizedImageSize.Width, resizedImageSize.Height); if (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) g.DrawImage(buttonImage, imageRectangle, 0, 0, buttonImage.Width, buttonImage.Height, GraphicsUnit.Pixel, ImageHelper.GetGrayscaleAttributes()); else g.DrawImage(buttonImage, imageRectangle); } else { if (alignment == GMRToggleSwitch.ToggleSwitchButtonAlignment.Center) imageXPos = (int)((float)buttonRectangle.X + (((float)buttonRectangle.Width - (float)imageSize.Width) / 2)); else if (alignment == GMRToggleSwitch.ToggleSwitchButtonAlignment.Right) imageXPos = (int)((float)buttonRectangle.X + (float)buttonRectangle.Width - (float)imageSize.Width); imageRectangle = new Rectangle(imageXPos, (int)((float)buttonRectangle.Y + (((float)buttonRectangle.Height - (float)imageSize.Height) / 2)), imageSize.Width, imageSize.Height); if (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) g.DrawImage(buttonImage, imageRectangle, 0, 0, buttonImage.Width, buttonImage.Height, GraphicsUnit.Pixel, ImageHelper.GetGrayscaleAttributes()); else g.DrawImageUnscaled(buttonImage, imageRectangle); } g.ResetClip(); } } }
public override void RenderRightToggleField(Graphics g, Rectangle rightRectangle, int totalToggleFieldWidth) { g.SmoothingMode = SmoothingMode.HighQuality; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBilinear; int buttonWidth = GetButtonWidth(); //Draw inner background int gradientRectWidth = rightRectangle.Width + buttonWidth / 2; Rectangle gradientRectangle = new Rectangle(rightRectangle.X - buttonWidth / 2, rightRectangle.Y, gradientRectWidth, rightRectangle.Height); Color rightSideBackColor1 = (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) ? RightSideBackColor1.ToGrayScale() : RightSideBackColor1; Color rightSideBackColor2 = (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) ? RightSideBackColor2.ToGrayScale() : RightSideBackColor2; if (_innerControlPath != null) { g.SetClip(_innerControlPath); g.IntersectClip(gradientRectangle); } else g.SetClip(gradientRectangle); using (Brush backgroundBrush = new LinearGradientBrush(gradientRectangle, rightSideBackColor1, rightSideBackColor2, LinearGradientMode.Vertical)) g.FillRectangle(backgroundBrush, gradientRectangle); g.ResetClip(); Rectangle rightShadowRectangle = new Rectangle(); rightShadowRectangle.X = rightRectangle.X - CornerRadius; rightShadowRectangle.Y = rightRectangle.Y; rightShadowRectangle.Width = ButtonShadowWidth + CornerRadius; rightShadowRectangle.Height = rightRectangle.Height; if (_innerControlPath != null) { g.SetClip(_innerControlPath); g.IntersectClip(rightShadowRectangle); } else g.SetClip(rightShadowRectangle); using (Brush buttonShadowBrush = new LinearGradientBrush(rightShadowRectangle, ButtonShadowColor1, ButtonShadowColor2, LinearGradientMode.Horizontal)) g.FillRectangle(buttonShadowBrush, rightShadowRectangle); g.ResetClip(); //Draw image or text if (ToggleSwitch.OffSideImage != null || !string.IsNullOrEmpty(ToggleSwitch.OffText)) { RectangleF fullRectangle = new RectangleF(rightRectangle.X, 1, totalToggleFieldWidth - 1, ToggleSwitch.Height - 2); if (_innerControlPath != null) { g.SetClip(_innerControlPath); g.IntersectClip(fullRectangle); } else g.SetClip(fullRectangle); if (ToggleSwitch.OffSideImage != null) { Size imageSize = ToggleSwitch.OffSideImage.Size; Rectangle imageRectangle; int imageXPos = (int)fullRectangle.X; if (ToggleSwitch.OffSideScaleImageToFit) { Size canvasSize = new Size((int)fullRectangle.Width, (int)fullRectangle.Height); Size resizedImageSize = ImageHelper.RescaleImageToFit(imageSize, canvasSize); if (ToggleSwitch.OffSideAlignment == GMRToggleSwitch.ToggleSwitchAlignment.Center) imageXPos = (int)((float)fullRectangle.X + (((float)fullRectangle.Width - (float)resizedImageSize.Width) / 2)); else if (ToggleSwitch.OffSideAlignment == GMRToggleSwitch.ToggleSwitchAlignment.Far) imageXPos = (int)((float)fullRectangle.X + (float)fullRectangle.Width - (float)resizedImageSize.Width); imageRectangle = new Rectangle(imageXPos, (int)((float)fullRectangle.Y + (((float)fullRectangle.Height - (float)resizedImageSize.Height) / 2)), resizedImageSize.Width, resizedImageSize.Height); if (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) g.DrawImage(ToggleSwitch.OnSideImage, imageRectangle, 0, 0, ToggleSwitch.OnSideImage.Width, ToggleSwitch.OnSideImage.Height, GraphicsUnit.Pixel, ImageHelper.GetGrayscaleAttributes()); else g.DrawImage(ToggleSwitch.OnSideImage, imageRectangle); } else { if (ToggleSwitch.OffSideAlignment == GMRToggleSwitch.ToggleSwitchAlignment.Center) imageXPos = (int)((float)fullRectangle.X + (((float)fullRectangle.Width - (float)imageSize.Width) / 2)); else if (ToggleSwitch.OffSideAlignment == GMRToggleSwitch.ToggleSwitchAlignment.Far) imageXPos = (int)((float)fullRectangle.X + (float)fullRectangle.Width - (float)imageSize.Width); imageRectangle = new Rectangle(imageXPos, (int)((float)fullRectangle.Y + (((float)fullRectangle.Height - (float)imageSize.Height) / 2)), imageSize.Width, imageSize.Height); if (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) g.DrawImage(ToggleSwitch.OnSideImage, imageRectangle, 0, 0, ToggleSwitch.OnSideImage.Width, ToggleSwitch.OnSideImage.Height, GraphicsUnit.Pixel, ImageHelper.GetGrayscaleAttributes()); else g.DrawImageUnscaled(ToggleSwitch.OffSideImage, imageRectangle); } } else if (!string.IsNullOrEmpty(ToggleSwitch.OffText)) { SizeF textSize = g.MeasureString(ToggleSwitch.OffText, ToggleSwitch.OffFont); float textXPos = fullRectangle.X; if (ToggleSwitch.OffSideAlignment == GMRToggleSwitch.ToggleSwitchAlignment.Center) textXPos = (float)fullRectangle.X + (((float)fullRectangle.Width - (float)textSize.Width) / 2); else if (ToggleSwitch.OffSideAlignment == GMRToggleSwitch.ToggleSwitchAlignment.Far) textXPos = (float)fullRectangle.X + (float)fullRectangle.Width - (float)textSize.Width; RectangleF textRectangle = new RectangleF(textXPos, (float)fullRectangle.Y + (((float)fullRectangle.Height - (float)textSize.Height) / 2), textSize.Width, textSize.Height); Color textForeColor = ToggleSwitch.OffForeColor; if (!ToggleSwitch.Enabled && ToggleSwitch.GrayWhenDisabled) textForeColor = textForeColor.ToGrayScale(); using (Brush textBrush = new SolidBrush(textForeColor)) g.DrawString(ToggleSwitch.OffText, ToggleSwitch.OffFont, textBrush, textRectangle); } g.ResetClip(); } }