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 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 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 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 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(); } }
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(); } 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);; } }
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) { 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) { Graphics g = pevent.Graphics; g.Clear(Parent.BackColor); g.FillRectangle(Enabled ? Focused ? SkinManager.BackgroundFocusBrush : // Focused MouseState == MouseState.HOVER ? SkinManager.BackgroundHoverBrush : // Hover SkinManager.BackgroundAlternativeBrush : // normal SkinManager.BackgroundDisabledBrush // Disabled , ClientRectangle.X, ClientRectangle.Y, ClientRectangle.Width, LINE_Y); // Create and Draw the arrow System.Drawing.Drawing2D.GraphicsPath pth = new System.Drawing.Drawing2D.GraphicsPath(); PointF TopRight = new PointF(this.Width - 0.5f - SkinManager.FORM_PADDING, (this.Height >> 1) - 2.5f); PointF MidBottom = new PointF(this.Width - 4.5f - SkinManager.FORM_PADDING, (this.Height >> 1) + 2.5f); PointF TopLeft = new PointF(this.Width - 8.5f - SkinManager.FORM_PADDING, (this.Height >> 1) - 2.5f); pth.AddLine(TopLeft, TopRight); pth.AddLine(TopRight, MidBottom); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.FillPath((SolidBrush)(DroppedDown || Focused ? UseAccent ? SkinManager.ColorScheme.AccentBrush : SkinManager.ColorScheme.PrimaryBrush : SkinManager.TextHighEmphasisBrush), pth); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; // HintText bool userTextPresent = SelectedIndex >= 0; 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 && (DroppedDown || Focused || SelectedIndex >= 0)) { // hint text hintRect = new Rectangle(SkinManager.FORM_PADDING, TEXT_SMALL_Y, Width, TEXT_SMALL_SIZE); hintTextSize = 12; } // bottom line if (DroppedDown || 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 && !_animationManager.IsAnimating() ? (TEXT_SMALL_Y) : ClientRectangle.Y + (int)((TEXT_SMALL_Y - ClientRectangle.Y) * animationProgress), Width, userTextPresent && !_animationManager.IsAnimating() ? (TEXT_SMALL_SIZE) : (int)(LINE_Y + (TEXT_SMALL_SIZE - LINE_Y) * animationProgress)); hintTextSize = userTextPresent && !_animationManager.IsAnimating() ? 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); } // Calc text Rect Rectangle textRect = new Rectangle( SkinManager.FORM_PADDING, hasHint && UseTallSize ? (hintRect.Y + hintRect.Height) - 2 : ClientRectangle.Y, ClientRectangle.Width - SkinManager.FORM_PADDING * 3 - 8, hasHint && UseTallSize ? LINE_Y - (hintRect.Y + hintRect.Height) : LINE_Y); g.Clip = new Region(textRect); using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { // Draw user text NativeText.DrawTransparentText( Text, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Subtitle1), Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, textRect.Location, textRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } g.ResetClip(); // Draw hint text if (hasHint && (UseTallSize || String.IsNullOrEmpty(Text))) { using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText( Hint, SkinManager.getTextBoxFontBySize(hintTextSize), Enabled ? DroppedDown || 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 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 if (_tab_over_index >= 0) { //Change mouse over tab background color g.FillRectangle(SkinManager.BackgroundHoverBrush, _tabRects[_tab_over_index].X, _tabRects[_tab_over_index].Y, _tabRects[_tab_over_index].Width, _tabRects[_tab_over_index].Height - _tab_indicator_height); } foreach (TabPage tabPage in _baseTabControl.TabPages) { var currentTabIndex = _baseTabControl.TabPages.IndexOf(tabPage); if (_tabLabel != TabLabelStyle.Icon) { // Text using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { Size textSize = TextRenderer.MeasureText(_baseTabControl.TabPages[currentTabIndex].Text, Font); Rectangle textLocation = new Rectangle(_tabRects[currentTabIndex].X + (TAB_HEADER_PADDING / 2), _tabRects[currentTabIndex].Y, _tabRects[currentTabIndex].Width - (TAB_HEADER_PADDING), _tabRects[currentTabIndex].Height); if (_tabLabel == TabLabelStyle.IconAndText) { textLocation.Y = 46; textLocation.Height = 10; } if (((TAB_HEADER_PADDING * 2) + textSize.Width < TAB_WIDTH_MAX)) { NativeText.DrawTransparentText( tabPage.Text.ToUpper(), Font, Color.FromArgb(CalculateTextAlpha(currentTabIndex, animationProgress), SkinManager.ColorScheme.TextColor), textLocation.Location, textLocation.Size, NativeTextRenderer.TextAlignFlags.Center | NativeTextRenderer.TextAlignFlags.Middle); } else { if (_tabLabel == TabLabelStyle.IconAndText) { textLocation.Y = 40; textLocation.Height = 26; } NativeText.DrawMultilineTransparentText( tabPage.Text.ToUpper(), SkinManager.getFontByType(MaterialSkinManager.fontType.Body2), Color.FromArgb(CalculateTextAlpha(currentTabIndex, animationProgress), SkinManager.ColorScheme.TextColor), textLocation.Location, textLocation.Size, NativeTextRenderer.TextAlignFlags.Center | NativeTextRenderer.TextAlignFlags.Middle); } } } if (_tabLabel != TabLabelStyle.Text) { // Icons if (_baseTabControl.ImageList != null && (!String.IsNullOrEmpty(tabPage.ImageKey) | tabPage.ImageIndex > -1)) { Rectangle iconRect = new Rectangle( _tabRects[currentTabIndex].X + (_tabRects[currentTabIndex].Width / 2) - (ICON_SIZE / 2), _tabRects[currentTabIndex].Y + (_tabRects[currentTabIndex].Height / 2) - (ICON_SIZE / 2), ICON_SIZE, ICON_SIZE); if (_tabLabel == TabLabelStyle.IconAndText) { iconRect.Y = 12; } g.DrawImage(!String.IsNullOrEmpty(tabPage.ImageKey) ? _baseTabControl.ImageList.Images[tabPage.ImageKey]: _baseTabControl.ImageList.Images[tabPage.ImageIndex], iconRect); } } } //Animate tab indicator var previousSelectedTabIndexIfHasOne = _previousSelectedTabIndex == -1 ? _baseTabControl.SelectedIndex : _previousSelectedTabIndex; var previousActiveTabRect = _tabRects[previousSelectedTabIndexIfHasOne]; var activeTabPageRect = _tabRects[_baseTabControl.SelectedIndex]; var y = activeTabPageRect.Bottom - _tab_indicator_height; 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); }
protected override void OnPaint(PaintEventArgs e) { var g = e.Graphics; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; g.Clear(Parent.BackColor); Color _inactiveTrackColor; Color _accentColor; Brush _accentBrush; Brush _disabledBrush; Color _disabledColor; Color _thumbHoverColor; Color _thumbPressedColor; if (_useAccentColor) { _accentColor = SkinManager.ColorScheme.AccentColor; } else { _accentColor = SkinManager.ColorScheme.PrimaryColor; } _accentBrush = new SolidBrush(_accentColor); _disabledBrush = new SolidBrush(Color.FromArgb(255, 158, 158, 158)); if (SkinManager.Theme == MaterialSkinManager.Themes.DARK) { _disabledColor = Color.FromArgb((int)(2.55 * 30), 255, 255, 255); _inactiveTrackColor = _accentColor.Darken(0.25f); } else { _disabledColor = Color.FromArgb((int)(2.55 * (_hovered ? 38 : 26)), 0, 0, 0); _inactiveTrackColor = _accentColor.Lighten(0.6f); } //_disabledBrush = new SolidBrush(_disabledColor); //_thumbHoverColor = Color.FromArgb((int)(2.55 * 15), (Value == 0 ? Color.Gray : _accentColor)); //_thumbPressedColor = Color.FromArgb((int)(2.55 * 30), (Value == 0 ? Color.Gray : _accentColor)); _thumbHoverColor = Color.FromArgb((int)(2.55 * 15), (Value == 0 ? Color.Gray : _accentColor)); _thumbHoverColor = Color.FromArgb((int)(2.55 * 15), _accentColor); _thumbPressedColor = Color.FromArgb((int)(2.55 * 30), _accentColor); //Pen LinePen = new Pen(_disabledColor, _inactiveTrack); //Draw track //g.DrawLine(LinePen, _indicatorSize / 2, Height / 2 + (Height - _indicatorSize) / 2, Width - _indicatorSize / 2, Height / 2 + (Height - _indicatorSize) / 2); //g.DrawLine(LinePen, _sliderRectangle.X + (_indicatorSize / 2), Height / 2 , _sliderRectangle.Right - (_indicatorSize / 2), Height / 2 ); GraphicsPath _inactiveTrackPath = DrawHelper.CreateRoundRect(_sliderRectangle.X + (_thumbRadius / 2), _sliderRectangle.Y + Height / 2 - _inactiveTrack / 2, _sliderRectangle.Width - _thumbRadius, _inactiveTrack, 2); //g.FillPath(_disabledBrush, _inactiveTrackPath); GraphicsPath _activeTrackPath = DrawHelper.CreateRoundRect(_sliderRectangle.X + (_thumbRadius / 2), _sliderRectangle.Y + Height / 2 - _activeTrack / 2, _indicatorRectangleNormal.X - _sliderRectangle.X, _activeTrack, 2); if (Enabled) { //Draw inactive track g.FillPath(new SolidBrush(_inactiveTrackColor), _inactiveTrackPath); //Draw active track //g.DrawLine(SkinManager.ColorScheme.AccentPen, _indicatorSize / 2, Height / 2 + (Height - _indicatorSize) / 2, _indicatorRectangleNormal.X, Height / 2 + (Height - _indicatorSize) / 2); //g.DrawLine(AccentPen, _sliderRectangle.X + (_indicatorSize / 2), Height / 2 , _indicatorRectangleNormal.X + (_indicatorSize / 2), Height / 2 ) ; g.FillPath(_accentBrush, _activeTrackPath); if (_mousePressed) { //g.FillEllipse(_accentBrush, _indicatorRectanglePressed); g.FillEllipse(_accentBrush, _indicatorRectangleNormal); g.FillEllipse(new SolidBrush(_thumbPressedColor), _indicatorRectanglePressed); } else { g.FillEllipse(_accentBrush, _indicatorRectangleNormal); if (_hovered) { g.FillEllipse(new SolidBrush(_thumbHoverColor), _indicatorRectanglePressed); } } } else { //Draw inactive track g.FillPath(new SolidBrush(_disabledColor.Lighten(0.25f)), _inactiveTrackPath); //Draw active track g.FillPath(_disabledBrush, _activeTrackPath); g.FillEllipse(_disabledBrush, _indicatorRectangleNormal); } using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { if (_showText == true) { // Draw text NativeText.DrawTransparentText( Text, SkinManager.getLogFontByType(_fontType), Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, _textRectangle.Location, _textRectangle.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } if (_showValue == true) { // Draw value NativeText.DrawTransparentText( Value.ToString() + ValueSuffix, SkinManager.getLogFontByType(_fontType), Enabled ? SkinManager.TextHighEmphasisColor : SkinManager.TextDisabledOrHintColor, _valueRectangle.Location, _valueRectangle.Size, NativeTextRenderer.TextAlignFlags.Right | NativeTextRenderer.TextAlignFlags.Middle); } } }
protected override void OnPaint(PaintEventArgs pevent) { base.OnPaint(pevent); var g = pevent.Graphics; g.Clear(Parent.BackColor); g.FillRectangle(Focused ? SkinManager.GetButtonPressedBackgroundBrush() : // Focused MouseState == MouseState.HOVER ? SkinManager.GetButtonHoverBackgroundBrush() : // Hover new SolidBrush(SkinManager.GetControlBackgroundColor()), // 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.GetPrimaryTextColor() : // Inactive SkinManager.GetDisabledOrHintColor(); // Disabled Rectangle hintRect = ClientRectangle; int hintTextSize = 16; // bottom line base g.FillRectangle(SkinManager.GetDividersBrush(), 0, LINE_Y, Width, 1); g.FillRectangle(SkinManager.GetDividersBrush(), 0, LINE_Y, Width, 1); if (!_animationManager.IsAnimating()) { // No animation if (hasHint) { // hint text hintRect = new Rectangle(TEXT_MARGIN, Focused || userTextPresent ? TEXT_SMALL_Y : ClientRectangle.Y, Width, userTextPresent || Focused ? TEXT_SMALL_SIZE : LINE_Y); hintTextSize = userTextPresent || Focused ? 12 : 16; } // 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) { hintRect = new Rectangle( TEXT_MARGIN, userTextPresent ? (TEXT_SMALL_Y) : ClientRectangle.Y + (int)((TEXT_SMALL_Y - ClientRectangle.Y) * animationProgress), Width, userTextPresent ? (TEXT_SMALL_SIZE) : (int)(LINE_Y + (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( TEXT_MARGIN, hasHint ? (hintRect.Y + hintRect.Height) - 2 : ClientRectangle.Y, ClientRectangle.Width - TEXT_MARGIN * 2 + scrollPos.X, hasHint ? 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.Body1)).Width; int selectWidth = NativeText.MeasureLogString(textSelected, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1)).Width; textSelectRect = new Rectangle( textRect.X + selectX, hasHint ? textRect.Y + BOTTOM_PADDING : LINE_Y / 3 - BOTTOM_PADDING, selectWidth, hasHint ? textRect.Height - BOTTOM_PADDING * 2 : LINE_Y / 2); // Draw user text NativeText.DrawTransparentText( textToDisplay, SkinManager.getLogFontByType(MaterialSkinManager.fontType.Body1), SkinManager.GetPrimaryTextColor(), 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.Body1), SkinManager.ColorScheme.TextColor, textSelectRect.Location, textSelectRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } } g.Clip = new Region(ClientRectangle); // Draw hint text if (hasHint) { using (NativeTextRenderer NativeText = new NativeTextRenderer(g)) { NativeText.DrawTransparentText( Hint, SkinManager.getTextBoxFontBySize(hintTextSize), textColor, hintRect.Location, hintRect.Size, NativeTextRenderer.TextAlignFlags.Left | NativeTextRenderer.TextAlignFlags.Middle); } } }
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); } }