diff --git a/WinFormsUI/Docking/VS2005DockPaneCaption.cs b/WinFormsUI/Docking/VS2005DockPaneCaption.cs index 4719f81c..3a7752f8 100644 --- a/WinFormsUI/Docking/VS2005DockPaneCaption.cs +++ b/WinFormsUI/Docking/VS2005DockPaneCaption.cs @@ -63,22 +63,6 @@ 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 { @@ -86,7 +70,7 @@ private InertButton ButtonClose { 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); @@ -96,38 +80,6 @@ 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 { @@ -135,7 +87,7 @@ private InertButton ButtonAutoHide { 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); @@ -145,22 +97,6 @@ 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 { @@ -168,7 +104,7 @@ private InertButton ButtonOptions { 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); @@ -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) @@ -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); } @@ -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 @@ -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); } } @@ -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)); diff --git a/WinFormsUI/Docking/VS2005DockPaneStrip.cs b/WinFormsUI/Docking/VS2005DockPaneStrip.cs index 03f71961..b336ea76 100644 --- a/WinFormsUI/Docking/VS2005DockPaneStrip.cs +++ b/WinFormsUI/Docking/VS2005DockPaneStrip.cs @@ -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; @@ -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); @@ -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); @@ -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(); } @@ -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); }