From d40fed5ce2bc806a91245adb18039634eac13ed0 Mon Sep 17 00:00:00 2001 From: MichaelTheShifter Date: Wed, 20 Jul 2016 09:40:36 -0400 Subject: Move ShiftUI source code to ShiftOS This'll be a lot easier to work on. --- source/ShiftUI/Theming/Default/ButtonPainter.cs | 189 ++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 source/ShiftUI/Theming/Default/ButtonPainter.cs (limited to 'source/ShiftUI/Theming/Default/ButtonPainter.cs') diff --git a/source/ShiftUI/Theming/Default/ButtonPainter.cs b/source/ShiftUI/Theming/Default/ButtonPainter.cs new file mode 100644 index 0000000..366b17d --- /dev/null +++ b/source/ShiftUI/Theming/Default/ButtonPainter.cs @@ -0,0 +1,189 @@ +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// Copyright (c) 2007 Novell, Inc. +// +// Authors: +// Andreia Gaita (avidigal@novell.com) + +using System; +using System.Drawing; + +namespace ShiftUI.Theming.Default +{ + /// + /// Summary description for Button. + /// + internal class ButtonPainter + { + public ButtonPainter () + { + + } + + protected SystemResPool ResPool { get { return ThemeEngine.Current.ResPool; } } + + #region Buttons + #region Standard Button + public virtual void Draw (Graphics g, Rectangle bounds, ButtonThemeState state, Color backColor, Color foreColor) { + bool is_themecolor = backColor.ToArgb () == ThemeEngine.Current.ColorControl.ToArgb () || backColor == Color.Empty ? true : false; + CPColor cpcolor = is_themecolor ? CPColor.Empty : ResPool.GetCPColor (backColor); + Pen pen; + + switch (state) { + case ButtonThemeState.Normal: + case ButtonThemeState.Entered: + case ButtonThemeState.Disabled: + pen = is_themecolor ? SystemPens.ControlLightLight : ResPool.GetPen (cpcolor.LightLight); + g.DrawLine (pen, bounds.X, bounds.Y, bounds.X, bounds.Bottom - 2); + g.DrawLine (pen, bounds.X + 1, bounds.Y, bounds.Right - 2, bounds.Y); + + pen = is_themecolor ? SystemPens.Control : ResPool.GetPen (backColor); + g.DrawLine (pen, bounds.X + 1, bounds.Y + 1, bounds.X + 1, bounds.Bottom - 3); + g.DrawLine (pen, bounds.X + 2, bounds.Y + 1, bounds.Right - 3, bounds.Y + 1); + + pen = is_themecolor ? SystemPens.ControlDark : ResPool.GetPen (cpcolor.Dark); + g.DrawLine (pen, bounds.X + 1, bounds.Bottom - 2, bounds.Right - 2, bounds.Bottom - 2); + g.DrawLine (pen, bounds.Right - 2, bounds.Y + 1, bounds.Right - 2, bounds.Bottom - 3); + + pen = is_themecolor ? SystemPens.ControlDarkDark : ResPool.GetPen (cpcolor.DarkDark); + g.DrawLine (pen, bounds.X, bounds.Bottom - 1, bounds.Right - 1, bounds.Bottom - 1); + g.DrawLine (pen, bounds.Right - 1, bounds.Y, bounds.Right - 1, bounds.Bottom - 2); + break; + case ButtonThemeState.Pressed: + g.DrawRectangle (ResPool.GetPen (foreColor), bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1); + + bounds.Inflate (-1, -1); + pen = is_themecolor ? SystemPens.ControlDark : ResPool.GetPen (cpcolor.Dark); + g.DrawRectangle (pen, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1); + break; + case ButtonThemeState.Default: + g.DrawRectangle (ResPool.GetPen (foreColor), bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1); + + bounds.Inflate (-1, -1); + pen = is_themecolor ? SystemPens.ControlLightLight : ResPool.GetPen (cpcolor.LightLight); + g.DrawLine (pen, bounds.X, bounds.Y, bounds.X, bounds.Bottom - 2); + g.DrawLine (pen, bounds.X + 1, bounds.Y, bounds.Right - 2, bounds.Y); + + pen = is_themecolor ? SystemPens.Control : ResPool.GetPen (backColor); + g.DrawLine (pen, bounds.X + 1, bounds.Y + 1, bounds.X + 1, bounds.Bottom - 3); + g.DrawLine (pen, bounds.X + 2, bounds.Y + 1, bounds.Right - 3, bounds.Y + 1); + + pen = is_themecolor ? SystemPens.ControlDark : ResPool.GetPen (cpcolor.Dark); + g.DrawLine (pen, bounds.X + 1, bounds.Bottom - 2, bounds.Right - 2, bounds.Bottom - 2); + g.DrawLine (pen, bounds.Right - 2, bounds.Y + 1, bounds.Right - 2, bounds.Bottom - 3); + + pen = is_themecolor ? SystemPens.ControlDarkDark : ResPool.GetPen (cpcolor.DarkDark); + g.DrawLine (pen, bounds.X, bounds.Bottom - 1, bounds.Right - 1, bounds.Bottom - 1); + g.DrawLine (pen, bounds.Right - 1, bounds.Y, bounds.Right - 1, bounds.Bottom - 2); + break; + } + } + #endregion + + #region FlatStyle Button + public virtual void DrawFlat (Graphics g, Rectangle bounds, ButtonThemeState state, Color backColor, Color foreColor, FlatButtonAppearance appearance) { + bool is_themecolor = backColor.ToArgb () == ThemeEngine.Current.ColorControl.ToArgb () || backColor == Color.Empty ? true : false; + CPColor cpcolor = is_themecolor ? CPColor.Empty : ResPool.GetCPColor (backColor); + Pen pen; + + switch (state) { + case ButtonThemeState.Normal: + case ButtonThemeState.Disabled: + // This will just use the BackColor + break; + case ButtonThemeState.Entered: + case ButtonThemeState.Default | ButtonThemeState.Entered: + if (appearance.MouseOverBackColor != Color.Empty) + g.FillRectangle (ResPool.GetSolidBrush (appearance.MouseOverBackColor), bounds); + else + g.FillRectangle (ResPool.GetSolidBrush (ChangeIntensity (backColor, .9F)), bounds); + break; + case ButtonThemeState.Pressed: + if (appearance.MouseDownBackColor != Color.Empty) + g.FillRectangle (ResPool.GetSolidBrush (appearance.MouseDownBackColor), bounds); + else + g.FillRectangle (ResPool.GetSolidBrush (ChangeIntensity (backColor, .95F)), bounds); + break; + case ButtonThemeState.Default: + if (appearance.CheckedBackColor != Color.Empty) + g.FillRectangle (ResPool.GetSolidBrush (appearance.CheckedBackColor), bounds); + break; + } + + if (appearance.BorderColor == Color.Empty) + pen = is_themecolor ? SystemPens.ControlDarkDark : ResPool.GetSizedPen (cpcolor.DarkDark, appearance.BorderSize); + else + pen = ResPool.GetSizedPen (appearance.BorderColor, appearance.BorderSize); + + bounds.Width -= 1; + bounds.Height -= 1; + + if (appearance.BorderSize > 0) + g.DrawRectangle (pen, bounds); + } + #endregion + + #region Popup Button + public virtual void DrawPopup (Graphics g, Rectangle bounds, ButtonThemeState state, Color backColor, Color foreColor) { + bool is_themecolor = backColor.ToArgb () == ThemeEngine.Current.ColorControl.ToArgb () || backColor == Color.Empty ? true : false; + CPColor cpcolor = is_themecolor ? CPColor.Empty : ResPool.GetCPColor (backColor); + Pen pen; + + switch (state) { + case ButtonThemeState.Normal: + case ButtonThemeState.Disabled: + case ButtonThemeState.Pressed: + case ButtonThemeState.Default: + pen = is_themecolor ? SystemPens.ControlDarkDark : ResPool.GetPen (cpcolor.DarkDark); + + bounds.Width -= 1; + bounds.Height -= 1; + g.DrawRectangle (pen, bounds); + + if (state == ButtonThemeState.Default || state == ButtonThemeState.Pressed) { + bounds.Inflate (-1, -1); + g.DrawRectangle (pen, bounds); + } + break; + case ButtonThemeState.Entered: + pen = is_themecolor ? SystemPens.ControlLightLight : ResPool.GetPen (cpcolor.LightLight); + g.DrawLine (pen, bounds.X, bounds.Y, bounds.X, bounds.Bottom - 2); + g.DrawLine (pen, bounds.X + 1, bounds.Y, bounds.Right - 2, bounds.Y); + + pen = is_themecolor ? SystemPens.ControlDark : ResPool.GetPen (cpcolor.Dark); + g.DrawLine (pen, bounds.X, bounds.Bottom - 1, bounds.Right - 1, bounds.Bottom - 1); + g.DrawLine (pen, bounds.Right - 1, bounds.Y, bounds.Right - 1, bounds.Bottom - 2); + break; + } + } + #endregion + #endregion + + private static Color ChangeIntensity (Color baseColor, float percent) + { + int H, I, S; + + WidgetPaint.Color2HBS (baseColor, out H, out I, out S); + int NewIntensity = Math.Min (255, (int)(I * percent)); + + return WidgetPaint.HBS2Color (H, NewIntensity, S); + } + } +} -- cgit v1.2.3