Skip to content

Commit

Permalink
Make bitmap references non-static
Browse files Browse the repository at this point in the history
  • Loading branch information
wjrogers authored and lextm committed Dec 28, 2015
1 parent d3ada1a commit 19c1c25
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 135 deletions.
122 changes: 34 additions & 88 deletions WinFormsUI/Docking/VS2005DockPaneCaption.cs
Expand Up @@ -63,30 +63,14 @@ protected override void OnRefreshChanges()
private const int _ButtonGapRight = 2;
#endregion

[ThreadStatic()]
private static Bitmap _imageButtonClose;
private static Bitmap ImageButtonClose
{
get
{
if (_imageButtonClose == null)
{
lock (typeof(Resources))
_imageButtonClose = (Bitmap)Resources.DockPane_Close.Clone();
}

return _imageButtonClose;
}
}

private InertButton m_buttonClose;
private InertButton ButtonClose
{
get
{
if (m_buttonClose == null)
{
m_buttonClose = new InertButton(this, ImageButtonClose, ImageButtonClose);
m_buttonClose = new InertButton(this, _imageButtonClose, _imageButtonClose);
m_toolTip.SetToolTip(m_buttonClose, ToolTipClose);
m_buttonClose.Click += new EventHandler(Close_Click);
Controls.Add(m_buttonClose);
Expand All @@ -96,46 +80,14 @@ private InertButton ButtonClose
}
}

[ThreadStatic()]
private static Bitmap _imageButtonAutoHide;
private static Bitmap ImageButtonAutoHide
{
get
{
if (_imageButtonAutoHide == null)
{
lock (typeof(Resources))
_imageButtonAutoHide = (Bitmap)Resources.DockPane_AutoHide.Clone();
}

return _imageButtonAutoHide;
}
}

[ThreadStatic()]
private static Bitmap _imageButtonDock;
private static Bitmap ImageButtonDock
{
get
{
if (_imageButtonDock == null)
{
lock (typeof(Resources))
_imageButtonDock = (Bitmap)Resources.DockPane_Dock.Clone();
}

return _imageButtonDock;
}
}

private InertButton m_buttonAutoHide;
private InertButton ButtonAutoHide
{
get
{
if (m_buttonAutoHide == null)
{
m_buttonAutoHide = new InertButton(this, ImageButtonDock, ImageButtonAutoHide);
m_buttonAutoHide = new InertButton(this, _imageButtonDock, _imageButtonAutoHide);
m_toolTip.SetToolTip(m_buttonAutoHide, ToolTipAutoHide);
m_buttonAutoHide.Click += new EventHandler(AutoHide_Click);
Controls.Add(m_buttonAutoHide);
Expand All @@ -145,30 +97,14 @@ private InertButton ButtonAutoHide
}
}

[ThreadStatic()]
private static Bitmap _imageButtonOptions;
private static Bitmap ImageButtonOptions
{
get
{
if (_imageButtonOptions == null)
{
lock (typeof(Resources))
_imageButtonOptions = (Bitmap)Resources.DockPane_Option.Clone();
}

return _imageButtonOptions;
}
}

private InertButton m_buttonOptions;
private InertButton ButtonOptions
{
get
{
if (m_buttonOptions == null)
{
m_buttonOptions = new InertButton(this, ImageButtonOptions, ImageButtonOptions);
m_buttonOptions = new InertButton(this, _imageButtonOptions, _imageButtonOptions);
m_toolTip.SetToolTip(m_buttonOptions, ToolTipOptions);
m_buttonOptions.Click += new EventHandler(Options_Click);
Controls.Add(m_buttonOptions);
Expand All @@ -183,6 +119,12 @@ private IContainer Components
get { return m_components; }
}

private readonly Bitmap _imageButtonAutoHide;
private readonly Bitmap _imageButtonClose;
private readonly Bitmap _imageButtonDock;
private readonly Bitmap _imageButtonOptions;
private readonly Blend _activeBackColorGradientBlend;

private ToolTip m_toolTip;

public VS2005DockPaneCaption(DockPane pane) : base(pane)
Expand All @@ -192,13 +134,36 @@ public VS2005DockPaneCaption(DockPane pane) : base(pane)
m_components = new Container();
m_toolTip = new ToolTip(Components);

// clone shared resources
lock (typeof(Resources))
{
_imageButtonAutoHide = (Bitmap)Resources.DockPane_AutoHide.Clone();
_imageButtonClose = (Bitmap)Resources.DockPane_Close.Clone();
_imageButtonDock = (Bitmap)Resources.DockPane_Dock.Clone();
_imageButtonOptions = (Bitmap)Resources.DockPane_Option.Clone();
}

// create background blend
_activeBackColorGradientBlend = new Blend(2)
{
Factors = new float[] { 0.5F, 1.0F },
Positions = new float[] { 0.0F, 1.0F },
};

ResumeLayout();
}

protected override void Dispose(bool disposing)
{
if (disposing)
{
Components.Dispose();

_imageButtonAutoHide.Dispose();
_imageButtonClose.Dispose();
_imageButtonDock.Dispose();
_imageButtonOptions.Dispose();
}
base.Dispose(disposing);
}

Expand Down Expand Up @@ -286,25 +251,6 @@ private static string ToolTipAutoHide
}
}

[ThreadStatic()]
private static Blend _activeBackColorGradientBlend;
private static Blend ActiveBackColorGradientBlend
{
get
{
if (_activeBackColorGradientBlend == null)
{
Blend blend = new Blend(2);

blend.Factors = new float[]{0.5F, 1.0F};
blend.Positions = new float[]{0.0F, 1.0F};
_activeBackColorGradientBlend = blend;
}

return _activeBackColorGradientBlend;
}
}

private Color TextColor
{
get
Expand Down Expand Up @@ -359,7 +305,7 @@ private void DrawCaption(Graphics g)
LinearGradientMode gradientMode = DockPane.DockPanel.Skin.DockPaneStripSkin.ToolWindowGradient.ActiveCaptionGradient.LinearGradientMode;
using (LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, startColor, endColor, gradientMode))
{
brush.Blend = ActiveBackColorGradientBlend;
brush.Blend = _activeBackColorGradientBlend;
g.FillRectangle(brush, ClientRectangle);
}
}
Expand Down Expand Up @@ -452,7 +398,7 @@ private void SetButtonsPosition()
buttonHeight = height;
}
Size buttonSize = new Size(buttonWidth, buttonHeight);
int x = rectCaption.X + rectCaption.Width - 1 - ButtonGapRight - m_buttonClose.Width;
int x = rectCaption.X + rectCaption.Width - 1 - ButtonGapRight - ButtonClose.Width;
int y = rectCaption.Y + ButtonGapTop;
Point point = new Point(x, y);
ButtonClose.Bounds = DrawHelper.RtlTransform(this, new Rectangle(point, buttonSize));
Expand Down
65 changes: 18 additions & 47 deletions WinFormsUI/Docking/VS2005DockPaneStrip.cs
Expand Up @@ -117,11 +117,12 @@ public override Bitmap Image

#region Members

private readonly Bitmap m_imageButtonClose;
private readonly Bitmap m_imageButtonWindowList;
private readonly Bitmap m_imageButtonWindowListOverflow;

private ContextMenuStrip m_selectMenu;
[ThreadStatic()] private static Bitmap m_imageButtonClose;
private InertButton m_buttonClose;
[ThreadStatic()] private static Bitmap m_imageButtonWindowList;
[ThreadStatic()] private static Bitmap m_imageButtonWindowListOverflow;
private InertButton m_buttonWindowList;
private IContainer m_components;
private ToolTip m_toolTip;
Expand Down Expand Up @@ -206,27 +207,13 @@ public int SelectMenuMargin
set { _selectMenuMargin = value; }
}

private static Bitmap ImageButtonClose
{
get
{
if (m_imageButtonClose == null)
{
lock (typeof(Resources))
m_imageButtonClose = (Bitmap)Resources.DockPane_Close.Clone();
}

return m_imageButtonClose;
}
}

private InertButton ButtonClose
{
get
{
if (m_buttonClose == null)
{
m_buttonClose = new InertButton(ImageButtonClose, ImageButtonClose);
m_buttonClose = new InertButton(m_imageButtonClose, m_imageButtonClose);
m_toolTip.SetToolTip(m_buttonClose, ToolTipClose);
m_buttonClose.Click += new EventHandler(Close_Click);
Controls.Add(m_buttonClose);
Expand All @@ -236,41 +223,13 @@ private InertButton ButtonClose
}
}

private static Bitmap ImageButtonWindowList
{
get
{
if (m_imageButtonWindowList == null)
{
lock (typeof(Resources))
m_imageButtonWindowList = (Bitmap)Resources.DockPane_Option.Clone();
}

return m_imageButtonWindowList;
}
}

private static Bitmap ImageButtonWindowListOverflow
{
get
{
if (m_imageButtonWindowListOverflow == null)
{
lock (typeof(Resources))
m_imageButtonWindowListOverflow = (Bitmap)Resources.DockPane_OptionOverflow.Clone();
}

return m_imageButtonWindowListOverflow;
}
}

private InertButton ButtonWindowList
{
get
{
if (m_buttonWindowList == null)
{
m_buttonWindowList = new InertButton(ImageButtonWindowList, ImageButtonWindowListOverflow);
m_buttonWindowList = new InertButton(m_imageButtonWindowList, m_imageButtonWindowListOverflow);
m_toolTip.SetToolTip(m_buttonWindowList, ToolTipSelect);
m_buttonWindowList.Click += new EventHandler(WindowList_Click);
Controls.Add(m_buttonWindowList);
Expand Down Expand Up @@ -586,6 +545,14 @@ public VS2005DockPaneStrip(DockPane pane)
m_selectMenu = new ContextMenuStrip(Components);
m_graphicsPath = new GraphicsPath();

// clone shared resources
lock (typeof(Resources))
{
m_imageButtonClose = (Bitmap)Resources.DockPane_Close.Clone();
m_imageButtonWindowList = (Bitmap)Resources.DockPane_Option.Clone();
m_imageButtonWindowListOverflow = (Bitmap)Resources.DockPane_OptionOverflow.Clone();
}

ResumeLayout();
}

Expand All @@ -599,6 +566,10 @@ protected override void Dispose(bool disposing)
m_boldFont.Dispose();
m_boldFont = null;
}

m_imageButtonClose.Dispose();
m_imageButtonWindowList.Dispose();
m_imageButtonWindowListOverflow.Dispose();
}
base.Dispose(disposing);
}
Expand Down

0 comments on commit 19c1c25

Please sign in to comment.