public override void Paint(Graphics g) { base.Paint(g); if (m_pressed.Value) { m_drawPressed(Area, g); } else if (m_hovered.Value) { m_drawHovered(Area, g); } else { m_drawNeutral(Area, g); } if (m_text != null) { using (var textRenderer = new NativeTextRenderer(g)) { string text = m_text(); Size textSize = textRenderer.MeasureString(text, m_font); int offset = m_pressed.Value ? 1 : 0; PointF textLocation = new PointF((Area.Width - textSize.Width) / 2 + offset, (Area.Height - textSize.Height) / 2 + offset); textRenderer.DrawString(text, m_font, Color.White, textLocation.Round()); } } }
public void recalculateAutoSize() { if (!AutoResize) { return; } int w = DropDownWidth; int padding = SkinManager.FORM_PADDING * 3; int vertScrollBarWidth = (Items.Count > MaxDropDownItems) ? SystemInformation.VerticalScrollBarWidth : 0; Graphics g = CreateGraphics(); using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { var itemsList = this.Items.Cast <object>().Select(item => item.ToString()); foreach (string s in itemsList) { int newWidth = NativeText.MeasureLogString(s, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Subtitle1)).Width + vertScrollBarWidth + padding; if (w < newWidth) { w = newWidth; } } } if (Width != w) { DropDownWidth = w; Width = w; } }
/// <summary> /// Ovverides the Paint to create the solid colored backcolor /// </summary> protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; e.Graphics.Clear(BackColor); // Calc text Rect Rectangle textRect = new Rectangle( LEFT_RIGHT_PADDING, 0, Width - (2 * LEFT_RIGHT_PADDING) - _actionButton.Width, Height); //Draw Text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { // Draw header text NativeText.DrawTransparentText( _text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body2), SkinManager.SnackBarTextHighEmphasisColor, textRect.Location, textRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } }
private void CustomDrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { if (e.Index < 0 || e.Index > Items.Count || !Focused) { return; } Graphics g = e.Graphics; // Draw the background of the item. g.FillRectangle(SkinManager.BackgroundBrush, e.Bounds); // Hover if (e.State.HasFlag(DrawItemState.Focus)) // Focus == hover { g.FillRectangle(SkinManager.BackgroundHoverBrush, e.Bounds); } using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText( Items[e.Index].ToString(), SkinManager.getFontByType(MaterialSkinManager.fontType.Subtitle1), SkinManager.TextHighEmphasisColor, new Point(e.Bounds.Location.X + SkinManager.FORM_PADDING, e.Bounds.Location.Y), new Size(e.Bounds.Size.Width - SkinManager.FORM_PADDING * 2, e.Bounds.Size.Height), NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle);; } }
private void CustomDrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { if (e.Index < 0 || e.Index > Items.Count || !Focused) { return; } Graphics g = e.Graphics; // Draw the background of the item. g.FillRectangle(SkinManager.BackgroundBrush, e.Bounds); // Hover if (e.State.HasFlag(DrawItemState.Focus)) // Focus == hover { g.FillRectangle(SkinManager.BackgroundHoverBrush, e.Bounds); } string Text = ""; if (!string.IsNullOrWhiteSpace(DisplayMember)) { Text = Items[e.Index].GetType().GetProperty(DisplayMember).GetValue(Items[e.Index], null).ToString(); } else { Text = Items[e.Index].ToString(); } if (SkinManager.Theme == MaterialSkinManager.Themes.DARK) { using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText( Text, SkinManager.getFontByType(MaterialSkinManager.fontType.Subtitle1), SkinManager.TextHighEmphasisColor, new Point(e.Bounds.Location.X + SkinManager.FORM_PADDING, e.Bounds.Location.Y), new Size(e.Bounds.Size.Width - SkinManager.FORM_PADDING * 2, e.Bounds.Size.Height), NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle);; } } else { using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawString( Text, SkinManager.getFontByType(MaterialSkinManager.fontType.Subtitle1), SkinManager.TextHighEmphasisColor, new Rectangle( new Point(e.Bounds.Location.X + SkinManager.FORM_PADDING, e.Bounds.Location.Y), new Size(e.Bounds.Size.Width - SkinManager.FORM_PADDING * 2, e.Bounds.Size.Height)), NativeTextRenderer.TextFormatFlags.SingleLine | NativeTextRenderer.TextFormatFlags.VCenter); } } }
private IntPtr createLogicalFont(string fontName, int size, NativeTextRenderer.logFontWeight weight) { // Logical font: NativeTextRenderer.LogFont lfont = new NativeTextRenderer.LogFont(); lfont.lfFaceName = fontName; lfont.lfHeight = -size; lfont.lfWeight = (int)weight; return(NativeTextRenderer.CreateFontIndirect(lfont)); }
/// <summary> /// Ovverides the Paint to create the solid colored backcolor /// </summary> protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; e.Graphics.Clear(BackColor); // Calc title Rect Rectangle titleRect = new Rectangle( LEFT_RIGHT_PADDING, 0, Width - (2 * LEFT_RIGHT_PADDING), _header_Height); //Draw title using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { // Draw header text NativeText.DrawTransparentText( _title, SkinManager.getLogFontByType(MaterialSkinManager.fontType.H6), SkinManager.TextHighEmphasisColor, titleRect.Location, titleRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Bottom); } // Calc text Rect int TextWidth = TextRenderer.MeasureText(_text, SkinManager.getFontByType(MaterialSkinManager.fontType.Body1)).Width; int RectWidth = Width - (2 * LEFT_RIGHT_PADDING) - BUTTON_PADDING; int RectHeight = ((TextWidth / RectWidth) + 1) * 19; Rectangle textRect = new Rectangle( LEFT_RIGHT_PADDING, _header_Height + 17, RectWidth, RectHeight + 19); //Draw Text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { // Draw header text NativeText.DrawMultilineTransparentText( _text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1), SkinManager.TextHighEmphasisColor, textRect.Location, textRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } }
public override Size GetPreferredSize(Size proposedSize) { Size strSize; using (NativeTextRenderer NativeText = new NativeTextRenderer(CreateGraphics())) { strSize = NativeText.MeasureLogString(Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1, RightToLeft)); } var w = TRACK_SIZE_WIDTH + THUMB_SIZE + strSize.Width; return(Ripple ? new Size(w, RIPPLE_DIAMETER) : new Size(w, THUMB_SIZE)); }
private void addFont(byte[] fontdata) { // Add font to system table in memory int dataLength = fontdata.Length; IntPtr ptrFont = Marshal.AllocCoTaskMem(dataLength); Marshal.Copy(fontdata, 0, ptrFont, dataLength); NativeTextRenderer.AddFontMemResourceEx(fontdata, dataLength, IntPtr.Zero, out _); privateFontCollection.AddMemoryFont(ptrFont, dataLength); }
public override Size GetPreferredSize(Size proposedSize) { Size strSize; using (NativeTextRenderer NativeText = new NativeTextRenderer(CreateGraphics())) { strSize = NativeText.MeasureLogString(Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1)); } int w = _boxOffset + TEXT_OFFSET + strSize.Width; return(Ripple ? new Size(w, HEIGHT_RIPPLE) : new Size(w, HEIGHT_NO_RIPPLE)); }
protected void DrawCombobox() { SuspendLayout(); Graphics g = this.CreateGraphics(); Pen p = new Pen(SkinManager.GetPrimaryTextColor(), 1); g.Clear(SkinManager.GetApplicationBackgroundColor()); // Draw the background of the dropdown button Rectangle rect = new Rectangle(this.Width - 15, 3, 12, this.Height - 6); g.FillRectangle(DropButtonBrush, rect); // Create the path for the arrow System.Drawing.Drawing2D.GraphicsPath pth = new System.Drawing.Drawing2D.GraphicsPath(); PointF TopLeft = new PointF(this.Width - 13, (this.Height - 5) / 2); PointF TopRight = new PointF(this.Width - 6, (this.Height - 5) / 2); PointF Bottom = new PointF(this.Width - 9, (this.Height + 2) / 2); pth.AddLine(TopLeft, TopRight); pth.AddLine(TopRight, Bottom); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // Determine the arrow's color. if (this.DroppedDown) { ArrowBrush = SkinManager.ColorScheme.AccentBrush; } else { ArrowBrush = SkinManager.GetPrimaryTextBrush(); } // Draw the arrow g.FillPath(ArrowBrush, pth); // Text if (DropDownStyle == ComboBoxStyle.DropDownList) { using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText(Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1), SkinManager.GetPrimaryTextColor(), ClientRectangle.Location, ClientRectangle.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } } ResumeLayout(); }
private void UpdateTabRects() { _tabRects = new List <Rectangle>(); //If there isn't a base tab control, the rects shouldn't be calculated //If there aren't tab pages in the base tab control, the list should just be empty which has been set already; exit the void if (_baseTabControl == null || _baseTabControl.TabCount == 0) { return; } //Calculate the bounds of each tab header specified in the base tab control using (var b = new Bitmap(1, 1)) { using (var g = Graphics.FromImage(b)) { using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { for (int i = 0; i < _baseTabControl.TabPages.Count; i++) { Size textSize = TextRenderer.MeasureText(_baseTabControl.TabPages[i].Text, Font); if (_tabLabel == TabLabelStyle.Icon) { textSize.Width = ICON_SIZE; } int TabWidth = (TAB_HEADER_PADDING * 2) + textSize.Width; if (TabWidth > TAB_WIDTH_MAX) { TabWidth = TAB_WIDTH_MAX; } else if (TabWidth < TAB_WIDTH_MIN) { TabWidth = TAB_WIDTH_MIN; } if (i == 0) { _tabRects.Add(new Rectangle(FIRST_TAB_PADDING - (TAB_HEADER_PADDING), 0, TabWidth, Height)); } else { _tabRects.Add(new Rectangle(_tabRects[i - 1].Right, 0, TabWidth, Height)); } } } } } }
private void UpdateRects() { Size textSize; Size valueSize; using (NativeTextRenderer NativeText = new NativeTextRenderer(CreateGraphics())) { textSize = NativeText.MeasureLogString(_showText ? Text : "", SkinManager.getLogFontByType(_fontType)); valueSize = NativeText.MeasureLogString(_showValue ? RangeMax.ToString() + _valueSuffix : "", SkinManager.getLogFontByType(_fontType)); } _valueRectangle = new Rectangle(Width - valueSize.Width - _thumbRadiusHoverPressed / 4, 0, valueSize.Width + _thumbRadiusHoverPressed / 4, Height); _textRectangle = new Rectangle(0, 0, textSize.Width + _thumbRadiusHoverPressed / 4, Height); _sliderRectangle = new Rectangle(_textRectangle.Right, 0, _valueRectangle.Left - _textRectangle.Right, _thumbRadius); _mouseX = _sliderRectangle.X + ((int)((double)_value / (double)(_rangeMax - _rangeMin) * (double)(_sliderRectangle.Width) - _thumbRadius / 2)); RecalcutlateIndicator(); }
public override Size GetPreferredSize(Size proposedSize) { if (AutoSize) { Size strSize; using (NativeTextRenderer NativeText = new NativeTextRenderer(CreateGraphics())) { strSize = NativeText.MeasureLogString(Text, SkinManager.getLogFontByType(_fontType)); strSize.Width += 1; // necessary to avoid a bug when autosize = true } return(strSize); } else { return(proposedSize); } }
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) { var g = e.Graphics; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; var itemRect = GetItemRect(e.Item); var textRect = new Rectangle(LEFT_PADDING, itemRect.Y, itemRect.Width - (LEFT_PADDING + RIGHT_PADDING), itemRect.Height); using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText(e.Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body2, RightToLeft), e.Item.Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, textRect.Location, textRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } }
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) { var g = e.Graphics; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; var itemRect = GetItemRect(e.Item); var textRect = new Rectangle(24, itemRect.Y, itemRect.Width - (24 + 16), itemRect.Height); using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText(e.Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body2), e.Item.Enabled ? SkinManager.GetPrimaryTextColor() : SkinManager.GetDisabledOrHintColor(), textRect.Location, textRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } }
protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e) { Graphics g = e.Graphics; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.FillRectangle(new SolidBrush(BackColor), e.Bounds); // Draw Text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText( e.Header.Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Subtitle2), Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, new Point(e.Bounds.Location.X + PAD, e.Bounds.Location.Y), new Size(e.Bounds.Size.Width - PAD * 2, e.Bounds.Size.Height), NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } }
protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == WM_PAINT) { if (m.Msg == WM_ENABLE) { Graphics g = Graphics.FromHwnd(Handle); Rectangle bounds = new Rectangle(0, 0, Width, Height); g.FillRectangle(SkinManager.BackgroundDisabledBrush, bounds); } } if (m.Msg == WM_PAINT && String.IsNullOrEmpty(Text) && !Focused) { using (NativeTextRenderer NativeText = new NativeTextRenderer(Graphics.FromHwnd(m.HWnd))) { var textAlignFlag = RightToLeft == RightToLeft.Yes ? NativeTextRenderer.TextAlignFlags.Right : NativeTextRenderer.TextAlignFlags.Left; NativeText.DrawTransparentText( Hint, SkinManager.getFontByType(MaterialSkinManager.fontType.Subtitle1, RightToLeft), Enabled ? ColorHelper.RemoveAlpha(SkinManager.TextMediumEmphasisColor, BackColor) : // not focused ColorHelper.RemoveAlpha(SkinManager.TextDisabledOrHintColor, BackColor), // Disabled ClientRectangle.Location, ClientRectangle.Size, textAlignFlag | NativeTextRenderer.TextAlignFlags.Top); } } if (m.Msg == EM_SETBKGNDCOLOR) { Invalidate(); } if (m.Msg == WM_KILLFOCUS) //set border back to normal on lost focus { Invalidate(); } }
protected override void OnDrawItem(DrawListViewItemEventArgs e) { Graphics g = e.Graphics; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // Always draw default background g.FillRectangle(SkinManager.BackgroundBrush, e.Bounds); if (e.Item.Selected) { // Selected background g.FillRectangle(SkinManager.BackgroundFocusBrush, e.Bounds); } else if (e.Bounds.Contains(MouseLocation) && MouseState == MouseState.HOVER) { // Hover background g.FillRectangle(SkinManager.BackgroundHoverBrush, e.Bounds); } // Draw separator line var gx1 = (RightToLeft == RightToLeft.Yes) ? e.Bounds.Right : e.Bounds.Left; var gx2 = (RightToLeft == RightToLeft.Yes) ? e.Bounds.Left : e.Bounds.Right; g.DrawLine(new Pen(SkinManager.DividersColor), gx1, e.Bounds.Y, gx2, e.Bounds.Y); foreach (ListViewItem.ListViewSubItem subItem in e.Item.SubItems) { // Draw Text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { var textAlignFlag = RightToLeft == RightToLeft.Yes ? NativeTextRenderer.TextAlignFlags.Right : NativeTextRenderer.TextAlignFlags.Left; NativeText.DrawTransparentText( subItem.Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body2, RightToLeft), Enabled ? SkinManager.TextHighEmphasisNoAlphaColor : SkinManager.TextDisabledOrHintColor, new Point(subItem.Bounds.X + PAD, subItem.Bounds.Y), new Size(subItem.Bounds.Width - PAD * 2, subItem.Bounds.Height), textAlignFlag | NativeTextRenderer.TextAlignFlags.Middle); } } }
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Parent.BackColor); // Draw Text if (AlternativeForeColor != Color.Black) { using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawMultilineTransparentText( Text, SkinManager.getLogFontByType(_fontType), AlternativeForeColor, ClientRectangle.Location, ClientRectangle.Size, Alignment); } } else { using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawMultilineTransparentText( Text, SkinManager.getLogFontByType(_fontType), Enabled ? HighEmphasis ? UseAccent ? SkinManager.ColorScheme.AccentColor : // High emphasis, accent SkinManager.ColorScheme.PrimaryColor : // High emphasis, primary SkinManager.TextHighEmphasisColor : // Normal SkinManager.TextDisabledOrHintColor, // Disabled ClientRectangle.Location, ClientRectangle.Size, Alignment); } } }
protected override void OnDrawItem(DrawListViewItemEventArgs e) { Graphics g = e.Graphics; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // Always draw default background g.FillRectangle(SkinManager.GetButtonBackgroundBrush(), e.Bounds); if (e.Item.Selected) { // Selected background g.FillRectangle(SkinManager.GetButtonPressedBackgroundBrush(), e.Bounds); } else if (e.Bounds.Contains(MouseLocation) && MouseState == MouseState.HOVER) { // Hover background g.FillRectangle(SkinManager.GetButtonHoverBackgroundBrush(), e.Bounds); } // Draw separator line g.DrawLine(new Pen(SkinManager.GetDividersColor()), e.Bounds.Left, e.Bounds.Y, e.Bounds.Right, e.Bounds.Y); foreach (ListViewItem.ListViewSubItem subItem in e.Item.SubItems) { // Draw Text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText( subItem.Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body2), Enabled ? SkinManager.GetPrimaryTextColor() : SkinManager.GetDisabledOrHintColor(), new Point(subItem.Bounds.X + PAD, subItem.Bounds.Y), new Size(subItem.Bounds.Width - PAD * 2, subItem.Bounds.Height), NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } } }
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Parent.BackColor); // Draw Text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawMultilineTransparentText( Text, SkinManager.getLogFontByType(_fontType, RightToLeft), Enabled ? HighEmphasis ? UseAccent ? SkinManager.ColorScheme.AccentColor : // High emphasis, accent (SkinManager.Theme == MaterialSkin.MaterialSkinManager.Themes.LIGHT) ? SkinManager.ColorScheme.PrimaryColor : // High emphasis, primary Light theme SkinManager.ColorScheme.PrimaryColor.Lighten(0.25f) : // High emphasis, primary Dark theme SkinManager.TextHighEmphasisColor : // Normal SkinManager.TextDisabledOrHintColor, // Disabled ClientRectangle.Location, ClientRectangle.Size, Alignment); } }
protected override void OnPaint(PaintEventArgs e) { var g = e.Graphics; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; g.Clear(SkinManager.ColorScheme.PrimaryColor); if (_baseTabControl == null) { return; } if (!_animationManager.IsAnimating() || _tabRects == null || _tabRects.Count != _baseTabControl.TabCount) { UpdateTabRects(); } var animationProgress = _animationManager.GetProgress(); //Click feedback if (_animationManager.IsAnimating()) { var rippleBrush = new SolidBrush(Color.FromArgb((int)(51 - (animationProgress * 50)), Color.White)); var rippleSize = (int)(animationProgress * _tabRects[_baseTabControl.SelectedIndex].Width * 1.75); g.SetClip(_tabRects[_baseTabControl.SelectedIndex]); g.FillEllipse(rippleBrush, new Rectangle(_animationSource.X - rippleSize / 2, _animationSource.Y - rippleSize / 2, rippleSize, rippleSize)); g.ResetClip(); rippleBrush.Dispose(); } //Draw tab headers foreach (TabPage tabPage in _baseTabControl.TabPages) { var currentTabIndex = _baseTabControl.TabPages.IndexOf(tabPage); using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { Rectangle textLocation = _tabRects[currentTabIndex]; NativeText.DrawTransparentText( tabPage.Text.ToUpper(), SkinManager.getLogFontByType(MaterialSkinManager.fontType.Button), Color.FromArgb(CalculateTextAlpha(currentTabIndex, animationProgress), SkinManager.ColorScheme.TextColor), textLocation.Location, textLocation.Size, NativeTextRenderer.TextAlignFlags.Center | NativeTextRenderer.TextAlignFlags.Middle); } } //Animate tab indicator var previousSelectedTabIndexIfHasOne = _previousSelectedTabIndex == -1 ? _baseTabControl.SelectedIndex : _previousSelectedTabIndex; var previousActiveTabRect = _tabRects[previousSelectedTabIndexIfHasOne]; var activeTabPageRect = _tabRects[_baseTabControl.SelectedIndex]; var y = activeTabPageRect.Bottom - 2; var x = previousActiveTabRect.X + (int)((activeTabPageRect.X - previousActiveTabRect.X) * animationProgress); var width = previousActiveTabRect.Width + (int)((activeTabPageRect.Width - previousActiveTabRect.Width) * animationProgress); g.FillRectangle(SkinManager.ColorScheme.AccentBrush, x, y, width, TAB_INDICATOR_HEIGHT); }
private new void Paint(PaintEventArgs e) { var g = e.Graphics; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; // redraw stuff g.Clear(UseColors ? SkinManager.ColorScheme.PrimaryColor : SkinManager.BackdropColor); if (_baseTabControl == null) { return; } if (!_clickAnimManager.IsAnimating() || _drawerItemRects == null || _drawerItemRects.Count != _baseTabControl.TabCount) { UpdateTabRects(); } if (_drawerItemRects == null || _drawerItemRects.Count != _baseTabControl.TabCount) { return; } // Click Animation var clickAnimProgress = _clickAnimManager.GetProgress(); // Show/Hide Drawer Animation var showHideAnimProgress = _showHideAnimManager.GetProgress(); var rSize = (int)(clickAnimProgress * rippleSize * 1.75); int dx = prevLocation - Location.X; prevLocation = Location.X; // Ripple if (_clickAnimManager.IsAnimating()) { var rippleBrush = new SolidBrush(Color.FromArgb((int)(70 - (clickAnimProgress * 70)), UseColors ? SkinManager.ColorScheme.AccentColor : // Using colors SkinManager.Theme.RippleColor)); g.SetClip(_drawerItemPaths[_baseTabControl.SelectedIndex]); g.FillEllipse(rippleBrush, new Rectangle(_animationSource.X + dx - (rSize / 2), _animationSource.Y - rSize / 2, rSize, rSize)); g.ResetClip(); rippleBrush.Dispose(); } // Draw menu items foreach (TabPage tabPage in _baseTabControl.TabPages) { var currentTabIndex = _baseTabControl.TabPages.IndexOf(tabPage); // Background Brush bgBrush = new SolidBrush(Color.FromArgb(CalculateAlpha(60, 0, currentTabIndex, clickAnimProgress, 1 - showHideAnimProgress), UseColors ? _backgroundWithAccent ? SkinManager.ColorScheme.AccentColor : SkinManager.ColorScheme.LightPrimaryColor : // using colors _backgroundWithAccent ? SkinManager.ColorScheme.AccentColor : // defaul accent SkinManager.Theme.RippleColor)); // default dark g.FillPath(bgBrush, _drawerItemPaths[currentTabIndex]); bgBrush.Dispose(); // Text Color textColor = Color.FromArgb(CalculateAlphaZeroWhenClosed(SkinManager.TextHighEmphasisColor.A, UseColors ? SkinManager.TextMediumEmphasisColor.A : 255, currentTabIndex, clickAnimProgress, 1 - showHideAnimProgress), // alpha UseColors ? (currentTabIndex == _baseTabControl.SelectedIndex ? (_highlightWithAccent ? SkinManager.ColorScheme.AccentColor : SkinManager.ColorScheme.PrimaryColor) // Use colors - selected : SkinManager.ColorScheme.TextColor) : // Use colors - not selected (currentTabIndex == _baseTabControl.SelectedIndex ? (_highlightWithAccent ? SkinManager.ColorScheme.AccentColor : SkinManager.ColorScheme.PrimaryColor) : // selected SkinManager.TextHighEmphasisColor)); IntPtr textFont = SkinManager.getLogFontByType(MaterialSkinManager.fontType.Subtitle2); Rectangle textRect = _drawerItemRects[currentTabIndex]; textRect.X += _baseTabControl.ImageList != null ? drawerItemHeight : (int)(SkinManager.FORM_PADDING * 0.75); textRect.Width -= SkinManager.FORM_PADDING << 2; using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText(tabPage.Text, textFont, textColor, textRect.Location, textRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } // Icons if (_baseTabControl.ImageList != null && !String.IsNullOrEmpty(tabPage.ImageKey)) { Rectangle iconRect = new Rectangle( _drawerItemRects[currentTabIndex].X + (drawerItemHeight >> 1) - (iconsSize[tabPage.ImageKey].Width >> 1), _drawerItemRects[currentTabIndex].Y + (drawerItemHeight >> 1) - (iconsSize[tabPage.ImageKey].Height >> 1), iconsSize[tabPage.ImageKey].Width, iconsSize[tabPage.ImageKey].Height); if (ShowIconsWhenHidden) { iconsBrushes[tabPage.ImageKey].TranslateTransform(dx, 0); iconsSelectedBrushes[tabPage.ImageKey].TranslateTransform(dx, 0); } g.FillRectangle(currentTabIndex == _baseTabControl.SelectedIndex ? iconsSelectedBrushes[tabPage.ImageKey] : iconsBrushes[tabPage.ImageKey], iconRect); } } // Draw divider if not using colors if (!UseColors) { using (Pen dividerPen = new Pen(SkinManager.DividersColor, 1)) { g.DrawLine(dividerPen, Width - 1, 0, Width - 1, Height); } } // Animate tab indicator var previousSelectedTabIndexIfHasOne = _previousSelectedTabIndex == -1 ? _baseTabControl.SelectedIndex : _previousSelectedTabIndex; var previousActiveTabRect = _drawerItemRects[previousSelectedTabIndexIfHasOne]; var activeTabPageRect = _drawerItemRects[_baseTabControl.SelectedIndex]; var y = previousActiveTabRect.Y + (int)((activeTabPageRect.Y - previousActiveTabRect.Y) * clickAnimProgress); var x = ShowIconsWhenHidden ? -Location.X : 0; var height = drawerItemHeight; g.FillRectangle(SkinManager.ColorScheme.AccentBrush, x, y, IndicatorWidth, height); }
protected override void OnPaint(PaintEventArgs pevent) { base.OnPaint(pevent); var g = pevent.Graphics; g.Clear(Parent.BackColor); SolidBrush backBrush = new SolidBrush(DrawHelper.BlendColor(Parent.BackColor, SkinManager.BackgroundAlternativeColor, SkinManager.BackgroundAlternativeColor.A)); g.FillRectangle( !Enabled ? SkinManager.BackgroundDisabledBrush : // Disabled Focused ? SkinManager.BackgroundFocusBrush : // Focused MouseState == MouseState.HOVER ? SkinManager.BackgroundHoverBrush : // Hover backBrush, // Normal ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width, LINE_Y); // HintText bool userTextPresent = !String.IsNullOrEmpty(Text); Color textColor = Enabled ? Focused ? UseAccent ? SkinManager.ColorScheme.AccentColor : SkinManager.ColorScheme.PrimaryColor : // Focused SkinManager.TextHighEmphasisColor : // Inactive SkinManager.TextDisabledOrHintColor; // Disabled Rectangle hintRect = new Rectangle(SkinManager.FORM_PADDING, ClientRectangle.Y, Width, LINE_Y); int hintTextSize = 16; // bottom line base g.FillRectangle(SkinManager.DividersAlternativeBrush, 0, LINE_Y, Width, 1); if (!_animationManager.IsAnimating()) { // No animation if (hasHint && UseTallSize && (Focused || userTextPresent)) { // hint text hintRect = new Rectangle(SkinManager.FORM_PADDING, HINT_TEXT_SMALL_Y, Width, HINT_TEXT_SMALL_SIZE); hintTextSize = 12; } // bottom line if (Focused) { g.FillRectangle(UseAccent ? SkinManager.ColorScheme.AccentBrush : SkinManager.ColorScheme.PrimaryBrush, 0, LINE_Y, Width, 2); } } else { // Animate - Focus got/lost double animationProgress = _animationManager.GetProgress(); // hint Animation if (hasHint && UseTallSize) { hintRect = new Rectangle( SkinManager.FORM_PADDING, userTextPresent ? (HINT_TEXT_SMALL_Y) : ClientRectangle.Y + (int)((HINT_TEXT_SMALL_Y - ClientRectangle.Y) * animationProgress), Width, userTextPresent ? (HINT_TEXT_SMALL_SIZE) : (int)(LINE_Y + (HINT_TEXT_SMALL_SIZE - LINE_Y) * animationProgress)); hintTextSize = userTextPresent ? 12 : (int)(16 + (12 - 16) * animationProgress); } // Line Animation int LineAnimationWidth = (int)(Width * animationProgress); int LineAnimationX = (Width / 2) - (LineAnimationWidth / 2); g.FillRectangle(UseAccent ? SkinManager.ColorScheme.AccentBrush : SkinManager.ColorScheme.PrimaryBrush, LineAnimationX, LINE_Y, LineAnimationWidth, 2); } // Text stuff: string textToDisplay = Password ? Text.ToSecureString() : Text; string textSelected; Rectangle textSelectRect; // Calc text Rect Rectangle textRect = new Rectangle( SkinManager.FORM_PADDING, hasHint && UseTallSize ? (hintRect.Y + hintRect.Height) - 2 : ClientRectangle.Y, ClientRectangle.Width - SkinManager.FORM_PADDING * 2 + scrollPos.X, hasHint && UseTallSize ? LINE_Y - (hintRect.Y + hintRect.Height) : LINE_Y); g.Clip = new Region(textRect); textRect.X -= scrollPos.X; using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { // Selection rects calc string textBeforeSelection = textToDisplay.Substring(0, SelectionStart); textSelected = textToDisplay.Substring(SelectionStart, SelectionLength); int selectX = NativeText.MeasureLogString(textBeforeSelection, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Subtitle1)).Width; int selectWidth = NativeText.MeasureLogString(textSelected, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Subtitle1)).Width; textSelectRect = new Rectangle( textRect.X + selectX, UseTallSize ? hasHint ? textRect.Y + BOTTOM_PADDING : // tall and hint LINE_Y / 3 - BOTTOM_PADDING : // tall and no hint BOTTOM_PADDING, // not tall selectWidth, UseTallSize ? hasHint ? textRect.Height - BOTTOM_PADDING * 2 : // tall and hint (int)(LINE_Y / 2) : // tall and no hint LINE_Y - BOTTOM_PADDING * 2); // not tall // Draw user text NativeText.DrawTransparentText( textToDisplay, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Subtitle1), Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, textRect.Location, textRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } if (Focused) { // Draw Selection Rectangle g.FillRectangle(UseAccent ? SkinManager.ColorScheme.AccentBrush : SkinManager.ColorScheme.DarkPrimaryBrush, textSelectRect); // Draw Selected Text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText( textSelected, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Subtitle1), SkinManager.ColorScheme.TextColor, textSelectRect.Location, textSelectRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } } g.Clip = new Region(ClientRectangle); // Draw hint text if (hasHint && (UseTallSize || String.IsNullOrEmpty(Text))) { using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText( Hint, SkinManager.getTextBoxFontBySize(hintTextSize), Enabled ? Focused ? UseAccent ? SkinManager.ColorScheme.AccentColor : // Focus Accent SkinManager.ColorScheme.PrimaryColor : // Focus Primary SkinManager.TextMediumEmphasisColor : // not focused SkinManager.TextDisabledOrHintColor, // Disabled hintRect.Location, hintRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } } }
protected override void OnPaint(PaintEventArgs e) { var hoverBrush = SkinManager.BackgroundHoverBrush; var downBrush = SkinManager.BackgroundFocusBrush; var g = e.Graphics; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; g.Clear(SkinManager.BackdropColor); //Draw border using (var borderPen = new Pen(SkinManager.DividersColor, 1)) { g.DrawLine(borderPen, new Point(0, _actionBarBounds.Bottom), new Point(0, Height - 2)); g.DrawLine(borderPen, new Point(Width - 1, _actionBarBounds.Bottom), new Point(Width - 1, Height - 2)); g.DrawLine(borderPen, new Point(0, Height - 1), new Point(Width - 1, Height - 1)); } if (_formStyle != FormStyles.StatusAndActionBar_None) { if (ControlBox == true) { g.FillRectangle(SkinManager.ColorScheme.DarkPrimaryBrush, _statusBarBounds); g.FillRectangle(SkinManager.ColorScheme.PrimaryBrush, _actionBarBounds); } // Determine whether or not we even should be drawing the buttons. bool showMin = MinimizeBox && ControlBox; bool showMax = MaximizeBox && ControlBox; // When MaximizeButton == false, the minimize button will be painted in its place if (_buttonState == ButtonState.MinOver && showMin) { g.FillRectangle(hoverBrush, showMax ? _minButtonBounds : _maxButtonBounds); } if (_buttonState == ButtonState.MinDown && showMin) { g.FillRectangle(downBrush, showMax ? _minButtonBounds : _maxButtonBounds); } if (_buttonState == ButtonState.MaxOver && showMax) { g.FillRectangle(hoverBrush, _maxButtonBounds); } if (_buttonState == ButtonState.MaxDown && showMax) { g.FillRectangle(downBrush, _maxButtonBounds); } if (_buttonState == ButtonState.XOver && ControlBox) { g.FillRectangle(SkinManager.BackgroundHoverRedBrush, _xButtonBounds); } if (_buttonState == ButtonState.XDown && ControlBox) { g.FillRectangle(SkinManager.BackgroundDownRedBrush, _xButtonBounds); } using (var formButtonsPen = new Pen(SkinManager.ColorScheme.TextColor, 2)) { // Minimize button. if (showMin) { int x = showMax ? _minButtonBounds.X : _maxButtonBounds.X; int y = showMax ? _minButtonBounds.Y : _maxButtonBounds.Y; g.DrawLine( formButtonsPen, x + (int)(_minButtonBounds.Width * 0.33), y + (int)(_minButtonBounds.Height * 0.66), x + (int)(_minButtonBounds.Width * 0.66), y + (int)(_minButtonBounds.Height * 0.66) ); } // Maximize button if (showMax) { g.DrawRectangle( formButtonsPen, _maxButtonBounds.X + (int)(_maxButtonBounds.Width * 0.33), _maxButtonBounds.Y + (int)(_maxButtonBounds.Height * 0.36), (int)(_maxButtonBounds.Width * 0.39), (int)(_maxButtonBounds.Height * 0.31) ); } // Close button if (ControlBox) { g.DrawLine( formButtonsPen, _xButtonBounds.X + (int)(_xButtonBounds.Width * 0.33), _xButtonBounds.Y + (int)(_xButtonBounds.Height * 0.33), _xButtonBounds.X + (int)(_xButtonBounds.Width * 0.66), _xButtonBounds.Y + (int)(_xButtonBounds.Height * 0.66) ); g.DrawLine( formButtonsPen, _xButtonBounds.X + (int)(_xButtonBounds.Width * 0.66), _xButtonBounds.Y + (int)(_xButtonBounds.Height * 0.33), _xButtonBounds.X + (int)(_xButtonBounds.Width * 0.33), _xButtonBounds.Y + (int)(_xButtonBounds.Height * 0.66)); } } } // Drawer Icon if (DrawerTabControl != null && _formStyle != FormStyles.ActionBar_None && _formStyle != FormStyles.StatusAndActionBar_None) { if (_buttonState == ButtonState.DrawerOver) { g.FillRectangle(hoverBrush, _drawerButtonBounds); } if (_buttonState == ButtonState.DrawerDown) { g.FillRectangle(downBrush, _drawerButtonBounds); } _drawerIconRect = new Rectangle(SkinManager.FORM_PADDING / 2, STATUS_BAR_HEIGHT, ACTION_BAR_HEIGHT_DEFAULT, ACTION_BAR_HEIGHT); // Ripple if (_clickAnimManager.IsAnimating()) { var clickAnimProgress = _clickAnimManager.GetProgress(); var rippleBrush = new SolidBrush(Color.FromArgb((int)(51 - (clickAnimProgress * 50)), Color.White)); var rippleSize = (int)(clickAnimProgress * _drawerIconRect.Width * 1.75); g.SetClip(_drawerIconRect); g.FillEllipse(rippleBrush, new Rectangle(_animationSource.X - rippleSize / 2, _animationSource.Y - rippleSize / 2, rippleSize, rippleSize)); g.ResetClip(); rippleBrush.Dispose(); } using (var formButtonsPen = new Pen(SkinManager.ColorScheme.TextColor, 2)) { // Middle line g.DrawLine( formButtonsPen, _drawerIconRect.X + (int)(SkinManager.FORM_PADDING), _drawerIconRect.Y + (int)(ACTION_BAR_HEIGHT / 2), _drawerIconRect.X + (int)(SkinManager.FORM_PADDING) + 18, _drawerIconRect.Y + (int)(ACTION_BAR_HEIGHT / 2)); // Bottom line g.DrawLine( formButtonsPen, _drawerIconRect.X + (int)(SkinManager.FORM_PADDING), _drawerIconRect.Y + (int)(ACTION_BAR_HEIGHT / 2) - 6, _drawerIconRect.X + (int)(SkinManager.FORM_PADDING) + 18, _drawerIconRect.Y + (int)(ACTION_BAR_HEIGHT / 2) - 6); // Top line g.DrawLine( formButtonsPen, _drawerIconRect.X + (int)(SkinManager.FORM_PADDING), _drawerIconRect.Y + (int)(ACTION_BAR_HEIGHT / 2) + 6, _drawerIconRect.X + (int)(SkinManager.FORM_PADDING) + 18, _drawerIconRect.Y + (int)(ACTION_BAR_HEIGHT / 2) + 6); } } if (ControlBox == true && _formStyle != FormStyles.ActionBar_None && _formStyle != FormStyles.StatusAndActionBar_None) { //Form title using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { Rectangle textLocation = new Rectangle(DrawerTabControl != null ? TITLE_LEFT_PADDING : TITLE_LEFT_PADDING - (ICON_SIZE + (ACTION_BAR_PADDING * 2)), STATUS_BAR_HEIGHT, Width, ACTION_BAR_HEIGHT); NativeText.DrawTransparentText(Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.H6), SkinManager.ColorScheme.TextColor, textLocation.Location, textLocation.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } } }
protected override void OnPaint(PaintEventArgs pevent) { Graphics g = pevent.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; // clear the control g.Clear(Parent.BackColor); int CHECKBOX_CENTER = _boxOffset + CHECKBOX_SIZE_HALF - 1; Point animationSource = new Point(CHECKBOX_CENTER, CHECKBOX_CENTER); double animationProgress = _checkAM.GetProgress(); int colorAlpha = Enabled ? (int)(animationProgress * 255.0) : SkinManager.CheckBoxOffDisabledColor.A; int backgroundAlpha = Enabled ? (int)(SkinManager.CheckboxOffColor.A * (1.0 - animationProgress)) : SkinManager.CheckBoxOffDisabledColor.A; int rippleHeight = (HEIGHT_RIPPLE % 2 == 0) ? HEIGHT_RIPPLE - 3 : HEIGHT_RIPPLE - 2; SolidBrush brush = new SolidBrush(Color.FromArgb(colorAlpha, Enabled ? SkinManager.ColorScheme.AccentColor : SkinManager.CheckBoxOffDisabledColor)); Pen pen = new Pen(brush.Color, 2); // draw hover animation if (Ripple) { double animationValue = _hoverAM.IsAnimating() ? _hoverAM.GetProgress() : hovered ? 1 : 0; int rippleSize = (int)(rippleHeight * (0.7 + (0.3 * animationValue))); using (SolidBrush rippleBrush = new SolidBrush(Color.FromArgb((int)(40 * animationValue), !Checked ? (SkinManager.Theme == MaterialSkinManager.Themes.LIGHT ? Color.Black : Color.White) : brush.Color))) // no animation { g.FillEllipse(rippleBrush, new Rectangle(animationSource.X - rippleSize / 2, animationSource.Y - rippleSize / 2, rippleSize, rippleSize)); } } // draw ripple animation if (Ripple && _rippleAM.IsAnimating()) { for (int i = 0; i < _rippleAM.GetAnimationCount(); i++) { double animationValue = _rippleAM.GetProgress(i); int rippleSize = (_rippleAM.GetDirection(i) == AnimationDirection.InOutIn) ? (int)(rippleHeight * (0.7 + (0.3 * animationValue))) : rippleHeight; using (SolidBrush rippleBrush = new SolidBrush(Color.FromArgb((int)((animationValue * 40)), !Checked ? (SkinManager.Theme == MaterialSkinManager.Themes.LIGHT ? Color.Black : Color.White) : brush.Color))) { g.FillEllipse(rippleBrush, new Rectangle(animationSource.X - rippleSize / 2, animationSource.Y - rippleSize / 2, rippleSize, rippleSize)); } } } Rectangle checkMarkLineFill = new Rectangle(_boxOffset, _boxOffset, (int)(CHECKBOX_SIZE * animationProgress), CHECKBOX_SIZE); using (GraphicsPath checkmarkPath = DrawHelper.CreateRoundRect(_boxOffset - 0.5f, _boxOffset - 0.5f, CHECKBOX_SIZE, CHECKBOX_SIZE, 1)) { if (Enabled) { using (Pen pen2 = new Pen(DrawHelper.BlendColor(Parent.BackColor, Enabled ? SkinManager.CheckboxOffColor : SkinManager.CheckBoxOffDisabledColor, backgroundAlpha), 2)) { g.DrawPath(pen2, checkmarkPath); } g.DrawPath(pen, checkmarkPath); g.FillPath(brush, checkmarkPath); } else { if (Checked) { g.FillPath(brush, checkmarkPath); } else { g.DrawPath(pen, checkmarkPath); } } g.DrawImageUnscaledAndClipped(DrawCheckMarkBitmap(), checkMarkLineFill); } // draw checkbox text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { Rectangle textLocation = new Rectangle(_boxOffset + TEXT_OFFSET, 0, Width - (_boxOffset + TEXT_OFFSET), HEIGHT_RIPPLE); NativeText.DrawTransparentText(Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1), Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, textLocation.Location, textLocation.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } // dispose used paint objects pen.Dispose(); brush.Dispose(); }
protected override void OnPaint(PaintEventArgs e) { var g = e.Graphics; g.TextRenderingHint = TextRenderingHint.AntiAlias; g.Clear(Parent.BackColor); // card rectangle path RectangleF expansionPanelRectF = new RectangleF(ClientRectangle.Location, ClientRectangle.Size); expansionPanelRectF.X -= 0.5f; expansionPanelRectF.Y -= 0.5f; GraphicsPath expansionPanelPath = DrawHelper.CreateRoundRect(expansionPanelRectF, 2); // button shadow (blend with form shadow) DrawHelper.DrawSquareShadow(g, ClientRectangle); // Draw expansion panel // Disabled if (!Enabled) { using (SolidBrush disabledBrush = new SolidBrush(DrawHelper.BlendColor(Parent.BackColor, SkinManager.BackgroundDisabledColor, SkinManager.BackgroundDisabledColor.A))) { g.FillPath(disabledBrush, expansionPanelPath); } } // Mormal else { if ((_buttonState == ButtonState.HeaderOver | _buttonState == ButtonState.ColapseExpandOver) && _collapse) { RectangleF expansionPanelBorderRectF = new RectangleF(ClientRectangle.X + 1, ClientRectangle.Y + 1, ClientRectangle.Width - 2, ClientRectangle.Height - 2); expansionPanelBorderRectF.X -= 0.5f; expansionPanelBorderRectF.Y -= 0.5f; GraphicsPath expansionPanelBoarderPath = DrawHelper.CreateRoundRect(expansionPanelBorderRectF, 2); g.FillPath(SkinManager.ExpansionPanelFocusBrush, expansionPanelBoarderPath); } else { using (SolidBrush normalBrush = new SolidBrush(SkinManager.BackgroundColor)) { g.FillPath(normalBrush, expansionPanelPath); } } } // Calc text Rect var RectangleX = (RightToLeft == RightToLeft.Yes) ? Width - (TextRenderer.MeasureText(_titleHeader, Font).Width + _expansionPanelDefaultPadding + _leftrightPadding) : _leftrightPadding; Rectangle headerRect = new Rectangle( RectangleX, (_headerHeight - _textHeaderHeight) / 2, TextRenderer.MeasureText(_titleHeader, Font).Width + _expansionPanelDefaultPadding, _textHeaderHeight); //Draw headers using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { // Draw header text var textAlignFlag = RightToLeft == RightToLeft.Yes ? NativeTextRenderer.TextAlignFlags.Right : NativeTextRenderer.TextAlignFlags.Left; NativeText.DrawTransparentText( _titleHeader, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1, RightToLeft), Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, headerRect.Location, headerRect.Size, textAlignFlag | NativeTextRenderer.TextAlignFlags.Middle); } if (!String.IsNullOrEmpty(_descriptionHeader)) { //Draw description header text RectangleX = (RightToLeft == RightToLeft.Yes) ? _leftrightPadding + _expansionPanelDefaultPadding : headerRect.Right + _expansionPanelDefaultPadding; var RectangleW = (RightToLeft == RightToLeft.Yes) ? headerRect.Left - _expansionPanelDefaultPadding - _expansionPanelDefaultPadding : _expandcollapseBounds.Left - (headerRect.Right + _expansionPanelDefaultPadding) - _expansionPanelDefaultPadding; Rectangle headerDescriptionRect = new Rectangle( RectangleX, (_headerHeight - _textHeaderHeight) / 2, RectangleW, _textHeaderHeight); using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { // Draw description header text var textAlignFlag = RightToLeft == RightToLeft.Yes ? NativeTextRenderer.TextAlignFlags.Right : NativeTextRenderer.TextAlignFlags.Left; NativeText.DrawTransparentText( _descriptionHeader, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1, RightToLeft), SkinManager.TextDisabledOrHintColor, headerDescriptionRect.Location, headerDescriptionRect.Size, textAlignFlag | NativeTextRenderer.TextAlignFlags.Middle); } } if (_showCollapseExpand == true) { using (var formButtonsPen = new Pen(_useAccentColor && Enabled ? SkinManager.ColorScheme.AccentColor : SkinManager.TextDisabledOrHintColor, 2)) { if (_collapse) { //Draw Expand button System.Drawing.Drawing2D.GraphicsPath pth = new System.Drawing.Drawing2D.GraphicsPath(); PointF TopLeft = new PointF(_expandcollapseBounds.X + 6, _expandcollapseBounds.Y + 9); PointF MidBottom = new PointF(_expandcollapseBounds.X + 12, _expandcollapseBounds.Y + 15); PointF TopRight = new PointF(_expandcollapseBounds.X + 18, _expandcollapseBounds.Y + 9); pth.AddLine(TopLeft, MidBottom); pth.AddLine(TopRight, MidBottom); g.DrawPath(formButtonsPen, pth); } else { // Draw Collapse button System.Drawing.Drawing2D.GraphicsPath pth = new System.Drawing.Drawing2D.GraphicsPath(); PointF BottomLeft = new PointF(_expandcollapseBounds.X + 6, _expandcollapseBounds.Y + 15); PointF MidTop = new PointF(_expandcollapseBounds.X + 12, _expandcollapseBounds.Y + 9); PointF BottomRight = new PointF(_expandcollapseBounds.X + 18, _expandcollapseBounds.Y + 15); pth.AddLine(BottomLeft, MidTop); pth.AddLine(BottomRight, MidTop); g.DrawPath(formButtonsPen, pth); } } } if (!_collapse && _showValidationButtons) { //Draw divider g.DrawLine(new Pen(SkinManager.DividersColor, 1), new Point(0, Height - _footerHeight), new Point(Width, Height - _footerHeight)); } }
protected override void OnPaint(PaintEventArgs pevent) { var g = pevent.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; g.Clear(Parent.BackColor); var animationProgress = _checkAM.GetProgress(); // Draw Track Color thumbColor = DrawHelper.BlendColor( (Enabled ? SkinManager.SwitchOffThumbColor : SkinManager.SwitchOffDisabledThumbColor), // Off color (Enabled ? SkinManager.ColorScheme.AccentColor : DrawHelper.BlendColor(SkinManager.ColorScheme.AccentColor, SkinManager.SwitchOffDisabledThumbColor, 197)), // On color animationProgress * 255); // Blend amount using (var path = DrawHelper.CreateRoundRect(new Rectangle(TRACK_CENTER_X_BEGIN - TRACK_RADIUS, TRACK_CENTER_Y - TRACK_SIZE_HEIGHT / 2, TRACK_SIZE_WIDTH, TRACK_SIZE_HEIGHT), TRACK_RADIUS)) { using (SolidBrush trackBrush = new SolidBrush( Color.FromArgb(Enabled ? SkinManager.SwitchOffTrackColor.A : SkinManager.BackgroundDisabledColor.A, // Track alpha DrawHelper.BlendColor( // animate color (Enabled ? SkinManager.SwitchOffTrackColor : SkinManager.BackgroundDisabledColor), // Off color SkinManager.ColorScheme.AccentColor, // On color animationProgress * 255) // Blend amount .RemoveAlpha()))) { g.FillPath(trackBrush, path); } } // Calculate animation movement X position int OffsetX = (int)(TRACK_CENTER_X_DELTA * animationProgress); // Ripple int rippleSize = (Height % 2 == 0) ? Height - 2 : Height - 3; Color rippleColor = Color.FromArgb(40, // color alpha Checked ? SkinManager.ColorScheme.AccentColor : // On color (SkinManager.Theme == MaterialSkinManager.Themes.LIGHT ? Color.Black : Color.White)); // Off color if (Ripple && _rippleAM.IsAnimating()) { for (int i = 0; i < _rippleAM.GetAnimationCount(); i++) { double rippleAnimProgress = _rippleAM.GetProgress(i); int rippleAnimatedDiameter = (_rippleAM.GetDirection(i) == AnimationDirection.InOutIn) ? (int)(rippleSize * (0.7 + (0.3 * rippleAnimProgress))) : rippleSize; using (SolidBrush rippleBrush = new SolidBrush(Color.FromArgb((int)(40 * rippleAnimProgress), rippleColor.RemoveAlpha()))) { g.FillEllipse(rippleBrush, new Rectangle(TRACK_CENTER_X_BEGIN + OffsetX - rippleAnimatedDiameter / 2, TRACK_CENTER_Y - rippleAnimatedDiameter / 2, rippleAnimatedDiameter, rippleAnimatedDiameter)); } } } // Hover if (Ripple) { double rippleAnimProgress = _hoverAM.GetProgress(); int rippleAnimatedDiameter = (int)(rippleSize * (0.7 + (0.3 * rippleAnimProgress))); using (SolidBrush rippleBrush = new SolidBrush(Color.FromArgb((int)(40 * rippleAnimProgress), rippleColor.RemoveAlpha()))) { g.FillEllipse(rippleBrush, new Rectangle(TRACK_CENTER_X_BEGIN + OffsetX - rippleAnimatedDiameter / 2, TRACK_CENTER_Y - rippleAnimatedDiameter / 2, rippleAnimatedDiameter, rippleAnimatedDiameter)); } } // draw Thumb Shadow RectangleF thumbBounds = new RectangleF(TRACK_CENTER_X_BEGIN + OffsetX - THUMB_SIZE_HALF, TRACK_CENTER_Y - THUMB_SIZE_HALF, THUMB_SIZE, THUMB_SIZE); using (SolidBrush shadowBrush = new SolidBrush(Color.FromArgb(12, 0, 0, 0))) { g.FillEllipse(shadowBrush, new RectangleF(thumbBounds.X - 2, thumbBounds.Y - 1, thumbBounds.Width + 4, thumbBounds.Height + 6)); g.FillEllipse(shadowBrush, new RectangleF(thumbBounds.X - 1, thumbBounds.Y - 1, thumbBounds.Width + 2, thumbBounds.Height + 4)); g.FillEllipse(shadowBrush, new RectangleF(thumbBounds.X - 0, thumbBounds.Y - 0, thumbBounds.Width + 0, thumbBounds.Height + 2)); g.FillEllipse(shadowBrush, new RectangleF(thumbBounds.X - 0, thumbBounds.Y + 2, thumbBounds.Width + 0, thumbBounds.Height + 0)); g.FillEllipse(shadowBrush, new RectangleF(thumbBounds.X - 0, thumbBounds.Y + 1, thumbBounds.Width + 0, thumbBounds.Height + 0)); } // draw Thumb using (SolidBrush thumbBrush = new SolidBrush(thumbColor)) { g.FillEllipse(thumbBrush, thumbBounds); } // draw text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { Rectangle textLocation = (RightToLeft == RightToLeft.Yes) ? new Rectangle(0, 0, Width - (TEXT_OFFSET + TRACK_SIZE_WIDTH), Height) : new Rectangle(TEXT_OFFSET + TRACK_SIZE_WIDTH, 0, Width - (TEXT_OFFSET + TRACK_SIZE_WIDTH), Height); NativeText.DrawTransparentText( Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1, RightToLeft), Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, textLocation.Location, textLocation.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } }
protected override void OnPaint(PaintEventArgs pevent) { Graphics g = pevent.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; // clear the control g.Clear(Parent.BackColor); int RADIOBUTTON_CENTER = _boxOffset + RADIOBUTTON_SIZE_HALF; Point animationSource = new Point(RADIOBUTTON_CENTER, RADIOBUTTON_CENTER); double animationProgress = _checkAM.GetProgress(); int colorAlpha = Enabled ? (int)(animationProgress * 255.0) : SkinManager.CheckBoxOffDisabledColor.A; int backgroundAlpha = Enabled ? (int)(SkinManager.CheckboxOffColor.A * (1.0 - animationProgress)) : SkinManager.CheckBoxOffDisabledColor.A; float animationSize = (float)(animationProgress * 9f); float animationSizeHalf = animationSize / 2; int rippleHeight = (HEIGHT_RIPPLE % 2 == 0) ? HEIGHT_RIPPLE - 3 : HEIGHT_RIPPLE - 2; Color RadioColor = Color.FromArgb(colorAlpha, Enabled ? SkinManager.ColorScheme.AccentColor : SkinManager.CheckBoxOffDisabledColor); // draw hover animation if (Ripple) { double animationValue = _hoverAM.GetProgress(); int rippleSize = (int)(rippleHeight * (0.7 + (0.3 * animationValue))); using (SolidBrush rippleBrush = new SolidBrush(Color.FromArgb((int)(40 * animationValue), !Checked ? (SkinManager.Theme == MaterialSkinManager.Themes.LIGHT ? Color.Black : Color.White) : RadioColor))) { g.FillEllipse(rippleBrush, new Rectangle(animationSource.X - rippleSize / 2, animationSource.Y - rippleSize / 2, rippleSize - 1, rippleSize - 1)); } } // draw ripple animation if (Ripple && _rippleAM.IsAnimating()) { for (int i = 0; i < _rippleAM.GetAnimationCount(); i++) { double animationValue = _rippleAM.GetProgress(i); int rippleSize = (_rippleAM.GetDirection(i) == AnimationDirection.InOutIn) ? (int)(rippleHeight * (0.7 + (0.3 * animationValue))) : rippleHeight; using (SolidBrush rippleBrush = new SolidBrush(Color.FromArgb((int)((animationValue * 40)), !Checked ? (SkinManager.Theme == MaterialSkinManager.Themes.LIGHT ? Color.Black : Color.White) : RadioColor))) { g.FillEllipse(rippleBrush, new Rectangle(animationSource.X - rippleSize / 2, animationSource.Y - rippleSize / 2, rippleSize - 1, rippleSize - 1)); } } } // draw radiobutton circle using (Pen pen = new Pen(DrawHelper.BlendColor(Parent.BackColor, Enabled ? SkinManager.CheckboxOffColor : SkinManager.CheckBoxOffDisabledColor, backgroundAlpha), 2)) { g.DrawEllipse(pen, new Rectangle(_boxOffset, _boxOffset, RADIOBUTTON_SIZE, RADIOBUTTON_SIZE)); } if (Enabled) { using (Pen pen = new Pen(RadioColor, 2)) { g.DrawEllipse(pen, new Rectangle(_boxOffset, _boxOffset, RADIOBUTTON_SIZE, RADIOBUTTON_SIZE)); } } if (Checked) { using (SolidBrush brush = new SolidBrush(RadioColor)) { g.FillEllipse(brush, new RectangleF(RADIOBUTTON_CENTER - animationSizeHalf, RADIOBUTTON_CENTER - animationSizeHalf, animationSize, animationSize)); } } // Text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { Rectangle textLocation = new Rectangle(_boxOffset + TEXT_OFFSET, 0, Width, Height); NativeText.DrawTransparentText(Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1), Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, textLocation.Location, textLocation.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } }