From 9975e32778b729dc771e28ccb5e30f2d6f5a563f Mon Sep 17 00:00:00 2001
From: Lukasz Nojek <9399633+lukaszmn@users.noreply.github.com>
Date: Sun, 15 Mar 2020 00:49:08 +0100
Subject: [PATCH 1/5] Moved themes to separate classes
---
MaterialSkin/MaterialSkin.csproj | 3 +
MaterialSkin/MaterialSkinManager.cs | 154 +++++++---------------------
MaterialSkin/Themes/Theme.cs | 56 ++++++++++
MaterialSkin/Themes/ThemeDark.cs | 107 +++++++++++++++++++
MaterialSkin/Themes/ThemeLight.cs | 108 +++++++++++++++++++
5 files changed, 310 insertions(+), 118 deletions(-)
create mode 100644 MaterialSkin/Themes/Theme.cs
create mode 100644 MaterialSkin/Themes/ThemeDark.cs
create mode 100644 MaterialSkin/Themes/ThemeLight.cs
diff --git a/MaterialSkin/MaterialSkin.csproj b/MaterialSkin/MaterialSkin.csproj
index 9ac8960a..91feb549 100644
--- a/MaterialSkin/MaterialSkin.csproj
+++ b/MaterialSkin/MaterialSkin.csproj
@@ -119,6 +119,9 @@
True
True
+
+
+
diff --git a/MaterialSkin/MaterialSkinManager.cs b/MaterialSkin/MaterialSkinManager.cs
index eb6802c7..778bd727 100644
--- a/MaterialSkin/MaterialSkinManager.cs
+++ b/MaterialSkin/MaterialSkinManager.cs
@@ -1,7 +1,8 @@
namespace MaterialSkin
{
using MaterialSkin.Controls;
- using MaterialSkin.Properties;
+ using MaterialSkin.Properties;
+ using MaterialSkin.Themes;
using System;
using System.Collections.Generic;
using System.Drawing;
@@ -33,8 +34,8 @@ public class MaterialSkinManager
// Constructor
private MaterialSkinManager()
- {
- Theme = Themes.LIGHT;
+ {
+ Theme = new ThemeLight();
ColorScheme = new ColorScheme(Primary.Indigo500, Primary.Indigo700, Primary.Indigo100, Accent.Pink200, TextShade.WHITE);
// Create and cache Roboto fonts
@@ -89,9 +90,9 @@ private MaterialSkinManager()
}
// Themes
- private Themes _theme;
+ private Theme _theme;
- public Themes Theme
+ public Theme Theme
{
get { return _theme; }
set
@@ -115,138 +116,55 @@ public ColorScheme ColorScheme
}
}
- public enum Themes : byte
- {
- LIGHT,
- DARK
- }
-
- // Text
- private static readonly Color TEXT_HIGH_EMPHASIS_LIGHT = Color.FromArgb(222, 255, 255, 255); // Alpha 87%
-
- private static readonly Brush TEXT_HIGH_EMPHASIS_LIGHT_BRUSH = new SolidBrush(TEXT_HIGH_EMPHASIS_LIGHT);
- private static readonly Color TEXT_HIGH_EMPHASIS_DARK = Color.FromArgb(222, 0, 0, 0); // Alpha 87%
- private static readonly Brush TEXT_HIGH_EMPHASIS_DARK_BRUSH = new SolidBrush(TEXT_HIGH_EMPHASIS_DARK);
-
- private static readonly Color TEXT_MEDIUM_EMPHASIS_LIGHT = Color.FromArgb(153, 255, 255, 255); // Alpha 60%
- private static readonly Brush TEXT_MEDIUM_EMPHASIS_LIGHT_BRUSH = new SolidBrush(TEXT_MEDIUM_EMPHASIS_LIGHT);
- private static readonly Color TEXT_MEDIUM_EMPHASIS_DARK = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
- private static readonly Brush TEXT_MEDIUM_EMPHASIS_DARK_BRUSH = new SolidBrush(TEXT_MEDIUM_EMPHASIS_DARK);
-
- private static readonly Color TEXT_DISABLED_OR_HINT_LIGHT = Color.FromArgb(97, 255, 255, 255); // Alpha 38%
- private static readonly Brush TEXT_DISABLED_OR_HINT_LIGHT_BRUSH = new SolidBrush(TEXT_DISABLED_OR_HINT_LIGHT);
- private static readonly Color TEXT_DISABLED_OR_HINT_DARK = Color.FromArgb(97, 0, 0, 0); // Alpha 38%
- private static readonly Brush TEXT_DISABLED_OR_HINT_DARK_BRUSH = new SolidBrush(TEXT_DISABLED_OR_HINT_DARK);
-
- // Dividers and thin lines
- private static readonly Color DIVIDERS_LIGHT = Color.FromArgb(30, 255, 255, 255); // Alpha 30%
-
- private static readonly Brush DIVIDERS_LIGHT_BRUSH = new SolidBrush(DIVIDERS_LIGHT);
- private static readonly Color DIVIDERS_DARK = Color.FromArgb(30, 0, 0, 0); // Alpha 30%
- private static readonly Brush DIVIDERS_DARK_BRUSH = new SolidBrush(DIVIDERS_DARK);
- private static readonly Color DIVIDERS_ALTERNATIVE_LIGHT = Color.FromArgb(153, 255, 255, 255); // Alpha 60%
- private static readonly Brush DIVIDERS_ALTERNATIVE_LIGHT_BRUSH = new SolidBrush(DIVIDERS_ALTERNATIVE_LIGHT);
- private static readonly Color DIVIDERS_ALTERNATIVE_DARK = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
- private static readonly Brush DIVIDERS_ALTERNATIVE_DARK_BRUSH = new SolidBrush(DIVIDERS_ALTERNATIVE_DARK);
-
- // Checkbox / Radio / Switches
- private static readonly Color CHECKBOX_OFF_LIGHT = Color.FromArgb(138, 0, 0, 0);
-
- private static readonly Brush CHECKBOX_OFF_LIGHT_BRUSH = new SolidBrush(CHECKBOX_OFF_LIGHT);
- private static readonly Color CHECKBOX_OFF_DARK = Color.FromArgb(179, 255, 255, 255);
- private static readonly Brush CHECKBOX_OFF_DARK_BRUSH = new SolidBrush(CHECKBOX_OFF_DARK);
- private static readonly Color CHECKBOX_OFF_DISABLED_LIGHT = Color.FromArgb(66, 0, 0, 0);
- private static readonly Brush CHECKBOX_OFF_DISABLED_LIGHT_BRUSH = new SolidBrush(CHECKBOX_OFF_DISABLED_LIGHT);
- private static readonly Color CHECKBOX_OFF_DISABLED_DARK = Color.FromArgb(77, 255, 255, 255);
- private static readonly Brush CHECKBOX_OFF_DISABLED_DARK_BRUSH = new SolidBrush(CHECKBOX_OFF_DISABLED_DARK);
-
- // Switch specific
- private static readonly Color SWITCH_OFF_THUMB_LIGHT = Color.FromArgb(255, 255, 255, 255);
-
- private static readonly Color SWITCH_OFF_THUMB_DARK = Color.FromArgb(255, 190, 190, 190);
- private static readonly Color SWITCH_OFF_TRACK_LIGHT = Color.FromArgb(100, 0, 0, 0);
- private static readonly Color SWITCH_OFF_TRACK_DARK = Color.FromArgb(100, 255, 255, 255);
- private static readonly Color SWITCH_OFF_DISABLED_THUMB_LIGHT = Color.FromArgb(255, 230, 230, 230);
- private static readonly Color SWITCH_OFF_DISABLED_THUMB_DARK = Color.FromArgb(255, 150, 150, 150);
-
- // Generic back colors - for user controls
- private static readonly Color BACKGROUND_LIGHT = Color.FromArgb(255, 255, 255, 255);
-
- private static readonly Brush BACKGROUND_LIGHT_BRUSH = new SolidBrush(BACKGROUND_LIGHT);
- private static readonly Color BACKGROUND_DARK = Color.FromArgb(255, 80, 80, 80);
- private static readonly Brush BACKGROUND_DARK_BRUSH = new SolidBrush(BACKGROUND_DARK);
- private static readonly Color BACKGROUND_ALTERNATIVE_LIGHT = Color.FromArgb(10, 0, 0, 0);
- private static readonly Brush BACKGROUND_ALTERNATIVE_LIGHT_BRUSH = new SolidBrush(BACKGROUND_ALTERNATIVE_LIGHT);
- private static readonly Color BACKGROUND_ALTERNATIVE_DARK = Color.FromArgb(10, 255, 255, 255);
- private static readonly Brush BACKGROUND_ALTERNATIVE_DARK_BRUSH = new SolidBrush(BACKGROUND_ALTERNATIVE_DARK);
- private static readonly Color BACKGROUND_HOVER_LIGHT = Color.FromArgb(20, 0, 0, 0);
- private static readonly Brush BACKGROUND_HOVER_LIGHT_BRUSH = new SolidBrush(BACKGROUND_HOVER_LIGHT);
- private static readonly Color BACKGROUND_HOVER_DARK = Color.FromArgb(20, 255, 255, 255);
- private static readonly Brush BACKGROUND_HOVER_DARK_BRUSH = new SolidBrush(BACKGROUND_HOVER_DARK);
- private static readonly Color BACKGROUND_FOCUS_LIGHT = Color.FromArgb(30, 0, 0, 0);
- private static readonly Brush BACKGROUND_FOCUS_LIGHT_BRUSH = new SolidBrush(BACKGROUND_FOCUS_LIGHT);
- private static readonly Color BACKGROUND_FOCUS_DARK = Color.FromArgb(30, 255, 255, 255);
- private static readonly Brush BACKGROUND_FOCUS_DARK_BRUSH = new SolidBrush(BACKGROUND_FOCUS_DARK);
- private static readonly Color BACKGROUND_DISABLED_LIGHT = Color.FromArgb(25, 0, 0, 0);
- private static readonly Brush BACKGROUND_DISABLED_LIGHT_BRUSH = new SolidBrush(BACKGROUND_DISABLED_LIGHT);
- private static readonly Color BACKGROUND_DISABLED_DARK = Color.FromArgb(25, 255, 255, 255);
- private static readonly Brush BACKGROUND_DISABLED_DARK_BRUSH = new SolidBrush(BACKGROUND_DISABLED_DARK);
-
- // Backdrop colors - for containers, like forms or panels
- private static readonly Color BACKDROP_LIGHT = Color.FromArgb(255, 242, 242, 242);
-
- private static readonly Brush BACKDROP_LIGHT_BRUSH = new SolidBrush(BACKGROUND_LIGHT);
- private static readonly Color BACKDROP_DARK = Color.FromArgb(255, 50, 50, 50);
- private static readonly Brush BACKDROP_DARK_BRUSH = new SolidBrush(BACKGROUND_DARK);
// Getters - Using these makes handling the dark theme switching easier
// Text
- public Color TextHighEmphasisColor => Theme == Themes.LIGHT ? TEXT_HIGH_EMPHASIS_DARK : TEXT_HIGH_EMPHASIS_LIGHT;
+ public Color TextHighEmphasisColor => Theme.TextHighEmphasisColor;
- public Brush TextHighEmphasisBrush => Theme == Themes.LIGHT ? TEXT_HIGH_EMPHASIS_DARK_BRUSH : TEXT_HIGH_EMPHASIS_LIGHT_BRUSH;
- public Color TextMediumEmphasisColor => Theme == Themes.LIGHT ? TEXT_MEDIUM_EMPHASIS_DARK : TEXT_MEDIUM_EMPHASIS_LIGHT;
- public Brush TextMediumEmphasisBrush => Theme == Themes.LIGHT ? TEXT_MEDIUM_EMPHASIS_DARK_BRUSH : TEXT_MEDIUM_EMPHASIS_LIGHT_BRUSH;
- public Color TextDisabledOrHintColor => Theme == Themes.LIGHT ? TEXT_DISABLED_OR_HINT_DARK : TEXT_DISABLED_OR_HINT_LIGHT;
- public Brush TextDisabledOrHintBrush => Theme == Themes.LIGHT ? TEXT_DISABLED_OR_HINT_DARK_BRUSH : TEXT_DISABLED_OR_HINT_LIGHT_BRUSH;
+ public Brush TextHighEmphasisBrush => Theme.TextHighEmphasisBrush;
+ public Color TextMediumEmphasisColor => Theme.TextMediumEmphasisColor;
+ public Brush TextMediumEmphasisBrush => Theme.TextMediumEmphasisBrush;
+ public Color TextDisabledOrHintColor => Theme.TextDisabledOrHintColor;
+ public Brush TextDisabledOrHintBrush => Theme.TextDisabledOrHintBrush;
// Divider
- public Color DividersColor => Theme == Themes.LIGHT ? DIVIDERS_DARK : DIVIDERS_LIGHT;
+ public Color DividersColor => Theme.DividersColor;
- public Brush DividersBrush => Theme == Themes.LIGHT ? DIVIDERS_DARK_BRUSH : DIVIDERS_LIGHT_BRUSH;
- public Color DividersAlternativeColor => Theme == Themes.LIGHT ? DIVIDERS_ALTERNATIVE_DARK : DIVIDERS_ALTERNATIVE_LIGHT;
- public Brush DividersAlternativeBrush => Theme == Themes.LIGHT ? DIVIDERS_ALTERNATIVE_DARK_BRUSH : DIVIDERS_ALTERNATIVE_LIGHT_BRUSH;
+ public Brush DividersBrush => Theme.DividersBrush;
+ public Color DividersAlternativeColor => Theme.DividersAlternativeColor;
+ public Brush DividersAlternativeBrush => Theme.DividersAlternativeBrush;
// Checkbox / Radio / Switch
- public Color CheckboxOffColor => Theme == Themes.LIGHT ? CHECKBOX_OFF_LIGHT : CHECKBOX_OFF_DARK;
+ public Color CheckboxOffColor => Theme.CheckboxOffColor;
- public Brush CheckboxOffBrush => Theme == Themes.LIGHT ? CHECKBOX_OFF_LIGHT_BRUSH : CHECKBOX_OFF_DARK_BRUSH;
- public Color CheckBoxOffDisabledColor => Theme == Themes.LIGHT ? CHECKBOX_OFF_DISABLED_LIGHT : CHECKBOX_OFF_DISABLED_DARK;
- public Brush CheckBoxOffDisabledBrush => Theme == Themes.LIGHT ? CHECKBOX_OFF_DISABLED_LIGHT_BRUSH : CHECKBOX_OFF_DISABLED_DARK_BRUSH;
+ public Brush CheckboxOffBrush => Theme.CheckboxOffBrush;
+ public Color CheckBoxOffDisabledColor => Theme.CheckBoxOffDisabledColor;
+ public Brush CheckBoxOffDisabledBrush => Theme.CheckBoxOffDisabledBrush;
// Switch
- public Color SwitchOffColor => Theme == Themes.LIGHT ? CHECKBOX_OFF_DARK : CHECKBOX_OFF_LIGHT;
+ public Color SwitchOffColor => Theme.SwitchOffColor;
- public Color SwitchOffThumbColor => Theme == Themes.LIGHT ? SWITCH_OFF_THUMB_LIGHT : SWITCH_OFF_THUMB_DARK;
- public Color SwitchOffTrackColor => Theme == Themes.LIGHT ? SWITCH_OFF_TRACK_LIGHT : SWITCH_OFF_TRACK_DARK;
- public Color SwitchOffDisabledThumbColor => Theme == Themes.LIGHT ? SWITCH_OFF_DISABLED_THUMB_LIGHT : SWITCH_OFF_DISABLED_THUMB_DARK;
+ public Color SwitchOffThumbColor => Theme.SwitchOffThumbColor;
+ public Color SwitchOffTrackColor => Theme.SwitchOffTrackColor;
+ public Color SwitchOffDisabledThumbColor => Theme.SwitchOffDisabledThumbColor;
// Control Back colors
- public Color BackgroundColor => Theme == Themes.LIGHT ? BACKGROUND_LIGHT : BACKGROUND_DARK;
+ public Color BackgroundColor => Theme.BackgroundColor;
- public Brush BackgroundBrush => Theme == Themes.LIGHT ? BACKGROUND_LIGHT_BRUSH : BACKGROUND_DARK_BRUSH;
- public Color BackgroundAlternativeColor => Theme == Themes.LIGHT ? BACKGROUND_ALTERNATIVE_LIGHT : BACKGROUND_ALTERNATIVE_DARK;
- public Brush BackgroundAlternativeBrush => Theme == Themes.LIGHT ? BACKGROUND_ALTERNATIVE_LIGHT_BRUSH : BACKGROUND_ALTERNATIVE_DARK_BRUSH;
- public Color BackgroundDisabledColor => Theme == Themes.LIGHT ? BACKGROUND_DISABLED_LIGHT : BACKGROUND_DISABLED_DARK;
- public Brush BackgroundDisabledBrush => Theme == Themes.LIGHT ? BACKGROUND_DISABLED_LIGHT_BRUSH : BACKGROUND_DISABLED_DARK_BRUSH;
- public Color BackgroundHoverColor => Theme == Themes.LIGHT ? BACKGROUND_HOVER_LIGHT : BACKGROUND_HOVER_DARK;
- public Brush BackgroundHoverBrush => Theme == Themes.LIGHT ? BACKGROUND_HOVER_LIGHT_BRUSH : BACKGROUND_HOVER_DARK_BRUSH;
- public Color BackgroundFocusColor => Theme == Themes.LIGHT ? BACKGROUND_FOCUS_LIGHT : BACKGROUND_FOCUS_DARK;
- public Brush BackgroundFocusBrush => Theme == Themes.LIGHT ? BACKGROUND_FOCUS_LIGHT_BRUSH : BACKGROUND_FOCUS_DARK_BRUSH;
+ public Brush BackgroundBrush => Theme.BackgroundBrush;
+ public Color BackgroundAlternativeColor => Theme.BackgroundAlternativeColor;
+ public Brush BackgroundAlternativeBrush => Theme.BackgroundAlternativeBrush;
+ public Color BackgroundDisabledColor => Theme.BackgroundDisabledColor;
+ public Brush BackgroundDisabledBrush => Theme.BackgroundDisabledBrush;
+ public Color BackgroundHoverColor => Theme.BackgroundHoverColor;
+ public Brush BackgroundHoverBrush => Theme.BackgroundHoverBrush;
+ public Color BackgroundFocusColor => Theme.BackgroundFocusColor;
+ public Brush BackgroundFocusBrush => Theme.BackgroundFocusBrush;
// Backdrop color
- public Color BackdropColor => Theme == Themes.LIGHT ? BACKDROP_LIGHT : BACKDROP_DARK;
+ public Color BackdropColor => Theme.BackdropColor;
- public Brush BackdropBrush => Theme == Themes.LIGHT ? BACKDROP_LIGHT_BRUSH : BACKDROP_DARK_BRUSH;
+ public Brush BackdropBrush => Theme.BackdropBrush;
// Font Handling
public enum fontType
diff --git a/MaterialSkin/Themes/Theme.cs b/MaterialSkin/Themes/Theme.cs
new file mode 100644
index 00000000..509732e8
--- /dev/null
+++ b/MaterialSkin/Themes/Theme.cs
@@ -0,0 +1,56 @@
+using System.Drawing;
+
+namespace MaterialSkin.Themes {
+
+ public class Theme {
+
+ // Text
+ public Color TextHighEmphasisColor { get; set; }
+
+ public Brush TextHighEmphasisBrush { get; set; }
+ public Color TextMediumEmphasisColor { get; set; }
+ public Brush TextMediumEmphasisBrush { get; set; }
+ public Color TextDisabledOrHintColor { get; set; }
+ public Brush TextDisabledOrHintBrush { get; set; }
+
+ // Divider
+ public Color DividersColor { get; set; }
+
+ public Brush DividersBrush { get; set; }
+ public Color DividersAlternativeColor { get; set; }
+ public Brush DividersAlternativeBrush { get; set; }
+
+ // Checkbox / Radio / Switch
+ public Color CheckboxOffColor { get; set; }
+
+ public Brush CheckboxOffBrush { get; set; }
+ public Color CheckBoxOffDisabledColor { get; set; }
+ public Brush CheckBoxOffDisabledBrush { get; set; }
+
+ // Switch
+ public Color SwitchOffColor { get; set; }
+
+ public Color SwitchOffThumbColor { get; set; }
+ public Color SwitchOffTrackColor { get; set; }
+ public Color SwitchOffDisabledThumbColor { get; set; }
+
+ // Control Back colors
+ public Color BackgroundColor { get; set; }
+
+ public Brush BackgroundBrush { get; set; }
+ public Color BackgroundAlternativeColor { get; set; }
+ public Brush BackgroundAlternativeBrush { get; set; }
+ public Color BackgroundDisabledColor { get; set; }
+ public Brush BackgroundDisabledBrush { get; set; }
+ public Color BackgroundHoverColor { get; set; }
+ public Brush BackgroundHoverBrush { get; set; }
+ public Color BackgroundFocusColor { get; set; }
+ public Brush BackgroundFocusBrush { get; set; }
+
+ // Backdrop color
+ public Color BackdropColor { get; set; }
+
+ public Brush BackdropBrush { get; set; }
+
+ }
+}
diff --git a/MaterialSkin/Themes/ThemeDark.cs b/MaterialSkin/Themes/ThemeDark.cs
new file mode 100644
index 00000000..1b786497
--- /dev/null
+++ b/MaterialSkin/Themes/ThemeDark.cs
@@ -0,0 +1,107 @@
+using System.Drawing;
+
+namespace MaterialSkin.Themes {
+
+ public class ThemeDark : Theme {
+
+ public ThemeDark() {
+
+ // Text
+ TextHighEmphasisColor = TEXT_HIGH_EMPHASIS_LIGHT;
+
+ TextHighEmphasisBrush = TEXT_HIGH_EMPHASIS_LIGHT_BRUSH;
+ TextMediumEmphasisColor = TEXT_MEDIUM_EMPHASIS_LIGHT;
+ TextMediumEmphasisBrush = TEXT_MEDIUM_EMPHASIS_LIGHT_BRUSH;
+ TextDisabledOrHintColor = TEXT_DISABLED_OR_HINT_LIGHT;
+ TextDisabledOrHintBrush = TEXT_DISABLED_OR_HINT_LIGHT_BRUSH;
+
+ // Divider
+ DividersColor = DIVIDERS_LIGHT;
+
+ DividersBrush = DIVIDERS_LIGHT_BRUSH;
+ DividersAlternativeColor = DIVIDERS_ALTERNATIVE_LIGHT;
+ DividersAlternativeBrush = DIVIDERS_ALTERNATIVE_LIGHT_BRUSH;
+
+ // Checkbox / Radio / Switch
+ CheckboxOffColor = CHECKBOX_OFF_DARK;
+
+ CheckboxOffBrush = CHECKBOX_OFF_DARK_BRUSH;
+ CheckBoxOffDisabledColor = CHECKBOX_OFF_DISABLED_DARK;
+ CheckBoxOffDisabledBrush = CHECKBOX_OFF_DISABLED_DARK_BRUSH;
+
+ // Switch
+ SwitchOffColor = CHECKBOX_OFF_LIGHT;
+
+ SwitchOffThumbColor = SWITCH_OFF_THUMB_DARK;
+ SwitchOffTrackColor = SWITCH_OFF_TRACK_DARK;
+ SwitchOffDisabledThumbColor = SWITCH_OFF_DISABLED_THUMB_DARK;
+
+ // Control Back colors
+ BackgroundColor = BACKGROUND_DARK;
+
+ BackgroundBrush = BACKGROUND_DARK_BRUSH;
+ BackgroundAlternativeColor = BACKGROUND_ALTERNATIVE_DARK;
+ BackgroundAlternativeBrush = BACKGROUND_ALTERNATIVE_DARK_BRUSH;
+ BackgroundDisabledColor = BACKGROUND_DISABLED_DARK;
+ BackgroundDisabledBrush = BACKGROUND_DISABLED_DARK_BRUSH;
+ BackgroundHoverColor = BACKGROUND_HOVER_DARK;
+ BackgroundHoverBrush = BACKGROUND_HOVER_DARK_BRUSH;
+ BackgroundFocusColor = BACKGROUND_FOCUS_DARK;
+ BackgroundFocusBrush = BACKGROUND_FOCUS_DARK_BRUSH;
+
+ // Backdrop color
+ BackdropColor = BACKDROP_DARK;
+
+ BackdropBrush = BACKDROP_DARK_BRUSH;
+ }
+
+
+ // Text
+ private static readonly Color TEXT_HIGH_EMPHASIS_LIGHT = Color.FromArgb(222, 255, 255, 255); // Alpha 87%
+
+ private static readonly Brush TEXT_HIGH_EMPHASIS_LIGHT_BRUSH = new SolidBrush(TEXT_HIGH_EMPHASIS_LIGHT);
+
+ private static readonly Color TEXT_MEDIUM_EMPHASIS_LIGHT = Color.FromArgb(153, 255, 255, 255); // Alpha 60%
+ private static readonly Brush TEXT_MEDIUM_EMPHASIS_LIGHT_BRUSH = new SolidBrush(TEXT_MEDIUM_EMPHASIS_LIGHT);
+
+ private static readonly Color TEXT_DISABLED_OR_HINT_LIGHT = Color.FromArgb(97, 255, 255, 255); // Alpha 38%
+ private static readonly Brush TEXT_DISABLED_OR_HINT_LIGHT_BRUSH = new SolidBrush(TEXT_DISABLED_OR_HINT_LIGHT);
+
+ // Dividers and thin lines
+ private static readonly Color DIVIDERS_LIGHT = Color.FromArgb(30, 255, 255, 255); // Alpha 30%
+
+ private static readonly Brush DIVIDERS_LIGHT_BRUSH = new SolidBrush(DIVIDERS_LIGHT);
+ private static readonly Color DIVIDERS_ALTERNATIVE_LIGHT = Color.FromArgb(153, 255, 255, 255); // Alpha 60%
+ private static readonly Brush DIVIDERS_ALTERNATIVE_LIGHT_BRUSH = new SolidBrush(DIVIDERS_ALTERNATIVE_LIGHT);
+
+ // Checkbox / Radio / Switches
+ private static readonly Color CHECKBOX_OFF_LIGHT = Color.FromArgb(138, 0, 0, 0);
+
+ private static readonly Color CHECKBOX_OFF_DARK = Color.FromArgb(179, 255, 255, 255);
+ private static readonly Brush CHECKBOX_OFF_DARK_BRUSH = new SolidBrush(CHECKBOX_OFF_DARK);
+ private static readonly Color CHECKBOX_OFF_DISABLED_DARK = Color.FromArgb(77, 255, 255, 255);
+ private static readonly Brush CHECKBOX_OFF_DISABLED_DARK_BRUSH = new SolidBrush(CHECKBOX_OFF_DISABLED_DARK);
+
+ // Switch specific
+ private static readonly Color SWITCH_OFF_THUMB_DARK = Color.FromArgb(255, 190, 190, 190);
+ private static readonly Color SWITCH_OFF_TRACK_DARK = Color.FromArgb(100, 255, 255, 255);
+ private static readonly Color SWITCH_OFF_DISABLED_THUMB_DARK = Color.FromArgb(255, 150, 150, 150);
+
+ // Generic back colors - for user controls
+ private static readonly Color BACKGROUND_DARK = Color.FromArgb(255, 80, 80, 80);
+ private static readonly Brush BACKGROUND_DARK_BRUSH = new SolidBrush(BACKGROUND_DARK);
+ private static readonly Color BACKGROUND_ALTERNATIVE_DARK = Color.FromArgb(10, 255, 255, 255);
+ private static readonly Brush BACKGROUND_ALTERNATIVE_DARK_BRUSH = new SolidBrush(BACKGROUND_ALTERNATIVE_DARK);
+ private static readonly Color BACKGROUND_HOVER_DARK = Color.FromArgb(20, 255, 255, 255);
+ private static readonly Brush BACKGROUND_HOVER_DARK_BRUSH = new SolidBrush(BACKGROUND_HOVER_DARK);
+ private static readonly Color BACKGROUND_FOCUS_DARK = Color.FromArgb(30, 255, 255, 255);
+ private static readonly Brush BACKGROUND_FOCUS_DARK_BRUSH = new SolidBrush(BACKGROUND_FOCUS_DARK);
+ private static readonly Color BACKGROUND_DISABLED_DARK = Color.FromArgb(25, 255, 255, 255);
+ private static readonly Brush BACKGROUND_DISABLED_DARK_BRUSH = new SolidBrush(BACKGROUND_DISABLED_DARK);
+
+ // Backdrop colors - for containers, like forms or panels
+ private static readonly Color BACKDROP_DARK = Color.FromArgb(255, 50, 50, 50);
+ private static readonly Brush BACKDROP_DARK_BRUSH = new SolidBrush(BACKGROUND_DARK);
+
+ }
+}
\ No newline at end of file
diff --git a/MaterialSkin/Themes/ThemeLight.cs b/MaterialSkin/Themes/ThemeLight.cs
new file mode 100644
index 00000000..cf7b7904
--- /dev/null
+++ b/MaterialSkin/Themes/ThemeLight.cs
@@ -0,0 +1,108 @@
+using System.Drawing;
+
+namespace MaterialSkin.Themes {
+
+ public class ThemeLight : Theme {
+
+ public ThemeLight() {
+
+ // Text
+ TextHighEmphasisColor = TEXT_HIGH_EMPHASIS_DARK;
+
+ TextHighEmphasisBrush = TEXT_HIGH_EMPHASIS_DARK_BRUSH;
+ TextMediumEmphasisColor = TEXT_MEDIUM_EMPHASIS_DARK;
+ TextMediumEmphasisBrush = TEXT_MEDIUM_EMPHASIS_DARK_BRUSH;
+ TextDisabledOrHintColor = TEXT_DISABLED_OR_HINT_DARK;
+ TextDisabledOrHintBrush = TEXT_DISABLED_OR_HINT_DARK_BRUSH;
+
+ // Divider
+ DividersColor = DIVIDERS_DARK;
+
+ DividersBrush = DIVIDERS_DARK_BRUSH;
+ DividersAlternativeColor = DIVIDERS_ALTERNATIVE_DARK;
+ DividersAlternativeBrush = DIVIDERS_ALTERNATIVE_DARK_BRUSH;
+
+ // Checkbox / Radio / Switch
+ CheckboxOffColor = CHECKBOX_OFF_LIGHT;
+
+ CheckboxOffBrush = CHECKBOX_OFF_LIGHT_BRUSH;
+ CheckBoxOffDisabledColor = CHECKBOX_OFF_DISABLED_LIGHT;
+ CheckBoxOffDisabledBrush = CHECKBOX_OFF_DISABLED_LIGHT_BRUSH;
+
+ // Switch
+ SwitchOffColor = CHECKBOX_OFF_DARK;
+
+ SwitchOffThumbColor = SWITCH_OFF_THUMB_LIGHT;
+ SwitchOffTrackColor = SWITCH_OFF_TRACK_LIGHT;
+ SwitchOffDisabledThumbColor = SWITCH_OFF_DISABLED_THUMB_LIGHT;
+
+ // Control Back colors
+ BackgroundColor = BACKGROUND_LIGHT;
+
+ BackgroundBrush = BACKGROUND_LIGHT_BRUSH;
+ BackgroundAlternativeColor = BACKGROUND_ALTERNATIVE_LIGHT;
+ BackgroundAlternativeBrush = BACKGROUND_ALTERNATIVE_LIGHT_BRUSH;
+ BackgroundDisabledColor = BACKGROUND_DISABLED_LIGHT;
+ BackgroundDisabledBrush = BACKGROUND_DISABLED_LIGHT_BRUSH;
+ BackgroundHoverColor = BACKGROUND_HOVER_LIGHT;
+ BackgroundHoverBrush = BACKGROUND_HOVER_LIGHT_BRUSH;
+ BackgroundFocusColor = BACKGROUND_FOCUS_LIGHT;
+ BackgroundFocusBrush = BACKGROUND_FOCUS_LIGHT_BRUSH;
+
+ // Backdrop color
+ BackdropColor = BACKDROP_LIGHT;
+
+ BackdropBrush = BACKDROP_LIGHT_BRUSH;
+ }
+
+
+ // Text
+ private static readonly Color TEXT_HIGH_EMPHASIS_DARK = Color.FromArgb(222, 0, 0, 0); // Alpha 87%
+ private static readonly Brush TEXT_HIGH_EMPHASIS_DARK_BRUSH = new SolidBrush(TEXT_HIGH_EMPHASIS_DARK);
+
+ private static readonly Color TEXT_MEDIUM_EMPHASIS_DARK = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
+ private static readonly Brush TEXT_MEDIUM_EMPHASIS_DARK_BRUSH = new SolidBrush(TEXT_MEDIUM_EMPHASIS_DARK);
+
+ private static readonly Color TEXT_DISABLED_OR_HINT_DARK = Color.FromArgb(97, 0, 0, 0); // Alpha 38%
+ private static readonly Brush TEXT_DISABLED_OR_HINT_DARK_BRUSH = new SolidBrush(TEXT_DISABLED_OR_HINT_DARK);
+
+ // Dividers and thin lines
+ private static readonly Color DIVIDERS_DARK = Color.FromArgb(30, 0, 0, 0); // Alpha 30%
+ private static readonly Brush DIVIDERS_DARK_BRUSH = new SolidBrush(DIVIDERS_DARK);
+ private static readonly Color DIVIDERS_ALTERNATIVE_DARK = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
+ private static readonly Brush DIVIDERS_ALTERNATIVE_DARK_BRUSH = new SolidBrush(DIVIDERS_ALTERNATIVE_DARK);
+
+ // Checkbox / Radio / Switches
+ private static readonly Color CHECKBOX_OFF_LIGHT = Color.FromArgb(138, 0, 0, 0);
+
+ private static readonly Brush CHECKBOX_OFF_LIGHT_BRUSH = new SolidBrush(CHECKBOX_OFF_LIGHT);
+ private static readonly Color CHECKBOX_OFF_DARK = Color.FromArgb(179, 255, 255, 255);
+ private static readonly Color CHECKBOX_OFF_DISABLED_LIGHT = Color.FromArgb(66, 0, 0, 0);
+ private static readonly Brush CHECKBOX_OFF_DISABLED_LIGHT_BRUSH = new SolidBrush(CHECKBOX_OFF_DISABLED_LIGHT);
+
+ // Switch specific
+ private static readonly Color SWITCH_OFF_THUMB_LIGHT = Color.FromArgb(255, 255, 255, 255);
+
+ private static readonly Color SWITCH_OFF_TRACK_LIGHT = Color.FromArgb(100, 0, 0, 0);
+ private static readonly Color SWITCH_OFF_DISABLED_THUMB_LIGHT = Color.FromArgb(255, 230, 230, 230);
+
+ // Generic back colors - for user controls
+ private static readonly Color BACKGROUND_LIGHT = Color.FromArgb(255, 255, 255, 255);
+
+ private static readonly Brush BACKGROUND_LIGHT_BRUSH = new SolidBrush(BACKGROUND_LIGHT);
+ private static readonly Color BACKGROUND_ALTERNATIVE_LIGHT = Color.FromArgb(10, 0, 0, 0);
+ private static readonly Brush BACKGROUND_ALTERNATIVE_LIGHT_BRUSH = new SolidBrush(BACKGROUND_ALTERNATIVE_LIGHT);
+ private static readonly Color BACKGROUND_HOVER_LIGHT = Color.FromArgb(20, 0, 0, 0);
+ private static readonly Brush BACKGROUND_HOVER_LIGHT_BRUSH = new SolidBrush(BACKGROUND_HOVER_LIGHT);
+ private static readonly Color BACKGROUND_FOCUS_LIGHT = Color.FromArgb(30, 0, 0, 0);
+ private static readonly Brush BACKGROUND_FOCUS_LIGHT_BRUSH = new SolidBrush(BACKGROUND_FOCUS_LIGHT);
+ private static readonly Color BACKGROUND_DISABLED_LIGHT = Color.FromArgb(25, 0, 0, 0);
+ private static readonly Brush BACKGROUND_DISABLED_LIGHT_BRUSH = new SolidBrush(BACKGROUND_DISABLED_LIGHT);
+
+ // Backdrop colors - for containers, like forms or panels
+ private static readonly Color BACKDROP_LIGHT = Color.FromArgb(255, 242, 242, 242);
+
+ private static readonly Brush BACKDROP_LIGHT_BRUSH = new SolidBrush(BACKGROUND_LIGHT);
+
+ }
+}
From e56aa01b3f6adbee6c9f9172746b3d8ee8b364fe Mon Sep 17 00:00:00 2001
From: Lukasz Nojek <9399633+lukaszmn@users.noreply.github.com>
Date: Sun, 15 Mar 2020 01:12:31 +0100
Subject: [PATCH 2/5] Theme - refactor
---
MaterialSkin/Themes/Theme.cs | 126 +++++++++++++++++++++++++++---
MaterialSkin/Themes/ThemeDark.cs | 105 +++++--------------------
MaterialSkin/Themes/ThemeLight.cs | 100 +++++-------------------
3 files changed, 155 insertions(+), 176 deletions(-)
diff --git a/MaterialSkin/Themes/Theme.cs b/MaterialSkin/Themes/Theme.cs
index 509732e8..65e43572 100644
--- a/MaterialSkin/Themes/Theme.cs
+++ b/MaterialSkin/Themes/Theme.cs
@@ -5,29 +5,83 @@ namespace MaterialSkin.Themes {
public class Theme {
// Text
- public Color TextHighEmphasisColor { get; set; }
+ private Color textHighEmphasisColor;
+ public Color TextHighEmphasisColor {
+ get => textHighEmphasisColor;
+ set {
+ textHighEmphasisColor = value;
+ TextHighEmphasisBrush = new SolidBrush(value);
+ }
+ }
public Brush TextHighEmphasisBrush { get; set; }
- public Color TextMediumEmphasisColor { get; set; }
+
+ private Color textMediumEmphasisColor;
+ public Color TextMediumEmphasisColor {
+ get => textMediumEmphasisColor;
+ set {
+ textMediumEmphasisColor = value;
+ TextMediumEmphasisBrush = new SolidBrush(value);
+ }
+ }
public Brush TextMediumEmphasisBrush { get; set; }
- public Color TextDisabledOrHintColor { get; set; }
+
+ private Color textDisabledOrHintColor;
+ public Color TextDisabledOrHintColor {
+ get => textDisabledOrHintColor;
+ set {
+ textDisabledOrHintColor = value;
+ TextDisabledOrHintBrush = new SolidBrush(value);
+ }
+ }
public Brush TextDisabledOrHintBrush { get; set; }
// Divider
- public Color DividersColor { get; set; }
+ private Color dividersColor;
+ public Color DividersColor {
+ get => dividersColor;
+ set {
+ dividersColor = value;
+ DividersBrush = new SolidBrush(value);
+ }
+ }
public Brush DividersBrush { get; set; }
- public Color DividersAlternativeColor { get; set; }
+
+ private Color dividersAlternativeColor;
+ public Color DividersAlternativeColor {
+ get => dividersAlternativeColor;
+ set {
+ dividersAlternativeColor = value;
+ DividersAlternativeBrush = new SolidBrush(value);
+ }
+ }
public Brush DividersAlternativeBrush { get; set; }
// Checkbox / Radio / Switch
- public Color CheckboxOffColor { get; set; }
+ private Color checkboxOffColor;
+ public Color CheckboxOffColor {
+ get => checkboxOffColor;
+ set {
+ checkboxOffColor = value;
+ CheckboxOffBrush = new SolidBrush(value);
+ }
+ }
public Brush CheckboxOffBrush { get; set; }
- public Color CheckBoxOffDisabledColor { get; set; }
+
+ private Color checkBoxOffDisabledColor;
+ public Color CheckBoxOffDisabledColor {
+ get => checkBoxOffDisabledColor;
+ set {
+ checkBoxOffDisabledColor = value;
+ CheckBoxOffDisabledBrush = new SolidBrush(value);
+ }
+ }
public Brush CheckBoxOffDisabledBrush { get; set; }
// Switch
+
public Color SwitchOffColor { get; set; }
public Color SwitchOffThumbColor { get; set; }
@@ -35,21 +89,67 @@ public class Theme {
public Color SwitchOffDisabledThumbColor { get; set; }
// Control Back colors
- public Color BackgroundColor { get; set; }
+ private Color backgroundColor;
+ public Color BackgroundColor {
+ get => backgroundColor;
+ set {
+ backgroundColor = value;
+ BackgroundBrush = new SolidBrush(value);
+ }
+ }
public Brush BackgroundBrush { get; set; }
- public Color BackgroundAlternativeColor { get; set; }
+
+ private Color backgroundAlternativeColor;
+ public Color BackgroundAlternativeColor {
+ get => backgroundAlternativeColor;
+ set {
+ backgroundAlternativeColor = value;
+ BackgroundAlternativeBrush = new SolidBrush(value);
+ }
+ }
public Brush BackgroundAlternativeBrush { get; set; }
- public Color BackgroundDisabledColor { get; set; }
+
+ private Color backgroundDisabledColor;
+ public Color BackgroundDisabledColor {
+ get => backgroundDisabledColor;
+ set {
+ backgroundDisabledColor = value;
+ BackgroundDisabledBrush = new SolidBrush(value);
+ }
+ }
public Brush BackgroundDisabledBrush { get; set; }
- public Color BackgroundHoverColor { get; set; }
+
+ private Color backgroundHoverColor;
+ public Color BackgroundHoverColor {
+ get => backgroundHoverColor;
+ set {
+ backgroundHoverColor = value;
+ BackgroundHoverBrush = new SolidBrush(value);
+ }
+ }
public Brush BackgroundHoverBrush { get; set; }
- public Color BackgroundFocusColor { get; set; }
+
+ private Color backgroundFocusColor;
+ public Color BackgroundFocusColor {
+ get => backgroundFocusColor;
+ set {
+ backgroundFocusColor = value;
+ BackgroundFocusBrush = new SolidBrush(value);
+ }
+ }
public Brush BackgroundFocusBrush { get; set; }
// Backdrop color
- public Color BackdropColor { get; set; }
+ private Color backdropColor;
+ public Color BackdropColor {
+ get => backdropColor;
+ set {
+ backdropColor = value;
+ BackdropBrush = new SolidBrush(value);
+ }
+ }
public Brush BackdropBrush { get; set; }
}
diff --git a/MaterialSkin/Themes/ThemeDark.cs b/MaterialSkin/Themes/ThemeDark.cs
index 1b786497..c923a347 100644
--- a/MaterialSkin/Themes/ThemeDark.cs
+++ b/MaterialSkin/Themes/ThemeDark.cs
@@ -7,101 +7,38 @@ public class ThemeDark : Theme {
public ThemeDark() {
// Text
- TextHighEmphasisColor = TEXT_HIGH_EMPHASIS_LIGHT;
+ TextHighEmphasisColor = Color.FromArgb(222, 255, 255, 255); // Alpha 87%
- TextHighEmphasisBrush = TEXT_HIGH_EMPHASIS_LIGHT_BRUSH;
- TextMediumEmphasisColor = TEXT_MEDIUM_EMPHASIS_LIGHT;
- TextMediumEmphasisBrush = TEXT_MEDIUM_EMPHASIS_LIGHT_BRUSH;
- TextDisabledOrHintColor = TEXT_DISABLED_OR_HINT_LIGHT;
- TextDisabledOrHintBrush = TEXT_DISABLED_OR_HINT_LIGHT_BRUSH;
+ TextMediumEmphasisColor = Color.FromArgb(153, 255, 255, 255); // Alpha 60%
- // Divider
- DividersColor = DIVIDERS_LIGHT;
+ TextDisabledOrHintColor = Color.FromArgb(97, 255, 255, 255); // Alpha 38%
- DividersBrush = DIVIDERS_LIGHT_BRUSH;
- DividersAlternativeColor = DIVIDERS_ALTERNATIVE_LIGHT;
- DividersAlternativeBrush = DIVIDERS_ALTERNATIVE_LIGHT_BRUSH;
+ // Divider
+ DividersColor = Color.FromArgb(30, 255, 255, 255); // Alpha 30%
+ DividersAlternativeColor = Color.FromArgb(153, 255, 255, 255); // Alpha 60%
// Checkbox / Radio / Switch
- CheckboxOffColor = CHECKBOX_OFF_DARK;
-
- CheckboxOffBrush = CHECKBOX_OFF_DARK_BRUSH;
- CheckBoxOffDisabledColor = CHECKBOX_OFF_DISABLED_DARK;
- CheckBoxOffDisabledBrush = CHECKBOX_OFF_DISABLED_DARK_BRUSH;
+ CheckboxOffColor = Color.FromArgb(179, 255, 255, 255);
+ CheckBoxOffDisabledColor = Color.FromArgb(77, 255, 255, 255);
// Switch
- SwitchOffColor = CHECKBOX_OFF_LIGHT;
+ SwitchOffColor = Color.FromArgb(138, 0, 0, 0);
- SwitchOffThumbColor = SWITCH_OFF_THUMB_DARK;
- SwitchOffTrackColor = SWITCH_OFF_TRACK_DARK;
- SwitchOffDisabledThumbColor = SWITCH_OFF_DISABLED_THUMB_DARK;
+ SwitchOffThumbColor = Color.FromArgb(255, 190, 190, 190);
+ SwitchOffTrackColor = Color.FromArgb(100, 255, 255, 255);
+ SwitchOffDisabledThumbColor = Color.FromArgb(255, 150, 150, 150);
// Control Back colors
- BackgroundColor = BACKGROUND_DARK;
-
- BackgroundBrush = BACKGROUND_DARK_BRUSH;
- BackgroundAlternativeColor = BACKGROUND_ALTERNATIVE_DARK;
- BackgroundAlternativeBrush = BACKGROUND_ALTERNATIVE_DARK_BRUSH;
- BackgroundDisabledColor = BACKGROUND_DISABLED_DARK;
- BackgroundDisabledBrush = BACKGROUND_DISABLED_DARK_BRUSH;
- BackgroundHoverColor = BACKGROUND_HOVER_DARK;
- BackgroundHoverBrush = BACKGROUND_HOVER_DARK_BRUSH;
- BackgroundFocusColor = BACKGROUND_FOCUS_DARK;
- BackgroundFocusBrush = BACKGROUND_FOCUS_DARK_BRUSH;
-
- // Backdrop color
- BackdropColor = BACKDROP_DARK;
-
- BackdropBrush = BACKDROP_DARK_BRUSH;
+ BackgroundColor = Color.FromArgb(255, 80, 80, 80);
+ BackgroundAlternativeColor = Color.FromArgb(10, 255, 255, 255);
+ BackgroundDisabledColor = Color.FromArgb(25, 255, 255, 255);
+ BackgroundHoverColor = Color.FromArgb(20, 255, 255, 255);
+ BackgroundFocusColor = Color.FromArgb(30, 255, 255, 255);
+
+ // Backdrop colors - for containers, like forms or panels
+ BackdropColor = Color.FromArgb(255, 50, 50, 50);
+ BackdropBrush = new SolidBrush(BackgroundColor); // not a bug?
}
-
- // Text
- private static readonly Color TEXT_HIGH_EMPHASIS_LIGHT = Color.FromArgb(222, 255, 255, 255); // Alpha 87%
-
- private static readonly Brush TEXT_HIGH_EMPHASIS_LIGHT_BRUSH = new SolidBrush(TEXT_HIGH_EMPHASIS_LIGHT);
-
- private static readonly Color TEXT_MEDIUM_EMPHASIS_LIGHT = Color.FromArgb(153, 255, 255, 255); // Alpha 60%
- private static readonly Brush TEXT_MEDIUM_EMPHASIS_LIGHT_BRUSH = new SolidBrush(TEXT_MEDIUM_EMPHASIS_LIGHT);
-
- private static readonly Color TEXT_DISABLED_OR_HINT_LIGHT = Color.FromArgb(97, 255, 255, 255); // Alpha 38%
- private static readonly Brush TEXT_DISABLED_OR_HINT_LIGHT_BRUSH = new SolidBrush(TEXT_DISABLED_OR_HINT_LIGHT);
-
- // Dividers and thin lines
- private static readonly Color DIVIDERS_LIGHT = Color.FromArgb(30, 255, 255, 255); // Alpha 30%
-
- private static readonly Brush DIVIDERS_LIGHT_BRUSH = new SolidBrush(DIVIDERS_LIGHT);
- private static readonly Color DIVIDERS_ALTERNATIVE_LIGHT = Color.FromArgb(153, 255, 255, 255); // Alpha 60%
- private static readonly Brush DIVIDERS_ALTERNATIVE_LIGHT_BRUSH = new SolidBrush(DIVIDERS_ALTERNATIVE_LIGHT);
-
- // Checkbox / Radio / Switches
- private static readonly Color CHECKBOX_OFF_LIGHT = Color.FromArgb(138, 0, 0, 0);
-
- private static readonly Color CHECKBOX_OFF_DARK = Color.FromArgb(179, 255, 255, 255);
- private static readonly Brush CHECKBOX_OFF_DARK_BRUSH = new SolidBrush(CHECKBOX_OFF_DARK);
- private static readonly Color CHECKBOX_OFF_DISABLED_DARK = Color.FromArgb(77, 255, 255, 255);
- private static readonly Brush CHECKBOX_OFF_DISABLED_DARK_BRUSH = new SolidBrush(CHECKBOX_OFF_DISABLED_DARK);
-
- // Switch specific
- private static readonly Color SWITCH_OFF_THUMB_DARK = Color.FromArgb(255, 190, 190, 190);
- private static readonly Color SWITCH_OFF_TRACK_DARK = Color.FromArgb(100, 255, 255, 255);
- private static readonly Color SWITCH_OFF_DISABLED_THUMB_DARK = Color.FromArgb(255, 150, 150, 150);
-
- // Generic back colors - for user controls
- private static readonly Color BACKGROUND_DARK = Color.FromArgb(255, 80, 80, 80);
- private static readonly Brush BACKGROUND_DARK_BRUSH = new SolidBrush(BACKGROUND_DARK);
- private static readonly Color BACKGROUND_ALTERNATIVE_DARK = Color.FromArgb(10, 255, 255, 255);
- private static readonly Brush BACKGROUND_ALTERNATIVE_DARK_BRUSH = new SolidBrush(BACKGROUND_ALTERNATIVE_DARK);
- private static readonly Color BACKGROUND_HOVER_DARK = Color.FromArgb(20, 255, 255, 255);
- private static readonly Brush BACKGROUND_HOVER_DARK_BRUSH = new SolidBrush(BACKGROUND_HOVER_DARK);
- private static readonly Color BACKGROUND_FOCUS_DARK = Color.FromArgb(30, 255, 255, 255);
- private static readonly Brush BACKGROUND_FOCUS_DARK_BRUSH = new SolidBrush(BACKGROUND_FOCUS_DARK);
- private static readonly Color BACKGROUND_DISABLED_DARK = Color.FromArgb(25, 255, 255, 255);
- private static readonly Brush BACKGROUND_DISABLED_DARK_BRUSH = new SolidBrush(BACKGROUND_DISABLED_DARK);
-
- // Backdrop colors - for containers, like forms or panels
- private static readonly Color BACKDROP_DARK = Color.FromArgb(255, 50, 50, 50);
- private static readonly Brush BACKDROP_DARK_BRUSH = new SolidBrush(BACKGROUND_DARK);
-
}
}
\ No newline at end of file
diff --git a/MaterialSkin/Themes/ThemeLight.cs b/MaterialSkin/Themes/ThemeLight.cs
index cf7b7904..27130b03 100644
--- a/MaterialSkin/Themes/ThemeLight.cs
+++ b/MaterialSkin/Themes/ThemeLight.cs
@@ -7,102 +7,44 @@ public class ThemeLight : Theme {
public ThemeLight() {
// Text
- TextHighEmphasisColor = TEXT_HIGH_EMPHASIS_DARK;
+ TextHighEmphasisColor = Color.FromArgb(222, 0, 0, 0); // Alpha 87%
- TextHighEmphasisBrush = TEXT_HIGH_EMPHASIS_DARK_BRUSH;
- TextMediumEmphasisColor = TEXT_MEDIUM_EMPHASIS_DARK;
- TextMediumEmphasisBrush = TEXT_MEDIUM_EMPHASIS_DARK_BRUSH;
- TextDisabledOrHintColor = TEXT_DISABLED_OR_HINT_DARK;
- TextDisabledOrHintBrush = TEXT_DISABLED_OR_HINT_DARK_BRUSH;
+ TextMediumEmphasisColor = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
+
+ TextDisabledOrHintColor = Color.FromArgb(97, 0, 0, 0); // Alpha 38%
// Divider
- DividersColor = DIVIDERS_DARK;
+ DividersColor = Color.FromArgb(30, 0, 0, 0); // Alpha 30%
- DividersBrush = DIVIDERS_DARK_BRUSH;
- DividersAlternativeColor = DIVIDERS_ALTERNATIVE_DARK;
- DividersAlternativeBrush = DIVIDERS_ALTERNATIVE_DARK_BRUSH;
+ DividersAlternativeColor = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
// Checkbox / Radio / Switch
- CheckboxOffColor = CHECKBOX_OFF_LIGHT;
+ CheckboxOffColor = Color.FromArgb(138, 0, 0, 0);
- CheckboxOffBrush = CHECKBOX_OFF_LIGHT_BRUSH;
- CheckBoxOffDisabledColor = CHECKBOX_OFF_DISABLED_LIGHT;
- CheckBoxOffDisabledBrush = CHECKBOX_OFF_DISABLED_LIGHT_BRUSH;
+ CheckBoxOffDisabledColor = Color.FromArgb(66, 0, 0, 0);
// Switch
- SwitchOffColor = CHECKBOX_OFF_DARK;
+ SwitchOffColor = Color.FromArgb(179, 255, 255, 255);
- SwitchOffThumbColor = SWITCH_OFF_THUMB_LIGHT;
- SwitchOffTrackColor = SWITCH_OFF_TRACK_LIGHT;
- SwitchOffDisabledThumbColor = SWITCH_OFF_DISABLED_THUMB_LIGHT;
+ SwitchOffThumbColor = Color.FromArgb(255, 255, 255, 255);
+ SwitchOffTrackColor = Color.FromArgb(100, 0, 0, 0);
+ SwitchOffDisabledThumbColor = Color.FromArgb(255, 230, 230, 230);
// Control Back colors
- BackgroundColor = BACKGROUND_LIGHT;
-
- BackgroundBrush = BACKGROUND_LIGHT_BRUSH;
- BackgroundAlternativeColor = BACKGROUND_ALTERNATIVE_LIGHT;
- BackgroundAlternativeBrush = BACKGROUND_ALTERNATIVE_LIGHT_BRUSH;
- BackgroundDisabledColor = BACKGROUND_DISABLED_LIGHT;
- BackgroundDisabledBrush = BACKGROUND_DISABLED_LIGHT_BRUSH;
- BackgroundHoverColor = BACKGROUND_HOVER_LIGHT;
- BackgroundHoverBrush = BACKGROUND_HOVER_LIGHT_BRUSH;
- BackgroundFocusColor = BACKGROUND_FOCUS_LIGHT;
- BackgroundFocusBrush = BACKGROUND_FOCUS_LIGHT_BRUSH;
-
- // Backdrop color
- BackdropColor = BACKDROP_LIGHT;
-
- BackdropBrush = BACKDROP_LIGHT_BRUSH;
- }
-
-
- // Text
- private static readonly Color TEXT_HIGH_EMPHASIS_DARK = Color.FromArgb(222, 0, 0, 0); // Alpha 87%
- private static readonly Brush TEXT_HIGH_EMPHASIS_DARK_BRUSH = new SolidBrush(TEXT_HIGH_EMPHASIS_DARK);
-
- private static readonly Color TEXT_MEDIUM_EMPHASIS_DARK = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
- private static readonly Brush TEXT_MEDIUM_EMPHASIS_DARK_BRUSH = new SolidBrush(TEXT_MEDIUM_EMPHASIS_DARK);
-
- private static readonly Color TEXT_DISABLED_OR_HINT_DARK = Color.FromArgb(97, 0, 0, 0); // Alpha 38%
- private static readonly Brush TEXT_DISABLED_OR_HINT_DARK_BRUSH = new SolidBrush(TEXT_DISABLED_OR_HINT_DARK);
+ BackgroundColor = Color.FromArgb(255, 255, 255, 255);
- // Dividers and thin lines
- private static readonly Color DIVIDERS_DARK = Color.FromArgb(30, 0, 0, 0); // Alpha 30%
- private static readonly Brush DIVIDERS_DARK_BRUSH = new SolidBrush(DIVIDERS_DARK);
- private static readonly Color DIVIDERS_ALTERNATIVE_DARK = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
- private static readonly Brush DIVIDERS_ALTERNATIVE_DARK_BRUSH = new SolidBrush(DIVIDERS_ALTERNATIVE_DARK);
+ BackgroundAlternativeColor = Color.FromArgb(10, 0, 0, 0);
- // Checkbox / Radio / Switches
- private static readonly Color CHECKBOX_OFF_LIGHT = Color.FromArgb(138, 0, 0, 0);
+ BackgroundDisabledColor = Color.FromArgb(25, 0, 0, 0);
- private static readonly Brush CHECKBOX_OFF_LIGHT_BRUSH = new SolidBrush(CHECKBOX_OFF_LIGHT);
- private static readonly Color CHECKBOX_OFF_DARK = Color.FromArgb(179, 255, 255, 255);
- private static readonly Color CHECKBOX_OFF_DISABLED_LIGHT = Color.FromArgb(66, 0, 0, 0);
- private static readonly Brush CHECKBOX_OFF_DISABLED_LIGHT_BRUSH = new SolidBrush(CHECKBOX_OFF_DISABLED_LIGHT);
+ BackgroundHoverColor = Color.FromArgb(20, 0, 0, 0);
- // Switch specific
- private static readonly Color SWITCH_OFF_THUMB_LIGHT = Color.FromArgb(255, 255, 255, 255);
+ BackgroundFocusColor = Color.FromArgb(30, 0, 0, 0);
- private static readonly Color SWITCH_OFF_TRACK_LIGHT = Color.FromArgb(100, 0, 0, 0);
- private static readonly Color SWITCH_OFF_DISABLED_THUMB_LIGHT = Color.FromArgb(255, 230, 230, 230);
-
- // Generic back colors - for user controls
- private static readonly Color BACKGROUND_LIGHT = Color.FromArgb(255, 255, 255, 255);
-
- private static readonly Brush BACKGROUND_LIGHT_BRUSH = new SolidBrush(BACKGROUND_LIGHT);
- private static readonly Color BACKGROUND_ALTERNATIVE_LIGHT = Color.FromArgb(10, 0, 0, 0);
- private static readonly Brush BACKGROUND_ALTERNATIVE_LIGHT_BRUSH = new SolidBrush(BACKGROUND_ALTERNATIVE_LIGHT);
- private static readonly Color BACKGROUND_HOVER_LIGHT = Color.FromArgb(20, 0, 0, 0);
- private static readonly Brush BACKGROUND_HOVER_LIGHT_BRUSH = new SolidBrush(BACKGROUND_HOVER_LIGHT);
- private static readonly Color BACKGROUND_FOCUS_LIGHT = Color.FromArgb(30, 0, 0, 0);
- private static readonly Brush BACKGROUND_FOCUS_LIGHT_BRUSH = new SolidBrush(BACKGROUND_FOCUS_LIGHT);
- private static readonly Color BACKGROUND_DISABLED_LIGHT = Color.FromArgb(25, 0, 0, 0);
- private static readonly Brush BACKGROUND_DISABLED_LIGHT_BRUSH = new SolidBrush(BACKGROUND_DISABLED_LIGHT);
-
- // Backdrop colors - for containers, like forms or panels
- private static readonly Color BACKDROP_LIGHT = Color.FromArgb(255, 242, 242, 242);
-
- private static readonly Brush BACKDROP_LIGHT_BRUSH = new SolidBrush(BACKGROUND_LIGHT);
+ // Backdrop colors - for containers, like forms or panels
+ BackdropColor = Color.FromArgb(255, 242, 242, 242);
+ BackdropBrush = new SolidBrush(BackgroundColor); // not a bug?
+ }
}
}
From bc605d522c4ced38ca610c12034a4f1049db8255 Mon Sep 17 00:00:00 2001
From: Lukasz Nojek <9399633+lukaszmn@users.noreply.github.com>
Date: Sun, 15 Mar 2020 01:34:21 +0100
Subject: [PATCH 3/5] Themes - added missing properties for other controls
---
MaterialSkin/Controls/MaterialButton.cs | 2 +-
MaterialSkin/Controls/MaterialCheckBox.cs | 4 +--
MaterialSkin/Controls/MaterialDrawer.cs | 10 +++-----
MaterialSkin/Controls/MaterialRadioButton.cs | 4 +--
MaterialSkin/Controls/MaterialSwitch.cs | 4 +--
MaterialSkin/MaterialSkinManager.cs | 2 +-
MaterialSkin/Themes/Theme.cs | 8 ++++++
MaterialSkin/Themes/ThemeDark.cs | 20 ++++++++++++---
MaterialSkin/Themes/ThemeLight.cs | 26 ++++++++++++--------
README.md | 4 +--
10 files changed, 54 insertions(+), 30 deletions(-)
diff --git a/MaterialSkin/Controls/MaterialButton.cs b/MaterialSkin/Controls/MaterialButton.cs
index bfda5089..a0b5bfcb 100644
--- a/MaterialSkin/Controls/MaterialButton.cs
+++ b/MaterialSkin/Controls/MaterialButton.cs
@@ -312,7 +312,7 @@ protected override void OnPaint(PaintEventArgs pevent)
SkinManager.ColorScheme.AccentColor.Lighten(0.5f) : // Emphasis with accent
SkinManager.ColorScheme.LightPrimaryColor) : // Emphasis
(UseAccentColor ? SkinManager.ColorScheme.AccentColor : // Normal with accent
- SkinManager.Theme == MaterialSkinManager.Themes.LIGHT ? SkinManager.ColorScheme.PrimaryColor : SkinManager.ColorScheme.LightPrimaryColor))))) // Normal
+ SkinManager.Theme.RippleColor))))) // Normal
{
var rippleSize = (int)(animationValue * Width * 2);
g.FillEllipse(rippleBrush, new Rectangle(animationSource.X - rippleSize / 2, animationSource.Y - rippleSize / 2, rippleSize, rippleSize));
diff --git a/MaterialSkin/Controls/MaterialCheckBox.cs b/MaterialSkin/Controls/MaterialCheckBox.cs
index 06e5fb18..49b0cc43 100644
--- a/MaterialSkin/Controls/MaterialCheckBox.cs
+++ b/MaterialSkin/Controls/MaterialCheckBox.cs
@@ -133,7 +133,7 @@ protected override void OnPaint(PaintEventArgs pevent)
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
+ !Checked ? SkinManager.Theme.SwitchRippleColor : brush.Color))) // no animation
{
g.FillEllipse(rippleBrush, new Rectangle(animationSource.X - rippleSize / 2, animationSource.Y - rippleSize / 2, rippleSize, rippleSize));
}
@@ -147,7 +147,7 @@ protected override void OnPaint(PaintEventArgs pevent)
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)))
+ using (SolidBrush rippleBrush = new SolidBrush(Color.FromArgb((int)((animationValue * 40)), !Checked ? SkinManager.Theme.SwitchRippleColor : brush.Color)))
{
g.FillEllipse(rippleBrush, new Rectangle(animationSource.X - rippleSize / 2, animationSource.Y - rippleSize / 2, rippleSize, rippleSize));
}
diff --git a/MaterialSkin/Controls/MaterialDrawer.cs b/MaterialSkin/Controls/MaterialDrawer.cs
index c4fcd7f2..4fa18c64 100644
--- a/MaterialSkin/Controls/MaterialDrawer.cs
+++ b/MaterialSkin/Controls/MaterialDrawer.cs
@@ -189,7 +189,7 @@ private void preProcessIcons()
return;
// Calculate lightness and color
- float l = UseColors ? SkinManager.ColorScheme.TextColor.R / 255 : SkinManager.Theme == MaterialSkinManager.Themes.LIGHT ? 0f : 1f;
+ float l = UseColors ? SkinManager.ColorScheme.TextColor.R / 255 : SkinManager.Theme.DrawerLightness;
float r = (_highlightWithAccent ? SkinManager.ColorScheme.AccentColor.R : SkinManager.ColorScheme.PrimaryColor.R) / 255f;
float g = (_highlightWithAccent ? SkinManager.ColorScheme.AccentColor.G : SkinManager.ColorScheme.PrimaryColor.G) / 255f;
float b = (_highlightWithAccent ? SkinManager.ColorScheme.AccentColor.B : SkinManager.ColorScheme.PrimaryColor.B) / 255f;
@@ -440,8 +440,7 @@ protected override void OnPaint(PaintEventArgs e)
{
var rippleBrush = new SolidBrush(Color.FromArgb((int)(70 - (clickAnimProgress * 70)),
UseColors ? SkinManager.ColorScheme.AccentColor : // Using colors
- SkinManager.Theme == MaterialSkinManager.Themes.LIGHT ? SkinManager.ColorScheme.PrimaryColor : // light theme
- SkinManager.ColorScheme.LightPrimaryColor)); // dark theme
+ SkinManager.Theme.RippleColor));
g.SetClip(_drawerItemPaths[_baseTabControl.SelectedIndex]);
g.FillEllipse(rippleBrush, new Rectangle(_animationSource.X + dx - (rSize / 2), _animationSource.Y - rSize / 2, rSize, rSize));
@@ -457,9 +456,8 @@ protected override void OnPaint(PaintEventArgs e)
// 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 == MaterialSkinManager.Themes.LIGHT ? SkinManager.ColorScheme.PrimaryColor : // default light
- SkinManager.ColorScheme.LightPrimaryColor)); // default dark
+ _backgroundWithAccent ? SkinManager.ColorScheme.AccentColor : // defaul accent
+ SkinManager.Theme.RippleColor)); // default dark
g.FillPath(bgBrush, _drawerItemPaths[currentTabIndex]);
bgBrush.Dispose();
diff --git a/MaterialSkin/Controls/MaterialRadioButton.cs b/MaterialSkin/Controls/MaterialRadioButton.cs
index 661796cd..ba29bba8 100644
--- a/MaterialSkin/Controls/MaterialRadioButton.cs
+++ b/MaterialSkin/Controls/MaterialRadioButton.cs
@@ -150,7 +150,7 @@ protected override void OnPaint(PaintEventArgs pevent)
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)))
+ !Checked ? SkinManager.Theme.SwitchRippleColor : RadioColor)))
{
g.FillEllipse(rippleBrush, new Rectangle(animationSource.X - rippleSize / 2, animationSource.Y - rippleSize / 2, rippleSize - 1, rippleSize - 1));
}
@@ -164,7 +164,7 @@ protected override void OnPaint(PaintEventArgs pevent)
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)))
+ using (SolidBrush rippleBrush = new SolidBrush(Color.FromArgb((int)((animationValue * 40)), !Checked ? SkinManager.Theme.SwitchRippleColor : RadioColor)))
{
g.FillEllipse(rippleBrush, new Rectangle(animationSource.X - rippleSize / 2, animationSource.Y - rippleSize / 2, rippleSize - 1, rippleSize - 1));
}
diff --git a/MaterialSkin/Controls/MaterialSwitch.cs b/MaterialSkin/Controls/MaterialSwitch.cs
index 28d78bdc..48f8c5e8 100644
--- a/MaterialSkin/Controls/MaterialSwitch.cs
+++ b/MaterialSkin/Controls/MaterialSwitch.cs
@@ -159,8 +159,8 @@ protected override void OnPaint(PaintEventArgs pevent)
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
+ Checked ? SkinManager.ColorScheme.AccentColor : // On color
+ SkinManager.Theme.SwitchRippleColor); // Off color
if (Ripple && _rippleAM.IsAnimating())
{
diff --git a/MaterialSkin/MaterialSkinManager.cs b/MaterialSkin/MaterialSkinManager.cs
index 778bd727..0a38b67d 100644
--- a/MaterialSkin/MaterialSkinManager.cs
+++ b/MaterialSkin/MaterialSkinManager.cs
@@ -35,7 +35,7 @@ public class MaterialSkinManager
// Constructor
private MaterialSkinManager()
{
- Theme = new ThemeLight();
+ Theme = new ThemeLight(this);
ColorScheme = new ColorScheme(Primary.Indigo500, Primary.Indigo700, Primary.Indigo100, Accent.Pink200, TextShade.WHITE);
// Create and cache Roboto fonts
diff --git a/MaterialSkin/Themes/Theme.cs b/MaterialSkin/Themes/Theme.cs
index 65e43572..074d8898 100644
--- a/MaterialSkin/Themes/Theme.cs
+++ b/MaterialSkin/Themes/Theme.cs
@@ -152,5 +152,13 @@ public Color BackdropColor {
}
public Brush BackdropBrush { get; set; }
+ // for controls
+
+ public virtual Color RippleColor { get; set; }
+
+ public Color SwitchRippleColor { get; set; }
+
+ public float DrawerLightness { get; set; }
+
}
}
diff --git a/MaterialSkin/Themes/ThemeDark.cs b/MaterialSkin/Themes/ThemeDark.cs
index c923a347..85327078 100644
--- a/MaterialSkin/Themes/ThemeDark.cs
+++ b/MaterialSkin/Themes/ThemeDark.cs
@@ -1,16 +1,18 @@
-using System.Drawing;
+using System;
+using System.Drawing;
namespace MaterialSkin.Themes {
public class ThemeDark : Theme {
- public ThemeDark() {
+ private MaterialSkinManager skinManager;
+
+ public ThemeDark(MaterialSkinManager skinManager) {
+ this.skinManager = skinManager;
// Text
TextHighEmphasisColor = Color.FromArgb(222, 255, 255, 255); // Alpha 87%
-
TextMediumEmphasisColor = Color.FromArgb(153, 255, 255, 255); // Alpha 60%
-
TextDisabledOrHintColor = Color.FromArgb(97, 255, 255, 255); // Alpha 38%
// Divider
@@ -38,6 +40,16 @@ public ThemeDark() {
// Backdrop colors - for containers, like forms or panels
BackdropColor = Color.FromArgb(255, 50, 50, 50);
BackdropBrush = new SolidBrush(BackgroundColor); // not a bug?
+
+ // for controls
+ SwitchRippleColor = Color.White;
+ DrawerLightness = 1f;
+ }
+
+
+ public override Color RippleColor {
+ get => skinManager.ColorScheme.LightPrimaryColor;
+ set => throw new InvalidOperationException();
}
}
diff --git a/MaterialSkin/Themes/ThemeLight.cs b/MaterialSkin/Themes/ThemeLight.cs
index 27130b03..89a34013 100644
--- a/MaterialSkin/Themes/ThemeLight.cs
+++ b/MaterialSkin/Themes/ThemeLight.cs
@@ -1,26 +1,26 @@
-using System.Drawing;
+using System;
+using System.Drawing;
namespace MaterialSkin.Themes {
public class ThemeLight : Theme {
- public ThemeLight() {
+ private MaterialSkinManager skinManager;
+
+ public ThemeLight(MaterialSkinManager skinManager) {
+ this.skinManager = skinManager;
// Text
TextHighEmphasisColor = Color.FromArgb(222, 0, 0, 0); // Alpha 87%
-
TextMediumEmphasisColor = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
-
TextDisabledOrHintColor = Color.FromArgb(97, 0, 0, 0); // Alpha 38%
// Divider
DividersColor = Color.FromArgb(30, 0, 0, 0); // Alpha 30%
-
DividersAlternativeColor = Color.FromArgb(153, 0, 0, 0); // Alpha 60%
// Checkbox / Radio / Switch
CheckboxOffColor = Color.FromArgb(138, 0, 0, 0);
-
CheckBoxOffDisabledColor = Color.FromArgb(66, 0, 0, 0);
// Switch
@@ -32,18 +32,24 @@ public ThemeLight() {
// Control Back colors
BackgroundColor = Color.FromArgb(255, 255, 255, 255);
-
BackgroundAlternativeColor = Color.FromArgb(10, 0, 0, 0);
-
BackgroundDisabledColor = Color.FromArgb(25, 0, 0, 0);
-
BackgroundHoverColor = Color.FromArgb(20, 0, 0, 0);
-
BackgroundFocusColor = Color.FromArgb(30, 0, 0, 0);
// Backdrop colors - for containers, like forms or panels
BackdropColor = Color.FromArgb(255, 242, 242, 242);
BackdropBrush = new SolidBrush(BackgroundColor); // not a bug?
+
+ // for controls
+ SwitchRippleColor = Color.Black;
+ DrawerLightness = 0f;
+ }
+
+
+ public override Color RippleColor {
+ get => skinManager.ColorScheme.PrimaryColor;
+ set => throw new InvalidOperationException();
}
}
diff --git a/README.md b/README.md
index 2b04b1fc..1e5a2da8 100644
--- a/README.md
+++ b/README.md
@@ -125,7 +125,7 @@ public Form1()
var materialSkinManager = MaterialSkinManager.Instance;
materialSkinManager.AddFormToManage(this);
- materialSkinManager.Theme = MaterialSkinManager.Themes.LIGHT;
+ materialSkinManager.Theme = new ThemeLight(materialSkinManager);
materialSkinManager.ColorScheme = new ColorScheme(Primary.BlueGrey800, Primary.BlueGrey900, Primary.BlueGrey500, Accent.LightBlue200, TextShade.WHITE);
}
```
@@ -140,7 +140,7 @@ Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim SkinManager As MaterialSkinManager = MaterialSkinManager.Instance
SkinManager.AddFormToManage(Me)
- SkinManager.Theme = MaterialSkinManager.Themes.LIGHT
+ SkinManager.Theme = New ThemeLight(SkinManager)
SkinManager.ColorScheme = New ColorScheme(Primary.BlueGrey800, Primary.BlueGrey900, Primary.BlueGrey500, Accent.LightBlue200, TextShade.WHITE)
End Sub
End Class
From 549dde762b34a366b7fae182acaaf2e794bda57a Mon Sep 17 00:00:00 2001
From: Lukasz Nojek <9399633+lukaszmn@users.noreply.github.com>
Date: Sun, 15 Mar 2020 01:41:15 +0100
Subject: [PATCH 4/5] Themes - added theme switcher
---
MaterialSkin/MaterialSkinManager.cs | 34 +++++++++++++++++++++++++++++
MaterialSkinExample/MainForm.cs | 17 ++++++++-------
2 files changed, 43 insertions(+), 8 deletions(-)
diff --git a/MaterialSkin/MaterialSkinManager.cs b/MaterialSkin/MaterialSkinManager.cs
index 0a38b67d..6ee2acb1 100644
--- a/MaterialSkin/MaterialSkinManager.cs
+++ b/MaterialSkin/MaterialSkinManager.cs
@@ -103,6 +103,40 @@ public Theme Theme
}
}
+ private Theme _themeLight, _themeDark;
+ private bool _enabledLight;
+
+ public bool EnabledLightTheme { get => _enabledLight; }
+
+ public void SetThemes(Theme themeLight, Theme themeDark, bool defaultLight) {
+ _themeLight = themeLight;
+ _themeDark = themeDark;
+ _enabledLight = defaultLight;
+ Theme = _enabledLight ? _themeLight : _themeDark;
+ }
+
+ public enum ThemeSelector {
+ Opposite,
+ Light,
+ Dark
+ }
+
+ public void SwitchTheme(ThemeSelector selector) {
+ switch (selector) {
+ case ThemeSelector.Light:
+ _enabledLight = true;
+ break;
+ case ThemeSelector.Dark:
+ _enabledLight = false;
+ break;
+ case ThemeSelector.Opposite:
+ _enabledLight = !_enabledLight;
+ break;
+ }
+ Theme = _enabledLight ? _themeLight : _themeDark;
+ }
+
+
private ColorScheme _colorScheme;
public ColorScheme ColorScheme
diff --git a/MaterialSkinExample/MainForm.cs b/MaterialSkinExample/MainForm.cs
index f47d18f6..af136c50 100644
--- a/MaterialSkinExample/MainForm.cs
+++ b/MaterialSkinExample/MainForm.cs
@@ -1,5 +1,6 @@
using MaterialSkin;
using MaterialSkin.Controls;
+using MaterialSkin.Themes;
using System;
using System.Text;
using System.Windows.Forms;
@@ -22,9 +23,9 @@ public MainForm()
materialSkinManager.EnforceBackcolorOnAllComponents = true;
// MaterialSkinManager properties
- materialSkinManager.AddFormToManage(this);
- materialSkinManager.Theme = MaterialSkinManager.Themes.LIGHT;
- materialSkinManager.ColorScheme = new ColorScheme(Primary.Indigo500, Primary.Indigo700, Primary.Indigo100, Accent.Pink200, TextShade.WHITE);
+ materialSkinManager.AddFormToManage(this);
+ materialSkinManager.SetThemes(new ThemeLight(materialSkinManager), new ThemeDark(materialSkinManager), true);
+ materialSkinManager.ColorScheme = new ColorScheme(Primary.Indigo500, Primary.Indigo700, Primary.Indigo100, Accent.Pink200, TextShade.WHITE);
// Add dummy data to the listview
seedListView();
@@ -60,8 +61,8 @@ private void seedListView()
}
private void materialButton1_Click(object sender, EventArgs e)
- {
- materialSkinManager.Theme = materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? MaterialSkinManager.Themes.LIGHT : MaterialSkinManager.Themes.DARK;
+ {
+ materialSkinManager.SwitchTheme(MaterialSkinManager.ThemeSelector.Opposite);
updateColor();
}
@@ -82,9 +83,9 @@ private void updateColor()
{
case 0:
materialSkinManager.ColorScheme = new ColorScheme(
- materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? Primary.Teal500 : Primary.Indigo500,
- materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? Primary.Teal700 : Primary.Indigo700,
- materialSkinManager.Theme == MaterialSkinManager.Themes.DARK ? Primary.Teal200 : Primary.Indigo100,
+ !materialSkinManager.EnabledLightTheme ? Primary.Teal500 : Primary.Indigo500,
+ !materialSkinManager.EnabledLightTheme ? Primary.Teal700 : Primary.Indigo700,
+ !materialSkinManager.EnabledLightTheme ? Primary.Teal200 : Primary.Indigo100,
Accent.Pink200,
TextShade.WHITE);
break;
From 069b8fd9184859b6830c027bafca73d01a0d2973 Mon Sep 17 00:00:00 2001
From: Lukasz Nojek <9399633+lukaszmn@users.noreply.github.com>
Date: Sun, 15 Mar 2020 01:53:40 +0100
Subject: [PATCH 5/5] Themes - refactor and update of README
---
MaterialSkin/MaterialSkinManager.cs | 15 +++++++--------
MaterialSkin/Themes/ThemeDark.cs | 2 +-
MaterialSkin/Themes/ThemeLight.cs | 2 +-
README.md | 8 +++++---
4 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/MaterialSkin/MaterialSkinManager.cs b/MaterialSkin/MaterialSkinManager.cs
index 6ee2acb1..973d0b76 100644
--- a/MaterialSkin/MaterialSkinManager.cs
+++ b/MaterialSkin/MaterialSkinManager.cs
@@ -104,15 +104,14 @@ public Theme Theme
}
private Theme _themeLight, _themeDark;
- private bool _enabledLight;
- public bool EnabledLightTheme { get => _enabledLight; }
+ public bool EnabledLightTheme { get; private set; }
public void SetThemes(Theme themeLight, Theme themeDark, bool defaultLight) {
_themeLight = themeLight;
_themeDark = themeDark;
- _enabledLight = defaultLight;
- Theme = _enabledLight ? _themeLight : _themeDark;
+ EnabledLightTheme = defaultLight;
+ Theme = EnabledLightTheme ? _themeLight : _themeDark;
}
public enum ThemeSelector {
@@ -124,16 +123,16 @@ public enum ThemeSelector {
public void SwitchTheme(ThemeSelector selector) {
switch (selector) {
case ThemeSelector.Light:
- _enabledLight = true;
+ EnabledLightTheme = true;
break;
case ThemeSelector.Dark:
- _enabledLight = false;
+ EnabledLightTheme = false;
break;
case ThemeSelector.Opposite:
- _enabledLight = !_enabledLight;
+ EnabledLightTheme = !EnabledLightTheme;
break;
}
- Theme = _enabledLight ? _themeLight : _themeDark;
+ Theme = EnabledLightTheme ? _themeLight : _themeDark;
}
diff --git a/MaterialSkin/Themes/ThemeDark.cs b/MaterialSkin/Themes/ThemeDark.cs
index 85327078..9dfe8e3e 100644
--- a/MaterialSkin/Themes/ThemeDark.cs
+++ b/MaterialSkin/Themes/ThemeDark.cs
@@ -5,7 +5,7 @@ namespace MaterialSkin.Themes {
public class ThemeDark : Theme {
- private MaterialSkinManager skinManager;
+ private readonly MaterialSkinManager skinManager;
public ThemeDark(MaterialSkinManager skinManager) {
this.skinManager = skinManager;
diff --git a/MaterialSkin/Themes/ThemeLight.cs b/MaterialSkin/Themes/ThemeLight.cs
index 89a34013..9a0b64c6 100644
--- a/MaterialSkin/Themes/ThemeLight.cs
+++ b/MaterialSkin/Themes/ThemeLight.cs
@@ -5,7 +5,7 @@ namespace MaterialSkin.Themes {
public class ThemeLight : Theme {
- private MaterialSkinManager skinManager;
+ private readonly MaterialSkinManager skinManager;
public ThemeLight(MaterialSkinManager skinManager) {
this.skinManager = skinManager;
diff --git a/README.md b/README.md
index 1e5a2da8..d206ec30 100644
--- a/README.md
+++ b/README.md
@@ -81,7 +81,7 @@ There are a few methods to add this lib:
#### The Easy way
-Search for MaterialSkin.2 on the Nuget Package manager inside VisualStudio and add it to your project.
+Search for **MaterialSkin.2** on the Nuget Package manager inside VisualStudio and add it to your project.
#### Manual way
@@ -89,11 +89,11 @@ Download the precompiled DLL available on the releases section and add it as a e
#### Compile from the latest master
-Clone the project from GitHub, then add the MaterialSkin.csproj to your own solution, then add it as a project reference on your project.
+Clone the project from GitHub, then add the `MaterialSkin.csproj` to your own solution, then add it as a project reference on your project.
### 2. Add the MaterialSkin components to your ToolBox
-Simply drag the MaterialSkin.dll file into your IDE's ToolBox and all the controls should be added there.
+Simply drag the `MaterialSkin.dll` file into your IDE's ToolBox and all the controls should be added there.
### 3. Inherit from MaterialForm
@@ -146,6 +146,8 @@ Public Class Form1
End Class
```
+For switching themes (light and dark), see the `MaterialSkinExample` project.
+
---
## Material Design in WPF