Added ShareXTheme class for preparation of customizable theme colors

This commit is contained in:
Jaex 2019-09-06 11:18:30 +03:00
parent 56c698a5ae
commit 35fa16a659
15 changed files with 177 additions and 104 deletions

View file

@ -177,8 +177,8 @@ private void UpdateImageSizeLabel()
public void UpdateTheme()
{
lblImageSize.BackColor = ShareXResources.BackgroundColor;
lblImageSize.ForeColor = ShareXResources.TextColor;
lblImageSize.BackColor = ShareXResources.Theme.BackgroundColor;
lblImageSize.ForeColor = ShareXResources.Theme.TextColor;
}
public void UpdateCheckers(bool forceUpdate = false)
@ -189,8 +189,8 @@ public void UpdateCheckers(bool forceUpdate = false)
{
if (pbMain.BackgroundImage != null) pbMain.BackgroundImage.Dispose();
pbMain.BackgroundImage = ImageHelpers.CreateCheckerPattern(ShareXResources.CheckerSize, ShareXResources.CheckerSize,
ShareXResources.CheckerColor1, ShareXResources.CheckerColor2);
pbMain.BackgroundImage = ImageHelpers.CreateCheckerPattern(ShareXResources.Theme.CheckerSize, ShareXResources.Theme.CheckerSize,
ShareXResources.Theme.CheckerColor, ShareXResources.Theme.CheckerColor2);
}
}
else

View file

@ -35,14 +35,14 @@ public ToolStripDarkRenderer() : base(new DarkColorTable())
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
e.TextColor = ShareXResources.DarkTextColor;
e.TextColor = ShareXResources.Theme.TextColor;
base.OnRenderItemText(e);
}
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
{
e.ArrowColor = ShareXResources.DarkTextColor;
e.ArrowColor = ShareXResources.Theme.TextColor;
base.OnRenderArrow(e);
}

View file

@ -730,12 +730,12 @@ public static void SupportDarkTheme(this ListView lv)
{
if (ShareXResources.UseDarkTheme)
{
using (Brush brush = new SolidBrush(ShareXResources.DarkBackgroundColor))
using (Brush brush = new SolidBrush(ShareXResources.Theme.BackgroundColor))
{
e.Graphics.FillRectangle(brush, e.Bounds);
}
TextRenderer.DrawText(e.Graphics, e.Header.Text, e.Font, e.Bounds.LocationOffset(2, 0).SizeOffset(-4, 0), ShareXResources.DarkTextColor,
TextRenderer.DrawText(e.Graphics, e.Header.Text, e.Font, e.Bounds.LocationOffset(2, 0).SizeOffset(-4, 0), ShareXResources.Theme.TextColor,
TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis);
if (e.Bounds.Right < lv.ClientRectangle.Right)

View file

@ -45,7 +45,7 @@ public ClipboardContentViewer(bool showCheckBox = false)
if (ShareXResources.ExperimentalDarkTheme)
{
lblQuestion.BackColor = ShareXResources.DarkBorderColor;
lblQuestion.BackColor = ShareXResources.Theme.BorderColor;
}
cbDontShowThisWindow.Visible = showCheckBox;

View file

@ -151,7 +151,7 @@ public MyMessageBox(string text, string caption, MessageBoxButtons buttons = Mes
if (ShareXResources.ExperimentalDarkTheme)
{
panel.BackColor = ShareXResources.DarkBorderColor;
panel.BackColor = ShareXResources.Theme.BorderColor;
}
}

View file

@ -272,6 +272,7 @@
<DependentUpon>TabToTreeView.cs</DependentUpon>
</Compile>
<Compile Include="NameParser\CodeMenuEntryFilename.cs" />
<Compile Include="ShareXTheme.cs" />
<Compile Include="TextBoxTraceListener.cs" />
<Compile Include="SafeStringEnumConverter.cs" />
<Compile Include="UITypeEditors\EnumDescriptionConverter.cs" />

View file

@ -41,7 +41,30 @@ public static string UserAgent
}
}
public static bool UseDarkTheme { get; set; }
private static bool useDarkTheme;
public static bool UseDarkTheme
{
get
{
return useDarkTheme;
}
set
{
useDarkTheme = value;
if (useDarkTheme)
{
Theme.ApplyDarkColors();
}
else
{
Theme.ApplySystemColors();
}
}
}
private static bool experimentalDarkTheme;
public static bool ExperimentalDarkTheme
{
@ -55,28 +78,13 @@ public static bool ExperimentalDarkTheme
}
}
private static bool experimentalDarkTheme;
public static bool UseWhiteIcon { get; set; }
public static Icon Icon => UseWhiteIcon ? Resources.ShareX_Icon_White : Resources.ShareX_Icon;
public static Image Logo => Resources.ShareX_Logo;
public static Image LogoBlack => Resources.ShareX_Logo_Black;
public static Color BackgroundColor => UseDarkTheme ? DarkBackgroundColor : SystemColors.Window;
public static Color TextColor => UseDarkTheme ? DarkTextColor : SystemColors.ControlText;
public static Color BorderColor => UseDarkTheme ? DarkBorderColor : ProfessionalColors.SeparatorDark;
public static Color CheckerColor1 => UseDarkTheme ? DarkCheckerColor1 : SystemColors.ControlLightLight;
public static Color CheckerColor2 => UseDarkTheme ? DarkCheckerColor2 : SystemColors.ControlLight;
public static int CheckerSize { get; } = 15;
public static Color DarkBackgroundColor { get; } = Color.FromArgb(42, 47, 56);
public static Color DarkBackgroundVariantColor { get; } = ColorHelpers.LighterColor(DarkBackgroundColor, 0.05f);
public static Color DarkTextColor { get; } = Color.FromArgb(235, 235, 235);
public static Color DarkBorderColor { get; } = Color.FromArgb(28, 32, 38);
public static Color DarkCheckerColor1 { get; } = Color.FromArgb(60, 60, 60);
public static Color DarkCheckerColor2 { get; } = Color.FromArgb(50, 50, 50);
public static Color DarkLinkColor { get; } = Color.FromArgb(166, 212, 255);
public static ShareXTheme Theme { get; set; } = new ShareXTheme();
public static void ApplyTheme(Form form, bool setIcon = true)
{
@ -116,63 +124,63 @@ private static void ApplyDarkThemeToControl(Control control)
{
case Button btn:
btn.FlatStyle = FlatStyle.Flat;
btn.FlatAppearance.BorderColor = DarkBorderColor;
btn.ForeColor = DarkTextColor;
btn.BackColor = DarkBackgroundVariantColor;
btn.FlatAppearance.BorderColor = Theme.BorderColor;
btn.ForeColor = Theme.TextColor;
btn.BackColor = Theme.BackgroundColor2;
return;
case CheckBox cb when cb.Appearance == Appearance.Button:
cb.FlatStyle = FlatStyle.Flat;
cb.FlatAppearance.BorderColor = DarkBorderColor;
cb.ForeColor = DarkTextColor;
cb.BackColor = DarkBackgroundVariantColor;
cb.FlatAppearance.BorderColor = Theme.BorderColor;
cb.ForeColor = Theme.TextColor;
cb.BackColor = Theme.BackgroundColor2;
return;
case TextBox tb:
tb.ForeColor = DarkTextColor;
tb.BackColor = DarkBackgroundVariantColor;
tb.ForeColor = Theme.TextColor;
tb.BackColor = Theme.BackgroundColor2;
tb.BorderStyle = BorderStyle.FixedSingle;
return;
case ComboBox cb:
cb.FlatStyle = FlatStyle.Flat;
cb.ForeColor = DarkTextColor;
cb.BackColor = DarkBackgroundVariantColor;
cb.ForeColor = Theme.TextColor;
cb.BackColor = Theme.BackgroundColor2;
return;
case ListBox lb:
lb.ForeColor = DarkTextColor;
lb.BackColor = DarkBackgroundVariantColor;
lb.ForeColor = Theme.TextColor;
lb.BackColor = Theme.BackgroundColor2;
return;
case ListView lv:
lv.ForeColor = DarkTextColor;
lv.BackColor = DarkBackgroundVariantColor;
lv.ForeColor = Theme.TextColor;
lv.BackColor = Theme.BackgroundColor2;
lv.SupportDarkTheme();
return;
case SplitContainer sc:
sc.Panel1.BackColor = DarkBackgroundColor;
sc.Panel2.BackColor = DarkBackgroundColor;
sc.Panel1.BackColor = Theme.BackgroundColor;
sc.Panel2.BackColor = Theme.BackgroundColor;
break;
case PropertyGrid pg:
pg.CategoryForeColor = DarkTextColor;
pg.CategorySplitterColor = DarkBackgroundColor;
pg.LineColor = DarkBackgroundColor;
pg.SelectedItemWithFocusForeColor = DarkBackgroundColor;
pg.SelectedItemWithFocusBackColor = DarkTextColor;
pg.ViewForeColor = DarkTextColor;
pg.ViewBackColor = DarkBackgroundVariantColor;
pg.ViewBorderColor = DarkBorderColor;
pg.HelpForeColor = DarkTextColor;
pg.HelpBackColor = DarkBackgroundColor;
pg.HelpBorderColor = DarkBorderColor;
pg.CategoryForeColor = Theme.TextColor;
pg.CategorySplitterColor = Theme.BackgroundColor;
pg.LineColor = Theme.BackgroundColor;
pg.SelectedItemWithFocusForeColor = Theme.BackgroundColor;
pg.SelectedItemWithFocusBackColor = Theme.TextColor;
pg.ViewForeColor = Theme.TextColor;
pg.ViewBackColor = Theme.BackgroundColor2;
pg.ViewBorderColor = Theme.BorderColor;
pg.HelpForeColor = Theme.TextColor;
pg.HelpBackColor = Theme.BackgroundColor;
pg.HelpBorderColor = Theme.BorderColor;
return;
case DataGridView dgv:
dgv.BackgroundColor = DarkBackgroundVariantColor;
dgv.GridColor = DarkBorderColor;
dgv.DefaultCellStyle.BackColor = DarkBackgroundVariantColor;
dgv.DefaultCellStyle.SelectionBackColor = DarkBackgroundVariantColor;
dgv.DefaultCellStyle.ForeColor = DarkTextColor;
dgv.DefaultCellStyle.SelectionForeColor = DarkTextColor;
dgv.ColumnHeadersDefaultCellStyle.BackColor = DarkBackgroundColor;
dgv.ColumnHeadersDefaultCellStyle.SelectionBackColor = DarkBackgroundColor;
dgv.ColumnHeadersDefaultCellStyle.ForeColor = DarkTextColor;
dgv.ColumnHeadersDefaultCellStyle.SelectionForeColor = DarkTextColor;
dgv.BackgroundColor = Theme.BackgroundColor2;
dgv.GridColor = Theme.BorderColor;
dgv.DefaultCellStyle.BackColor = Theme.BackgroundColor2;
dgv.DefaultCellStyle.SelectionBackColor = Theme.BackgroundColor2;
dgv.DefaultCellStyle.ForeColor = Theme.TextColor;
dgv.DefaultCellStyle.SelectionForeColor = Theme.TextColor;
dgv.ColumnHeadersDefaultCellStyle.BackColor = Theme.BackgroundColor;
dgv.ColumnHeadersDefaultCellStyle.SelectionBackColor = Theme.BackgroundColor;
dgv.ColumnHeadersDefaultCellStyle.ForeColor = Theme.TextColor;
dgv.ColumnHeadersDefaultCellStyle.SelectionForeColor = Theme.TextColor;
dgv.EnableHeadersVisualStyles = false;
break;
case ToolStrip ts:
@ -180,12 +188,12 @@ private static void ApplyDarkThemeToControl(Control control)
ApplyDarkThemeToToolStripItemCollection(ts.Items);
return;
case LinkLabel ll:
ll.LinkColor = DarkLinkColor;
ll.LinkColor = Theme.LinkColor;
break;
}
control.ForeColor = DarkTextColor;
control.BackColor = DarkBackgroundColor;
control.ForeColor = Theme.TextColor;
control.BackColor = Theme.BackgroundColor;
foreach (Control child in control.Controls)
{

View file

@ -0,0 +1,64 @@
#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright (c) 2007-2019 ShareX Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using System.Drawing;
using System.Windows.Forms;
namespace ShareX.HelpersLib
{
public class ShareXTheme
{
public Color BackgroundColor { get; set; }
public Color BackgroundColor2 { get; set; }
public Color TextColor { get; set; }
public Color BorderColor { get; set; }
public Color CheckerColor { get; set; }
public Color CheckerColor2 { get; set; }
public int CheckerSize { get; set; } = 15;
public Color LinkColor { get; set; }
public void ApplySystemColors()
{
BackgroundColor = SystemColors.Window;
//BackgroundColor2 =
TextColor = SystemColors.ControlText;
BorderColor = ProfessionalColors.SeparatorDark;
CheckerColor = SystemColors.ControlLightLight;
CheckerColor2 = SystemColors.ControlLight;
//LinkColor =
}
public void ApplyDarkColors()
{
BackgroundColor = Color.FromArgb(42, 47, 56);
BackgroundColor2 = ColorHelpers.LighterColor(BackgroundColor, 0.05f);
TextColor = Color.FromArgb(235, 235, 235);
BorderColor = Color.FromArgb(28, 32, 38);
CheckerColor = Color.FromArgb(60, 60, 60);
CheckerColor2 = Color.FromArgb(50, 50, 50);
LinkColor = Color.FromArgb(166, 212, 255);
}
}
}

View file

@ -59,11 +59,11 @@ public ImageHistoryForm(string historyPath, ImageHistorySettings settings, Actio
if (ShareXResources.ExperimentalDarkTheme)
{
ilvImages.BorderStyle = BorderStyle.None;
ilvImages.Colors.BackColor = ShareXResources.DarkBackgroundVariantColor;
ilvImages.Colors.BorderColor = ShareXResources.DarkBorderColor;
ilvImages.Colors.ForeColor = ShareXResources.DarkTextColor;
ilvImages.Colors.SelectedForeColor = ShareXResources.DarkTextColor;
ilvImages.Colors.UnFocusedForeColor = ShareXResources.DarkTextColor;
ilvImages.Colors.BackColor = ShareXResources.Theme.BackgroundColor2;
ilvImages.Colors.BorderColor = ShareXResources.Theme.BorderColor;
ilvImages.Colors.ForeColor = ShareXResources.Theme.TextColor;
ilvImages.Colors.SelectedForeColor = ShareXResources.Theme.TextColor;
ilvImages.Colors.UnFocusedForeColor = ShareXResources.Theme.TextColor;
}
him = new HistoryItemManager(uploadFile, editImage);

View file

@ -153,8 +153,8 @@ public RegionCaptureForm(RegionCaptureMode mode, RegionCaptureOptions options, I
if (ShareXResources.UseDarkTheme)
{
canvasBackgroundColor = ShareXResources.DarkBackgroundColor;
canvasBorderPen = new Pen(ShareXResources.DarkBorderColor);
canvasBackgroundColor = ShareXResources.Theme.BackgroundColor;
canvasBorderPen = new Pen(ShareXResources.Theme.BorderColor);
}
else
{
@ -324,8 +324,8 @@ internal void InitBackground(Image canvas, bool centerCanvas = true)
{
Rectangle sourceRect = new Rectangle(0, 0, Canvas.Width, Canvas.Height);
using (Image checkers = ImageHelpers.DrawCheckers(Canvas.Width, Canvas.Height, ShareXResources.CheckerSize,
ShareXResources.CheckerColor1, ShareXResources.CheckerColor2))
using (Image checkers = ImageHelpers.DrawCheckers(Canvas.Width, Canvas.Height, ShareXResources.Theme.CheckerSize,
ShareXResources.Theme.CheckerColor, ShareXResources.Theme.CheckerColor2))
{
g.DrawImage(checkers, sourceRect);
}

View file

@ -49,12 +49,12 @@ public void UpdateTheme()
{
if (ShareXResources.UseDarkTheme)
{
dgvNews.BackgroundColor = ShareXResources.DarkBackgroundColor;
dgvNews.DefaultCellStyle.BackColor = dgvNews.DefaultCellStyle.SelectionBackColor = ShareXResources.DarkBackgroundColor;
dgvNews.DefaultCellStyle.ForeColor = dgvNews.DefaultCellStyle.SelectionForeColor = ShareXResources.DarkTextColor;
dgvNews.BackgroundColor = ShareXResources.Theme.BackgroundColor;
dgvNews.DefaultCellStyle.BackColor = dgvNews.DefaultCellStyle.SelectionBackColor = ShareXResources.Theme.BackgroundColor;
dgvNews.DefaultCellStyle.ForeColor = dgvNews.DefaultCellStyle.SelectionForeColor = ShareXResources.Theme.TextColor;
dgvNews.AlternatingRowsDefaultCellStyle.BackColor = dgvNews.AlternatingRowsDefaultCellStyle.SelectionBackColor =
ColorHelpers.LighterColor(ShareXResources.DarkBackgroundColor, 0.02f);
dgvNews.GridColor = ShareXResources.DarkBorderColor;
ColorHelpers.LighterColor(ShareXResources.Theme.BackgroundColor, 0.02f);
dgvNews.GridColor = ShareXResources.Theme.BorderColor;
}
else
{
@ -69,7 +69,7 @@ public void UpdateTheme()
foreach (DataGridViewRow row in dgvNews.Rows)
{
row.Cells[2].Style.ForeColor = row.Cells[2].Style.SelectionForeColor =
ShareXResources.UseDarkTheme ? ShareXResources.DarkTextColor : SystemColors.ControlText;
ShareXResources.UseDarkTheme ? ShareXResources.Theme.TextColor : SystemColors.ControlText;
}
}
@ -203,7 +203,7 @@ private void dgvNews_CellMouseLeave(object sender, DataGridViewCellEventArgs e)
if (newsItem != null && !string.IsNullOrEmpty(newsItem.URL))
{
row.Cells[e.ColumnIndex].Style.ForeColor = row.Cells[e.ColumnIndex].Style.SelectionForeColor =
ShareXResources.UseDarkTheme ? ShareXResources.DarkTextColor : SystemColors.ControlText;
ShareXResources.UseDarkTheme ? ShareXResources.Theme.TextColor : SystemColors.ControlText;
}
}

View file

@ -205,11 +205,11 @@ public void UpdateTheme()
{
if (ShareXResources.UseDarkTheme)
{
lblTitle.ForeColor = ShareXResources.DarkTextColor;
lblTitle.TextShadowColor = ShareXResources.DarkBorderColor;
pThumbnail.PanelColor = ShareXResources.DarkBorderColor;
ttMain.BackColor = ShareXResources.DarkBackgroundColor;
ttMain.ForeColor = ShareXResources.DarkTextColor;
lblTitle.ForeColor = ShareXResources.Theme.TextColor;
lblTitle.TextShadowColor = ShareXResources.Theme.BorderColor;
pThumbnail.PanelColor = ShareXResources.Theme.BorderColor;
ttMain.BackColor = ShareXResources.Theme.BackgroundColor;
ttMain.ForeColor = ShareXResources.Theme.TextColor;
}
else
{

View file

@ -122,7 +122,7 @@ public void UpdateTheme()
{
if (ShareXResources.UseDarkTheme)
{
BackColor = ShareXResources.DarkBackgroundColor;
BackColor = ShareXResources.Theme.BackgroundColor;
}
else
{

View file

@ -792,19 +792,19 @@ private void UpdateTheme()
tsMain.DrawCustomBorder = false;
cmsTray.Renderer = new ToolStripDarkRenderer();
cmsTaskInfo.Renderer = new ToolStripDarkRenderer();
ttMain.BackColor = ShareXResources.DarkBackgroundColor;
ttMain.ForeColor = ShareXResources.DarkTextColor;
lvUploads.BackColor = ShareXResources.DarkBackgroundColor;
lvUploads.ForeColor = ShareXResources.DarkTextColor;
lblListViewTip.ForeColor = ShareXResources.DarkTextColor;
scMain.SplitterColor = ShareXResources.DarkBackgroundColor;
scMain.SplitterLineColor = ShareXResources.DarkBorderColor;
pThumbnailView.BackColor = ShareXResources.DarkBackgroundColor;
lblThumbnailViewTip.ForeColor = ShareXResources.DarkTextColor;
flpSocialButtons.BackColor = ShareXResources.DarkBackgroundColor;
btnCloseNews.FlatAppearance.BorderColor = ShareXResources.DarkBorderColor;
btnCloseNews.ForeColor = ShareXResources.DarkTextColor;
btnCloseNews.BackColor = ShareXResources.DarkBackgroundVariantColor;
ttMain.BackColor = ShareXResources.Theme.BackgroundColor;
ttMain.ForeColor = ShareXResources.Theme.TextColor;
lvUploads.BackColor = ShareXResources.Theme.BackgroundColor;
lvUploads.ForeColor = ShareXResources.Theme.TextColor;
lblListViewTip.ForeColor = ShareXResources.Theme.TextColor;
scMain.SplitterColor = ShareXResources.Theme.BackgroundColor;
scMain.SplitterLineColor = ShareXResources.Theme.BorderColor;
pThumbnailView.BackColor = ShareXResources.Theme.BackgroundColor;
lblThumbnailViewTip.ForeColor = ShareXResources.Theme.TextColor;
flpSocialButtons.BackColor = ShareXResources.Theme.BackgroundColor;
btnCloseNews.FlatAppearance.BorderColor = ShareXResources.Theme.BorderColor;
btnCloseNews.ForeColor = ShareXResources.Theme.TextColor;
btnCloseNews.BackColor = ShareXResources.Theme.BackgroundColor2;
}
else
{

View file

@ -75,7 +75,7 @@ public NotificationForm(int duration, int fadeDuration, ContentAlignment placeme
if (config.Image != null)
{
config.Image = ImageHelpers.ResizeImageLimit(config.Image, size);
Color backgroundColor = ShareXResources.UseDarkTheme ? ShareXResources.DarkBackgroundColor : SystemColors.Window;
Color backgroundColor = ShareXResources.UseDarkTheme ? ShareXResources.Theme.BackgroundColor : SystemColors.Window;
config.Image = ImageHelpers.FillBackground(config.Image, backgroundColor);
size = new Size(config.Image.Width + 2, config.Image.Height + 2);
}
@ -177,7 +177,7 @@ protected override void OnPaint(PaintEventArgs e)
TextRenderer.DrawText(g, ToastConfig.Text, textFont, textRect.LocationOffset(1), Color.White, TextFormatFlags.Left | TextFormatFlags.EndEllipsis);
}
Color borderColor = ShareXResources.UseDarkTheme ? ShareXResources.DarkBorderColor : SystemColors.ControlText;
Color borderColor = ShareXResources.UseDarkTheme ? ShareXResources.Theme.BorderColor : SystemColors.ControlText;
using (Pen borderPen = new Pen(borderColor))
{
g.DrawRectangleProper(borderPen, rect);