mirror of
https://github.com/colhountech/DarkUI.Net5.git
synced 2025-07-01 14:49:28 +03:00
ToolStrip & Menu renderers
Added toolstrip & menu renderers. Added extension methods for changing bitmap colours and upgraded to .NET 4.0 for easier implementation of these methods.
This commit is contained in:
parent
a0112f3e99
commit
2246e6e645
@ -9,9 +9,9 @@
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>DarkUI</RootNamespace>
|
||||
<AssemblyName>DarkUI</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
@ -43,10 +43,31 @@
|
||||
<Compile Include="Controls\DarkButton.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Extensions\BitmapExtensions.cs" />
|
||||
<Compile Include="Forms\DarkForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Icons\MenuIcons.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>MenuIcons.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Renderers\DarkMenuRenderer.cs" />
|
||||
<Compile Include="Renderers\DarkToolStripRenderer.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Icons\MenuIcons.resx">
|
||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>MenuIcons.Designer.cs</LastGenOutput>
|
||||
<CustomToolNamespace>DarkUI</CustomToolNamespace>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\grip.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\tick.png" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
|
37
DarkUI/Extensions/BitmapExtensions.cs
Normal file
37
DarkUI/Extensions/BitmapExtensions.cs
Normal file
@ -0,0 +1,37 @@
|
||||
using System.Drawing;
|
||||
|
||||
namespace DarkUI
|
||||
{
|
||||
public static class BitmapExtensions
|
||||
{
|
||||
public static Bitmap SetColor(this Bitmap bitmap, Color color)
|
||||
{
|
||||
var newBitmap = new Bitmap(bitmap.Width, bitmap.Height);
|
||||
for (int i = 0; i < bitmap.Width; i++)
|
||||
{
|
||||
for (int j = 0; j < bitmap.Height; j++)
|
||||
{
|
||||
var pixel = bitmap.GetPixel(i, j);
|
||||
if (pixel.A > 0)
|
||||
newBitmap.SetPixel(i, j, color);
|
||||
}
|
||||
}
|
||||
return newBitmap;
|
||||
}
|
||||
|
||||
public static Bitmap ChangeColor(this Bitmap bitmap, Color oldColor, Color newColor)
|
||||
{
|
||||
var newBitmap = new Bitmap(bitmap.Width, bitmap.Height);
|
||||
for (int i = 0; i < bitmap.Width; i++)
|
||||
{
|
||||
for (int j = 0; j < bitmap.Height; j++)
|
||||
{
|
||||
var pixel = bitmap.GetPixel(i, j);
|
||||
if (pixel == oldColor)
|
||||
newBitmap.SetPixel(i, j, newColor);
|
||||
}
|
||||
}
|
||||
return newBitmap;
|
||||
}
|
||||
}
|
||||
}
|
137
DarkUI/Renderers/DarkMenuRenderer.cs
Normal file
137
DarkUI/Renderers/DarkMenuRenderer.cs
Normal file
@ -0,0 +1,137 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DarkUI
|
||||
{
|
||||
public class DarkMenuRenderer : ToolStripRenderer
|
||||
{
|
||||
#region Initialisation Region
|
||||
|
||||
protected override void Initialize(ToolStrip toolStrip)
|
||||
{
|
||||
base.Initialize(toolStrip);
|
||||
|
||||
toolStrip.BackColor = Colors.GreyBackground;
|
||||
toolStrip.ForeColor = Colors.LightText;
|
||||
}
|
||||
|
||||
protected override void InitializeItem(ToolStripItem item)
|
||||
{
|
||||
base.InitializeItem(item);
|
||||
|
||||
item.ForeColor = Colors.LightText;
|
||||
|
||||
if (item.GetType() == typeof(ToolStripSeparator))
|
||||
{
|
||||
item.Margin = new Padding(0, 0, 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Render Region
|
||||
|
||||
protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
|
||||
{
|
||||
var g = e.Graphics;
|
||||
using (var b = new SolidBrush(Colors.GreyBackground))
|
||||
{
|
||||
g.FillRectangle(b, e.AffectedBounds);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnRenderImageMargin(ToolStripRenderEventArgs e)
|
||||
{
|
||||
var g = e.Graphics;
|
||||
|
||||
var rect = new Rectangle(0, 0, e.ToolStrip.Width - 1, e.ToolStrip.Height - 1);
|
||||
|
||||
using (var p = new Pen(Colors.LightBorder))
|
||||
{
|
||||
g.DrawRectangle(p, rect);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e)
|
||||
{
|
||||
var g = e.Graphics;
|
||||
|
||||
var rect = new Rectangle(e.ImageRectangle.Left - 2, e.ImageRectangle.Top - 2,
|
||||
e.ImageRectangle.Width + 4, e.ImageRectangle.Height + 4);
|
||||
|
||||
using (var b = new SolidBrush(Colors.LightBorder))
|
||||
{
|
||||
g.FillRectangle(b, rect);
|
||||
}
|
||||
|
||||
using (var p = new Pen(Colors.BlueHighlight))
|
||||
{
|
||||
var modRect = new Rectangle(rect.Left, rect.Top, rect.Width - 1, rect.Height - 1);
|
||||
g.DrawRectangle(p, modRect);
|
||||
}
|
||||
|
||||
if (e.Item.ImageIndex == -1 && String.IsNullOrEmpty(e.Item.ImageKey) && e.Item.Image == null)
|
||||
{
|
||||
g.DrawImageUnscaled(MenuIcons.tick, new Point(e.ImageRectangle.Left, e.ImageRectangle.Top));
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)
|
||||
{
|
||||
var g = e.Graphics;
|
||||
|
||||
var rect = new Rectangle(1, 3, e.Item.Width, 1);
|
||||
|
||||
using (var b = new SolidBrush(Colors.LightBorder))
|
||||
{
|
||||
g.FillRectangle(b, rect);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
|
||||
{
|
||||
e.ArrowColor = Colors.LightText;
|
||||
e.ArrowRectangle = new Rectangle(new Point(e.ArrowRectangle.Left, e.ArrowRectangle.Top - 1), e.ArrowRectangle.Size);
|
||||
|
||||
base.OnRenderArrow(e);
|
||||
}
|
||||
|
||||
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
|
||||
{
|
||||
var g = e.Graphics;
|
||||
|
||||
e.Item.ForeColor = e.Item.Enabled ? Colors.LightText : Colors.DisabledText;
|
||||
|
||||
if (e.Item.Enabled)
|
||||
{
|
||||
// Normal item
|
||||
if (e.Item.Selected)
|
||||
{
|
||||
var rect = new Rectangle(2, 0, e.Item.Width - 3, e.Item.Height);
|
||||
|
||||
using (var b = new SolidBrush(Colors.GreySelection))
|
||||
{
|
||||
g.FillRectangle(b, rect);
|
||||
}
|
||||
}
|
||||
|
||||
// Header item on open menu
|
||||
if (e.Item.GetType() == typeof(ToolStripMenuItem))
|
||||
{
|
||||
if (((ToolStripMenuItem)e.Item).DropDown.Visible && e.Item.IsOnDropDown == false)
|
||||
{
|
||||
var rect = new Rectangle(2, 0, e.Item.Width - 3, e.Item.Height);
|
||||
|
||||
using (var b = new SolidBrush(Colors.GreySelection))
|
||||
{
|
||||
g.FillRectangle(b, rect);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
195
DarkUI/Renderers/DarkToolStripRenderer.cs
Normal file
195
DarkUI/Renderers/DarkToolStripRenderer.cs
Normal file
@ -0,0 +1,195 @@
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DarkUI.Renderer
|
||||
{
|
||||
public class DarkToolStripRenderer : DarkMenuRenderer
|
||||
{
|
||||
#region Initialisation Region
|
||||
|
||||
protected override void InitializeItem(ToolStripItem item)
|
||||
{
|
||||
base.InitializeItem(item);
|
||||
|
||||
if (item.GetType() == typeof(ToolStripSeparator))
|
||||
{
|
||||
var castItem = (ToolStripSeparator)item;
|
||||
if (!castItem.IsOnDropDown)
|
||||
item.Margin = new Padding(0, 0, 2, 0);
|
||||
}
|
||||
|
||||
if (item.GetType() == typeof(ToolStripButton))
|
||||
{
|
||||
item.AutoSize = false;
|
||||
item.Size = new Size(24, 24);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Render Region
|
||||
|
||||
protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
|
||||
{
|
||||
base.OnRenderToolStripBackground(e);
|
||||
|
||||
var g = e.Graphics;
|
||||
|
||||
if (e.ToolStrip.GetType() == typeof(ToolStripOverflow))
|
||||
{
|
||||
using (var p = new Pen(Colors.GreyBackground))
|
||||
{
|
||||
var rect = new Rectangle(e.AffectedBounds.Left, e.AffectedBounds.Top, e.AffectedBounds.Width - 1, e.AffectedBounds.Height - 1);
|
||||
g.DrawRectangle(p, rect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
|
||||
{
|
||||
if (e.ToolStrip.GetType() != typeof(ToolStrip))
|
||||
base.OnRenderToolStripBorder(e);
|
||||
}
|
||||
|
||||
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
|
||||
{
|
||||
var g = e.Graphics;
|
||||
|
||||
var rect = new Rectangle(0, 1, e.Item.Width, e.Item.Height - 2);
|
||||
|
||||
if (e.Item.Selected || e.Item.Pressed)
|
||||
{
|
||||
using (var b = new SolidBrush(Colors.GreySelection))
|
||||
{
|
||||
g.FillRectangle(b, rect);
|
||||
}
|
||||
}
|
||||
|
||||
if (e.Item.GetType() == typeof(ToolStripButton))
|
||||
{
|
||||
var castItem = (ToolStripButton)e.Item;
|
||||
|
||||
if (castItem.Checked)
|
||||
{
|
||||
using (var b = new SolidBrush(Colors.GreySelection))
|
||||
{
|
||||
g.FillRectangle(b, rect);
|
||||
}
|
||||
}
|
||||
|
||||
if (castItem.Checked && castItem.Selected)
|
||||
{
|
||||
var modRect = new Rectangle(rect.Left, rect.Top, rect.Width - 1, rect.Height - 1);
|
||||
using (var p = new Pen(Colors.GreyHighlight))
|
||||
{
|
||||
g.DrawRectangle(p, modRect);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e)
|
||||
{
|
||||
var g = e.Graphics;
|
||||
|
||||
var rect = new Rectangle(0, 1, e.Item.Width, e.Item.Height - 2);
|
||||
|
||||
if (e.Item.Selected || e.Item.Pressed)
|
||||
{
|
||||
using (var b = new SolidBrush(Colors.GreySelection))
|
||||
{
|
||||
g.FillRectangle(b, rect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnRenderGrip(ToolStripGripRenderEventArgs e)
|
||||
{
|
||||
if (e.GripStyle == ToolStripGripStyle.Hidden)
|
||||
return;
|
||||
|
||||
var g = e.Graphics;
|
||||
|
||||
using (var img = MenuIcons.grip.SetColor(Colors.LightBorder))
|
||||
{
|
||||
g.DrawImageUnscaled(img, new Point(e.AffectedBounds.Left, e.AffectedBounds.Top));
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)
|
||||
{
|
||||
var g = e.Graphics;
|
||||
|
||||
var castItem = (ToolStripSeparator)e.Item;
|
||||
if (castItem.IsOnDropDown)
|
||||
{
|
||||
base.OnRenderSeparator(e);
|
||||
return;
|
||||
}
|
||||
|
||||
var rect = new Rectangle(3, 3, 2, e.Item.Height - 4);
|
||||
|
||||
using (var p = new Pen(Colors.DarkBorder))
|
||||
{
|
||||
g.DrawLine(p, rect.Left, rect.Top, rect.Left, rect.Height);
|
||||
}
|
||||
|
||||
using (var p = new Pen(Colors.LightBorder))
|
||||
{
|
||||
g.DrawLine(p, rect.Left + 1, rect.Top, rect.Left + 1, rect.Height);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e)
|
||||
{
|
||||
var g = e.Graphics;
|
||||
|
||||
if (e.Image == null)
|
||||
return;
|
||||
|
||||
if (e.Item.Enabled)
|
||||
g.DrawImageUnscaled(e.Image, new Point(e.ImageRectangle.Left, e.ImageRectangle.Top));
|
||||
else
|
||||
ControlPaint.DrawImageDisabled(g, e.Image, e.ImageRectangle.Left, e.ImageRectangle.Top, Color.Transparent);
|
||||
}
|
||||
|
||||
protected override void OnRenderOverflowButtonBackground(ToolStripItemRenderEventArgs e)
|
||||
{
|
||||
/*var g = e.Graphics;
|
||||
|
||||
var rect = new Rectangle(1, 0, e.Item.Width - 5, e.Item.Height);
|
||||
|
||||
var castItem = (ToolStripOverflowButton)e.Item;
|
||||
|
||||
var bgColor = BasicColors.White;
|
||||
if (castItem.Selected)
|
||||
bgColor = StyleColors.Weak(style);
|
||||
if (castItem.Pressed)
|
||||
bgColor = StyleColors.Medium(style);
|
||||
|
||||
using (var b = new SolidBrush(bgColor))
|
||||
{
|
||||
g.FillRectangle(b, rect);
|
||||
}
|
||||
|
||||
var fgColor = BasicColors.Grey;
|
||||
if (castItem.Selected)
|
||||
fgColor = StyleColors.Medium(style);
|
||||
if (castItem.Pressed)
|
||||
fgColor = StyleColors.Strong(style);
|
||||
|
||||
using (var p = new Pen(fgColor))
|
||||
{
|
||||
var modRect = new Rectangle(1, 0, e.Item.Width - 6, e.Item.Height - 1);
|
||||
g.DrawRectangle(p, modRect);
|
||||
}
|
||||
|
||||
using (var img = MenuIcons.overflow.SetColor(BasicColors.MediumGrey))
|
||||
{
|
||||
g.DrawImageUnscaled(img, e.Item.Width - 13, e.Item.Height - 9);
|
||||
}*/
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -9,10 +9,10 @@
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Example</RootNamespace>
|
||||
<AssemblyName>Example</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<TargetFrameworkProfile />
|
||||
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
|
Loading…
x
Reference in New Issue
Block a user