2 // ToolStripRenderer.cs
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 // Copyright (c) Jonathan Pobst
26 // Jonathan Pobst (monkey@jpobst.com)
31 using System
.ComponentModel
;
33 using System
.Drawing
.Imaging
;
35 namespace System
.Windows
.Forms
37 public abstract class ToolStripRenderer
39 private static ColorMatrix grayscale_matrix
= new ColorMatrix (new float[][] {
40 //new float[]{0.3f,0.3f,0.3f,0,0},
41 //new float[]{0.59f,0.59f,0.59f,0,0},
42 //new float[]{0.11f,0.11f,0.11f,0,0},
43 //new float[]{0,0,0,1,0,0},
44 //new float[]{0,0,0,0,1,0},
45 //new float[]{0,0,0,0,0,1}
46 new float[]{0.2f,0.2f,0.2f,0,0}
,
47 new float[]{0.41f,0.41f,0.41f,0,0}
,
48 new float[]{0.11f,0.11f,0.11f,0,0}
,
49 new float[]{0.15f,0.15f,0.15f,1,0,0}
,
50 new float[]{0.15f,0.15f,0.15f,0,1,0}
,
51 new float[]{0.15f,0.15f,0.15f,0,0,1}
54 protected ToolStripRenderer ()
58 #region Public Methods
59 public static Image
CreateDisabledImage(Image normalImage
)
61 if (normalImage
== null)
64 // Code adapted from ThemeWin32Classic.cs
65 ImageAttributes ia
= new ImageAttributes();
66 ia
.SetColorMatrix (grayscale_matrix
);
68 Bitmap b
= new Bitmap(normalImage
);
69 Graphics
.FromImage(b
).DrawImage(normalImage
, new Rectangle (0, 0, normalImage
.Width
, normalImage
.Height
), 0, 0, normalImage
.Width
, normalImage
.Height
, GraphicsUnit
.Pixel
, ia
);
74 public void DrawArrow (ToolStripArrowRenderEventArgs e
)
75 { this.OnRenderArrow (e); }
77 public void DrawButtonBackground (ToolStripItemRenderEventArgs e
)
78 { this.OnRenderButtonBackground (e); }
80 public void DrawDropDownButtonBackground (ToolStripItemRenderEventArgs e
)
81 { this.OnRenderDropDownButtonBackground (e); }
83 public void DrawGrip (ToolStripGripRenderEventArgs e
)
84 { this.OnRenderGrip (e); }
86 public void DrawImageMargin (ToolStripRenderEventArgs e
)
87 { this.OnRenderImageMargin (e); }
89 public void DrawItemBackground (ToolStripItemRenderEventArgs e
)
90 { this.OnRenderItemBackground (e); }
92 public void DrawItemCheck (ToolStripItemImageRenderEventArgs e
)
93 { this.OnRenderItemCheck (e); }
95 public void DrawItemImage (ToolStripItemImageRenderEventArgs e
)
96 { this.OnRenderItemImage (e); }
98 public void DrawItemText (ToolStripItemTextRenderEventArgs e
)
99 { this.OnRenderItemText (e); }
101 public void DrawLabelBackground (ToolStripItemRenderEventArgs e
)
102 { this.OnRenderLabelBackground (e); }
104 public void DrawMenuItemBackground (ToolStripItemRenderEventArgs e
)
105 { this.OnRenderMenuItemBackground (e); }
107 public void DrawOverflowButtonBackground (ToolStripItemRenderEventArgs e
)
108 { this.OnRenderOverflowButtonBackground (e); }
110 public void DrawSeparator (ToolStripSeparatorRenderEventArgs e
)
111 { this.OnRenderSeparator (e); }
113 public void DrawSplitButton (ToolStripItemRenderEventArgs e
)
114 { this.OnRenderSplitButtonBackground (e); }
116 public void DrawStatusStripSizingGrip (ToolStripRenderEventArgs e
)
117 { this.OnRenderStatusStripSizingGrip (e); }
119 public void DrawToolStripBackground (ToolStripRenderEventArgs e
)
120 { this.OnRenderToolStripBackground (e); }
122 public void DrawToolStripBorder (ToolStripRenderEventArgs e
)
123 { this.OnRenderToolStripBorder (e); }
125 public void DrawToolStripContentPanelBackground (ToolStripContentPanelRenderEventArgs e
)
126 { this.OnRenderToolStripContentPanelBackground (e); }
128 public void DrawToolStripPanelBackground (ToolStripPanelRenderEventArgs e
)
129 { this.OnRenderToolStripPanelBackground (e); }
131 public void DrawToolStripStatusLabelBackground (ToolStripItemRenderEventArgs e
)
132 { this.OnRenderToolStripStatusLabelBackground (e); }
135 #region Protected Methods
136 protected internal virtual void Initialize (ToolStrip toolStrip
) {}
137 protected internal virtual void InitializeContentPanel (ToolStripContentPanel contentPanel
) {}
138 protected internal virtual void InitializeItem (ToolStripItem item
) {}
139 protected internal virtual void InitializePanel (ToolStripPanel toolStripPanel
) {}
141 protected virtual void OnRenderArrow (ToolStripArrowRenderEventArgs e
)
143 ToolStripArrowRenderEventHandler eh
= (ToolStripArrowRenderEventHandler
)Events
[RenderArrowEvent
];
148 protected virtual void OnRenderButtonBackground (ToolStripItemRenderEventArgs e
)
150 ToolStripItemRenderEventHandler eh
= (ToolStripItemRenderEventHandler
)Events
[RenderButtonBackgroundEvent
];
155 protected virtual void OnRenderDropDownButtonBackground (ToolStripItemRenderEventArgs e
)
157 ToolStripItemRenderEventHandler eh
= (ToolStripItemRenderEventHandler
)Events
[RenderDropDownButtonBackgroundEvent
];
162 protected virtual void OnRenderGrip (ToolStripGripRenderEventArgs e
)
164 ToolStripGripRenderEventHandler eh
= (ToolStripGripRenderEventHandler
)Events
[RenderGripEvent
];
169 protected virtual void OnRenderImageMargin (ToolStripRenderEventArgs e
)
171 ToolStripRenderEventHandler eh
= (ToolStripRenderEventHandler
)Events
[RenderImageMarginEvent
];
176 protected virtual void OnRenderItemBackground (ToolStripItemRenderEventArgs e
)
178 ToolStripItemRenderEventHandler eh
= (ToolStripItemRenderEventHandler
)Events
[RenderItemBackgroundEvent
];
183 protected virtual void OnRenderItemCheck (ToolStripItemImageRenderEventArgs e
)
185 ToolStripItemImageRenderEventHandler eh
= (ToolStripItemImageRenderEventHandler
)Events
[RenderItemCheckEvent
];
190 protected virtual void OnRenderItemImage (ToolStripItemImageRenderEventArgs e
)
192 ToolStripItemImageRenderEventHandler eh
= (ToolStripItemImageRenderEventHandler
)Events
[RenderItemImageEvent
];
197 protected virtual void OnRenderItemText (ToolStripItemTextRenderEventArgs e
)
199 ToolStripItemTextRenderEventHandler eh
= (ToolStripItemTextRenderEventHandler
)Events
[RenderItemTextEvent
];
204 protected virtual void OnRenderLabelBackground (ToolStripItemRenderEventArgs e
)
206 ToolStripItemRenderEventHandler eh
= (ToolStripItemRenderEventHandler
)Events
[RenderLabelBackgroundEvent
];
211 protected virtual void OnRenderMenuItemBackground (ToolStripItemRenderEventArgs e
)
213 ToolStripItemRenderEventHandler eh
= (ToolStripItemRenderEventHandler
)Events
[RenderMenuItemBackgroundEvent
];
218 protected virtual void OnRenderOverflowButtonBackground (ToolStripItemRenderEventArgs e
)
220 ToolStripItemRenderEventHandler eh
= (ToolStripItemRenderEventHandler
)Events
[RenderOverflowButtonBackgroundEvent
];
225 protected virtual void OnRenderSeparator (ToolStripSeparatorRenderEventArgs e
)
227 ToolStripSeparatorRenderEventHandler eh
= (ToolStripSeparatorRenderEventHandler
)Events
[RenderSeparatorEvent
];
232 protected virtual void OnRenderSplitButtonBackground (ToolStripItemRenderEventArgs e
)
234 ToolStripItemRenderEventHandler eh
= (ToolStripItemRenderEventHandler
)Events
[RenderSplitButtonBackgroundEvent
];
239 protected virtual void OnRenderStatusStripSizingGrip (ToolStripRenderEventArgs e
)
241 ToolStripRenderEventHandler eh
= (ToolStripRenderEventHandler
)Events
[RenderStatusStripSizingGripEvent
];
246 protected virtual void OnRenderToolStripBackground (ToolStripRenderEventArgs e
)
248 ToolStripRenderEventHandler eh
= (ToolStripRenderEventHandler
)Events
[RenderToolStripBackgroundEvent
];
253 protected virtual void OnRenderToolStripBorder (ToolStripRenderEventArgs e
)
255 ToolStripRenderEventHandler eh
= (ToolStripRenderEventHandler
)Events
[RenderToolStripBorderEvent
];
260 protected virtual void OnRenderToolStripContentPanelBackground (ToolStripContentPanelRenderEventArgs e
)
262 ToolStripContentPanelRenderEventHandler eh
= (ToolStripContentPanelRenderEventHandler
)Events
[RenderToolStripContentPanelBackgroundEvent
];
267 protected virtual void OnRenderToolStripPanelBackground (ToolStripPanelRenderEventArgs e
)
269 ToolStripPanelRenderEventHandler eh
= (ToolStripPanelRenderEventHandler
)Events
[RenderToolStripPanelBackgroundEvent
];
274 protected virtual void OnRenderToolStripStatusLabelBackground (ToolStripItemRenderEventArgs e
)
276 ToolStripItemRenderEventHandler eh
= (ToolStripItemRenderEventHandler
)Events
[RenderToolStripStatusLabelBackgroundEvent
];
282 #region Public Events
283 EventHandlerList events
;
285 EventHandlerList Events
{
288 events
= new EventHandlerList ();
293 static object RenderArrowEvent
= new object ();
294 static object RenderButtonBackgroundEvent
= new object ();
295 static object RenderDropDownButtonBackgroundEvent
= new object ();
296 static object RenderGripEvent
= new object ();
297 static object RenderImageMarginEvent
= new object ();
298 static object RenderItemBackgroundEvent
= new object ();
299 static object RenderItemCheckEvent
= new object ();
300 static object RenderItemImageEvent
= new object ();
301 static object RenderItemTextEvent
= new object ();
302 static object RenderLabelBackgroundEvent
= new object ();
303 static object RenderMenuItemBackgroundEvent
= new object ();
304 static object RenderOverflowButtonBackgroundEvent
= new object ();
305 static object RenderSeparatorEvent
= new object ();
306 static object RenderSplitButtonBackgroundEvent
= new object ();
307 static object RenderStatusStripSizingGripEvent
= new object ();
308 static object RenderToolStripBackgroundEvent
= new object ();
309 static object RenderToolStripBorderEvent
= new object ();
310 static object RenderToolStripContentPanelBackgroundEvent
= new object ();
311 static object RenderToolStripPanelBackgroundEvent
= new object ();
312 static object RenderToolStripStatusLabelBackgroundEvent
= new object ();
314 public event ToolStripArrowRenderEventHandler RenderArrow
{
315 add { Events.AddHandler (RenderArrowEvent, value); }
316 remove {Events.RemoveHandler (RenderArrowEvent, value); }
318 public event ToolStripItemRenderEventHandler RenderButtonBackground
{
319 add { Events.AddHandler (RenderButtonBackgroundEvent, value); }
320 remove {Events.RemoveHandler (RenderButtonBackgroundEvent, value); }
322 public event ToolStripItemRenderEventHandler RenderDropDownButtonBackground
{
323 add { Events.AddHandler (RenderDropDownButtonBackgroundEvent, value); }
324 remove {Events.RemoveHandler (RenderDropDownButtonBackgroundEvent, value); }
326 public event ToolStripGripRenderEventHandler RenderGrip
{
327 add { Events.AddHandler (RenderGripEvent, value); }
328 remove {Events.RemoveHandler (RenderGripEvent, value); }
330 public event ToolStripRenderEventHandler RenderImageMargin
{
331 add { Events.AddHandler (RenderImageMarginEvent, value); }
332 remove {Events.RemoveHandler (RenderImageMarginEvent, value); }
334 public event ToolStripItemRenderEventHandler RenderItemBackground
{
335 add { Events.AddHandler (RenderItemBackgroundEvent, value); }
336 remove {Events.RemoveHandler (RenderItemBackgroundEvent, value); }
338 public event ToolStripItemImageRenderEventHandler RenderItemCheck
{
339 add { Events.AddHandler (RenderItemCheckEvent, value); }
340 remove {Events.RemoveHandler (RenderItemCheckEvent, value); }
342 public event ToolStripItemImageRenderEventHandler RenderItemImage
{
343 add { Events.AddHandler (RenderItemImageEvent, value); }
344 remove {Events.RemoveHandler (RenderItemImageEvent, value); }
346 public event ToolStripItemTextRenderEventHandler RenderItemText
{
347 add { Events.AddHandler (RenderItemTextEvent, value); }
348 remove {Events.RemoveHandler (RenderItemTextEvent, value); }
350 public event ToolStripItemRenderEventHandler RenderLabelBackground
{
351 add { Events.AddHandler (RenderLabelBackgroundEvent, value); }
352 remove {Events.RemoveHandler (RenderLabelBackgroundEvent, value); }
354 public event ToolStripItemRenderEventHandler RenderMenuItemBackground
{
355 add { Events.AddHandler (RenderMenuItemBackgroundEvent, value); }
356 remove {Events.RemoveHandler (RenderMenuItemBackgroundEvent, value); }
358 public event ToolStripItemRenderEventHandler RenderOverflowButtonBackground
{
359 add { Events.AddHandler (RenderOverflowButtonBackgroundEvent, value); }
360 remove {Events.RemoveHandler (RenderOverflowButtonBackgroundEvent, value); }
362 public event ToolStripSeparatorRenderEventHandler RenderSeparator
{
363 add { Events.AddHandler (RenderSeparatorEvent, value); }
364 remove {Events.RemoveHandler (RenderSeparatorEvent, value); }
366 public event ToolStripItemRenderEventHandler RenderSplitButtonBackground
{
367 add { Events.AddHandler (RenderSplitButtonBackgroundEvent, value); }
368 remove {Events.RemoveHandler (RenderSplitButtonBackgroundEvent, value); }
370 public event ToolStripRenderEventHandler RenderStatusStripSizingGrip
{
371 add { Events.AddHandler (RenderStatusStripSizingGripEvent, value); }
372 remove {Events.RemoveHandler (RenderStatusStripSizingGripEvent, value); }
374 public event ToolStripRenderEventHandler RenderToolStripBackground
{
375 add { Events.AddHandler (RenderToolStripBackgroundEvent, value); }
376 remove {Events.RemoveHandler (RenderToolStripBackgroundEvent, value); }
378 public event ToolStripRenderEventHandler RenderToolStripBorder
{
379 add { Events.AddHandler (RenderToolStripBorderEvent, value); }
380 remove {Events.RemoveHandler (RenderToolStripBorderEvent, value); }
382 public event ToolStripContentPanelRenderEventHandler RenderToolStripContentPanelBackground
{
383 add { Events.AddHandler (RenderToolStripContentPanelBackgroundEvent, value); }
384 remove {Events.RemoveHandler (RenderToolStripContentPanelBackgroundEvent, value); }
386 public event ToolStripPanelRenderEventHandler RenderToolStripPanelBackground
{
387 add { Events.AddHandler (RenderToolStripPanelBackgroundEvent, value); }
388 remove {Events.RemoveHandler (RenderToolStripPanelBackgroundEvent, value); }
390 public event ToolStripItemRenderEventHandler RenderToolStripStatusLabelBackground
{
391 add { Events.AddHandler (RenderToolStripStatusLabelBackgroundEvent, value); }
392 remove {Events.RemoveHandler (RenderToolStripStatusLabelBackgroundEvent, value); }