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; } }
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) { 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)); }
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)); }
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 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 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); } } }