1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: src/ribbon/art_msw.cpp
3 // Purpose: MSW style art provider for ribbon interface
4 // Author: Peter Cawley
8 // Copyright: (C) Peter Cawley
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 #include "wx/wxprec.h"
20 #include "wx/ribbon/art.h"
21 #include "wx/ribbon/art_internal.h"
22 #include "wx/ribbon/bar.h"
23 #include "wx/ribbon/buttonbar.h"
24 #include "wx/ribbon/gallery.h"
25 #include "wx/ribbon/toolbar.h"
28 #include "wx/dcmemory.h"
32 #include "wx/msw/private.h"
35 static const char* const gallery_up_xpm
[] = {
45 static const char* const gallery_down_xpm
[] = {
55 static const char* const gallery_left_xpm
[] = {
65 static const char* const gallery_right_xpm
[] = {
75 static const char* const gallery_extension_xpm
[] = {
85 wxRibbonMSWArtProvider::wxRibbonMSWArtProvider(bool set_colour_scheme
)
88 m_tab_label_font
= *wxNORMAL_FONT
;
89 m_button_bar_label_font
= m_tab_label_font
;
90 m_panel_label_font
= m_tab_label_font
;
95 wxColour(194, 216, 241),
96 wxColour(255, 223, 114),
100 m_cached_tab_separator_visibility
= -10.0; // valid visibilities are in range [0, 1]
101 m_tab_separation_size
= 3;
102 m_page_border_left
= 2;
103 m_page_border_top
= 1;
104 m_page_border_right
= 2;
105 m_page_border_bottom
= 3;
106 m_panel_x_separation_size
= 1;
107 m_panel_y_separation_size
= 1;
108 m_tool_group_separation_size
= 3;
109 m_gallery_bitmap_padding_left_size
= 4;
110 m_gallery_bitmap_padding_right_size
= 4;
111 m_gallery_bitmap_padding_top_size
= 4;
112 m_gallery_bitmap_padding_bottom_size
= 4;
115 wxRibbonMSWArtProvider::~wxRibbonMSWArtProvider()
119 void wxRibbonMSWArtProvider::GetColourScheme(
122 wxColour
* tertiary
) const
125 *primary
= m_primary_scheme_colour
;
126 if(secondary
!= NULL
)
127 *secondary
= m_secondary_scheme_colour
;
129 *tertiary
= m_tertiary_scheme_colour
;
132 void wxRibbonMSWArtProvider::SetColourScheme(
133 const wxColour
& primary
,
134 const wxColour
& secondary
,
135 const wxColour
& tertiary
)
137 m_primary_scheme_colour
= primary
;
138 m_secondary_scheme_colour
= secondary
;
139 m_tertiary_scheme_colour
= tertiary
;
141 wxRibbonHSLColour
primary_hsl(primary
);
142 wxRibbonHSLColour
secondary_hsl(secondary
);
143 // tertiary not used for anything
145 // Map primary saturation from [0, 1] to [.25, .75]
146 bool primary_is_gray
= false;
147 static const double gray_saturation_threshold
= 0.01;
148 if(primary_hsl
.saturation
<= gray_saturation_threshold
)
149 primary_is_gray
= true;
152 primary_hsl
.saturation
= cos(primary_hsl
.saturation
* M_PI
)
156 // Map primary luminance from [0, 1] to [.23, .83]
157 primary_hsl
.luminance
= cos(primary_hsl
.luminance
* M_PI
) * -0.3 + 0.53;
159 // Map secondary saturation from [0, 1] to [0.16, 0.84]
160 bool secondary_is_gray
= false;
161 if(secondary_hsl
.saturation
<= gray_saturation_threshold
)
162 secondary_is_gray
= true;
165 secondary_hsl
.saturation
= cos(secondary_hsl
.saturation
* M_PI
)
169 // Map secondary luminance from [0, 1] to [0.1, 0.9]
170 secondary_hsl
.luminance
= cos(secondary_hsl
.luminance
* M_PI
) * -0.4 + 0.5;
172 #define LikePrimary(h, s, l) \
173 primary_hsl.ShiftHue(h ## f).Saturated(primary_is_gray ? 0 : s ## f) \
174 .Lighter(l ## f).ToRGB()
175 #define LikeSecondary(h, s, l) \
176 secondary_hsl.ShiftHue(h ## f).Saturated(secondary_is_gray ? 0 : s ## f) \
177 .Lighter(l ## f).ToRGB()
179 m_page_border_pen
= LikePrimary(1.4, 0.00, -0.08);
181 m_page_background_top_colour
= LikePrimary(-0.1, -0.03, 0.12);
182 m_page_hover_background_top_colour
= LikePrimary(-2.8, 0.27, 0.17);
183 m_page_background_top_gradient_colour
= LikePrimary(0.1, -0.10, 0.08);
184 m_page_hover_background_top_gradient_colour
= LikePrimary(3.2, 0.16, 0.13);
185 m_page_background_colour
= LikePrimary(0.4, -0.09, 0.05);
186 m_page_hover_background_colour
= LikePrimary(0.1, 0.19, 0.10);
187 m_page_background_gradient_colour
= LikePrimary(-3.2, 0.27, 0.10);
188 m_page_hover_background_gradient_colour
= LikePrimary(1.8, 0.01, 0.15);
190 m_tab_active_background_colour
= LikePrimary(-0.1, -0.31, 0.16);
191 m_tab_active_background_gradient_colour
= LikePrimary(-0.1, -0.03, 0.12);
192 m_tab_separator_colour
= LikePrimary(0.9, 0.24, 0.05);
193 m_tab_ctrl_background_brush
= LikePrimary(1.0, 0.39, 0.07);
194 m_tab_hover_background_colour
= LikePrimary(1.3, 0.15, 0.10);
195 m_tab_hover_background_top_colour
= LikePrimary(1.4, 0.36, 0.08);
196 m_tab_border_pen
= LikePrimary(1.4, 0.03, -0.05);
197 m_tab_separator_gradient_colour
= LikePrimary(1.7, -0.15, -0.18);
198 m_tab_hover_background_top_gradient_colour
= LikePrimary(1.8, 0.34, 0.13);
199 m_tab_label_colour
= LikePrimary(4.3, 0.13, -0.49);
200 m_tab_hover_background_gradient_colour
= LikeSecondary(-1.5, -0.34, 0.01);
202 m_panel_minimised_border_gradient_pen
= LikePrimary(-6.9, -0.17, -0.09);
203 m_panel_minimised_border_pen
= LikePrimary(-5.3, -0.24, -0.06);
204 m_panel_border_gradient_pen
= LikePrimary(-5.2, -0.15, -0.06);
205 m_panel_border_pen
= LikePrimary(-2.8, -0.32, 0.02);
206 m_panel_label_background_brush
= LikePrimary(-1.5, 0.03, 0.05);
207 m_panel_active_background_gradient_colour
= LikePrimary(0.5, 0.34, 0.05);
208 m_panel_hover_label_background_brush
= LikePrimary(1.0, 0.30, 0.09);
209 m_panel_active_background_top_gradient_colour
= LikePrimary(1.4, -0.17, -0.13);
210 m_panel_active_background_colour
= LikePrimary(1.6, -0.18, -0.18);
211 m_panel_active_background_top_colour
= LikePrimary(1.7, -0.20, -0.03);
212 m_panel_label_colour
= LikePrimary(2.8, -0.14, -0.35);
213 m_panel_hover_label_colour
= m_panel_label_colour
;
214 m_panel_minimised_label_colour
= m_tab_label_colour
;
216 m_gallery_button_disabled_background_colour
= LikePrimary(-2.8, -0.46, 0.09);
217 m_gallery_button_disabled_background_top_brush
= LikePrimary(-2.8, -0.36, 0.15);
218 m_gallery_hover_background_brush
= LikePrimary(-0.8, 0.05, 0.15);
219 m_gallery_border_pen
= LikePrimary(0.7, -0.02, 0.03);
220 m_gallery_button_background_top_brush
= LikePrimary(0.8, 0.34, 0.13);
221 m_gallery_button_background_colour
= LikePrimary(1.3, 0.10, 0.08);
222 // SetColour used so that the relevant bitmaps are generated
223 SetColour(wxRIBBON_ART_GALLERY_BUTTON_FACE_COLOUR
, LikePrimary(1.4, -0.21, -0.23));
224 SetColour(wxRIBBON_ART_GALLERY_BUTTON_HOVER_FACE_COLOUR
, LikePrimary(1.5, -0.24, -0.29));
225 SetColour(wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_FACE_COLOUR
, LikePrimary(1.5, -0.24, -0.29));
226 SetColour(wxRIBBON_ART_GALLERY_BUTTON_DISABLED_FACE_COLOUR
, LikePrimary(0.0, -1.0, 0.0));
227 m_gallery_button_disabled_background_gradient_colour
= LikePrimary(1.5, -0.43, 0.12);
228 m_gallery_button_background_gradient_colour
= LikePrimary(1.7, 0.11, 0.09);
229 m_gallery_item_border_pen
= LikeSecondary(-3.9, -0.16, -0.14);
230 m_gallery_button_hover_background_colour
= LikeSecondary(-0.9, 0.16, -0.07);
231 m_gallery_button_hover_background_gradient_colour
= LikeSecondary(0.1, 0.12, 0.03);
232 m_gallery_button_hover_background_top_brush
= LikeSecondary(4.3, 0.16, 0.17);
234 m_gallery_button_active_background_colour
= LikeSecondary(-9.9, 0.03, -0.22);
235 m_gallery_button_active_background_gradient_colour
= LikeSecondary(-9.5, 0.14, -0.11);
236 m_gallery_button_active_background_top_brush
= LikeSecondary(-9.0, 0.15, -0.08);
238 m_button_bar_label_colour
= m_tab_label_colour
;
239 m_button_bar_hover_border_pen
= LikeSecondary(-6.2, -0.47, -0.14);
240 m_button_bar_hover_background_gradient_colour
= LikeSecondary(-0.6, 0.16, 0.04);
241 m_button_bar_hover_background_colour
= LikeSecondary(-0.2, 0.16, -0.10);
242 m_button_bar_hover_background_top_gradient_colour
= LikeSecondary(0.2, 0.16, 0.03);
243 m_button_bar_hover_background_top_colour
= LikeSecondary(8.8, 0.16, 0.17);
244 m_button_bar_active_border_pen
= LikeSecondary(-6.2, -0.47, -0.25);
245 m_button_bar_active_background_top_colour
= LikeSecondary(-8.4, 0.08, 0.06);
246 m_button_bar_active_background_top_gradient_colour
= LikeSecondary(-9.7, 0.13, -0.07);
247 m_button_bar_active_background_colour
= LikeSecondary(-9.9, 0.14, -0.14);
248 m_button_bar_active_background_gradient_colour
= LikeSecondary(-8.7, 0.17, -0.03);
250 m_toolbar_border_pen
= LikePrimary(1.4, -0.21, -0.16);
251 SetColour(wxRIBBON_ART_TOOLBAR_FACE_COLOUR
, LikePrimary(1.4, -0.17, -0.22));
252 m_tool_background_top_colour
= LikePrimary(-1.9, -0.07, 0.06);
253 m_tool_background_top_gradient_colour
= LikePrimary(1.4, 0.12, 0.08);
254 m_tool_background_colour
= LikePrimary(1.4, -0.09, 0.03);
255 m_tool_background_gradient_colour
= LikePrimary(1.9, 0.11, 0.09);
256 m_tool_hover_background_top_colour
= LikeSecondary(3.4, 0.11, 0.16);
257 m_tool_hover_background_top_gradient_colour
= LikeSecondary(-1.4, 0.04, 0.08);
258 m_tool_hover_background_colour
= LikeSecondary(-1.8, 0.16, -0.12);
259 m_tool_hover_background_gradient_colour
= LikeSecondary(-2.6, 0.16, 0.05);
260 m_tool_active_background_top_colour
= LikeSecondary(-9.9, -0.12, -0.09);
261 m_tool_active_background_top_gradient_colour
= LikeSecondary(-8.5, 0.16, -0.12);
262 m_tool_active_background_colour
= LikeSecondary(-7.9, 0.16, -0.20);
263 m_tool_active_background_gradient_colour
= LikeSecondary(-6.6, 0.16, -0.10);
268 // Invalidate cached tab separator
269 m_cached_tab_separator_visibility
= -1.0;
272 wxRibbonArtProvider
* wxRibbonMSWArtProvider::Clone() const
274 wxRibbonMSWArtProvider
*copy
= new wxRibbonMSWArtProvider
;
279 void wxRibbonMSWArtProvider::CloneTo(wxRibbonMSWArtProvider
* copy
) const
281 for(int i
= 0; i
< 4; ++i
)
283 copy
->m_gallery_up_bitmap
[i
] = m_gallery_up_bitmap
[i
];
284 copy
->m_gallery_down_bitmap
[i
] = m_gallery_down_bitmap
[i
];
285 copy
->m_gallery_extension_bitmap
[i
] = m_gallery_extension_bitmap
[i
];
287 copy
->m_toolbar_drop_bitmap
= m_toolbar_drop_bitmap
;
289 copy
->m_primary_scheme_colour
= m_primary_scheme_colour
;
290 copy
->m_secondary_scheme_colour
= m_secondary_scheme_colour
;
291 copy
->m_tertiary_scheme_colour
= m_tertiary_scheme_colour
;
293 copy
->m_button_bar_label_colour
= m_button_bar_label_colour
;
294 copy
->m_tab_label_colour
= m_tab_label_colour
;
295 copy
->m_tab_separator_colour
= m_tab_separator_colour
;
296 copy
->m_tab_separator_gradient_colour
= m_tab_separator_gradient_colour
;
297 copy
->m_tab_active_background_colour
= m_tab_hover_background_colour
;
298 copy
->m_tab_active_background_gradient_colour
= m_tab_hover_background_gradient_colour
;
299 copy
->m_tab_hover_background_colour
= m_tab_hover_background_colour
;
300 copy
->m_tab_hover_background_gradient_colour
= m_tab_hover_background_gradient_colour
;
301 copy
->m_tab_hover_background_top_colour
= m_tab_hover_background_top_colour
;
302 copy
->m_tab_hover_background_top_gradient_colour
= m_tab_hover_background_top_gradient_colour
;
303 copy
->m_panel_label_colour
= m_panel_label_colour
;
304 copy
->m_panel_hover_label_colour
= m_panel_hover_label_colour
;
305 copy
->m_panel_minimised_label_colour
= m_panel_minimised_label_colour
;
306 copy
->m_panel_active_background_colour
= m_panel_active_background_colour
;
307 copy
->m_panel_active_background_gradient_colour
= m_panel_active_background_gradient_colour
;
308 copy
->m_panel_active_background_top_colour
= m_panel_active_background_top_colour
;
309 copy
->m_panel_active_background_top_gradient_colour
= m_panel_active_background_top_gradient_colour
;
310 copy
->m_page_background_colour
= m_page_background_colour
;
311 copy
->m_page_background_gradient_colour
= m_page_background_gradient_colour
;
312 copy
->m_page_background_top_colour
= m_page_background_top_colour
;
313 copy
->m_page_background_top_gradient_colour
= m_page_background_top_gradient_colour
;
314 copy
->m_page_hover_background_colour
= m_page_hover_background_colour
;
315 copy
->m_page_hover_background_gradient_colour
= m_page_hover_background_gradient_colour
;
316 copy
->m_page_hover_background_top_colour
= m_page_hover_background_top_colour
;
317 copy
->m_page_hover_background_top_gradient_colour
= m_page_hover_background_top_gradient_colour
;
318 copy
->m_button_bar_hover_background_colour
= m_button_bar_hover_background_colour
;
319 copy
->m_button_bar_hover_background_gradient_colour
= m_button_bar_hover_background_gradient_colour
;
320 copy
->m_button_bar_hover_background_top_colour
= m_button_bar_hover_background_top_colour
;
321 copy
->m_button_bar_hover_background_top_gradient_colour
= m_button_bar_hover_background_top_gradient_colour
;
322 copy
->m_button_bar_active_background_colour
= m_button_bar_active_background_colour
;
323 copy
->m_button_bar_active_background_gradient_colour
= m_button_bar_active_background_gradient_colour
;
324 copy
->m_button_bar_active_background_top_colour
= m_button_bar_active_background_top_colour
;
325 copy
->m_button_bar_active_background_top_gradient_colour
= m_button_bar_active_background_top_gradient_colour
;
326 copy
->m_gallery_button_background_colour
= m_gallery_button_background_colour
;
327 copy
->m_gallery_button_background_gradient_colour
= m_gallery_button_background_gradient_colour
;
328 copy
->m_gallery_button_hover_background_colour
= m_gallery_button_hover_background_colour
;
329 copy
->m_gallery_button_hover_background_gradient_colour
= m_gallery_button_hover_background_gradient_colour
;
330 copy
->m_gallery_button_active_background_colour
= m_gallery_button_active_background_colour
;
331 copy
->m_gallery_button_active_background_gradient_colour
= m_gallery_button_active_background_gradient_colour
;
332 copy
->m_gallery_button_disabled_background_colour
= m_gallery_button_disabled_background_colour
;
333 copy
->m_gallery_button_disabled_background_gradient_colour
= m_gallery_button_disabled_background_gradient_colour
;
334 copy
->m_gallery_button_face_colour
= m_gallery_button_face_colour
;
335 copy
->m_gallery_button_hover_face_colour
= m_gallery_button_hover_face_colour
;
336 copy
->m_gallery_button_active_face_colour
= m_gallery_button_active_face_colour
;
337 copy
->m_gallery_button_disabled_face_colour
= m_gallery_button_disabled_face_colour
;
339 copy
->m_tab_ctrl_background_brush
= m_tab_ctrl_background_brush
;
340 copy
->m_panel_label_background_brush
= m_panel_label_background_brush
;
341 copy
->m_panel_hover_label_background_brush
= m_panel_hover_label_background_brush
;
342 copy
->m_gallery_hover_background_brush
= m_gallery_hover_background_brush
;
343 copy
->m_gallery_button_background_top_brush
= m_gallery_button_background_top_brush
;
344 copy
->m_gallery_button_hover_background_top_brush
= m_gallery_button_hover_background_top_brush
;
345 copy
->m_gallery_button_active_background_top_brush
= m_gallery_button_active_background_top_brush
;
346 copy
->m_gallery_button_disabled_background_top_brush
= m_gallery_button_disabled_background_top_brush
;
348 copy
->m_tab_label_font
= m_tab_label_font
;
349 copy
->m_button_bar_label_font
= m_button_bar_label_font
;
350 copy
->m_panel_label_font
= m_panel_label_font
;
352 copy
->m_page_border_pen
= m_page_border_pen
;
353 copy
->m_panel_border_pen
= m_panel_border_pen
;
354 copy
->m_panel_border_gradient_pen
= m_panel_border_gradient_pen
;
355 copy
->m_panel_minimised_border_pen
= m_panel_minimised_border_pen
;
356 copy
->m_panel_minimised_border_gradient_pen
= m_panel_minimised_border_gradient_pen
;
357 copy
->m_tab_border_pen
= m_tab_border_pen
;
358 copy
->m_gallery_border_pen
= m_gallery_border_pen
;
359 copy
->m_button_bar_hover_border_pen
= m_button_bar_hover_border_pen
;
360 copy
->m_button_bar_active_border_pen
= m_button_bar_active_border_pen
;
361 copy
->m_gallery_item_border_pen
= m_gallery_item_border_pen
;
362 copy
->m_toolbar_border_pen
= m_toolbar_border_pen
;
364 copy
->m_flags
= m_flags
;
365 copy
->m_tab_separation_size
= m_tab_separation_size
;
366 copy
->m_page_border_left
= m_page_border_left
;
367 copy
->m_page_border_top
= m_page_border_top
;
368 copy
->m_page_border_right
= m_page_border_right
;
369 copy
->m_page_border_bottom
= m_page_border_bottom
;
370 copy
->m_panel_x_separation_size
= m_panel_x_separation_size
;
371 copy
->m_panel_y_separation_size
= m_panel_y_separation_size
;
372 copy
->m_gallery_bitmap_padding_left_size
= m_gallery_bitmap_padding_left_size
;
373 copy
->m_gallery_bitmap_padding_right_size
= m_gallery_bitmap_padding_right_size
;
374 copy
->m_gallery_bitmap_padding_top_size
= m_gallery_bitmap_padding_top_size
;
375 copy
->m_gallery_bitmap_padding_bottom_size
= m_gallery_bitmap_padding_bottom_size
;
378 long wxRibbonMSWArtProvider::GetFlags() const
383 void wxRibbonMSWArtProvider::SetFlags(long flags
)
385 if((flags
^ m_flags
) & wxRIBBON_BAR_FLOW_VERTICAL
)
387 if(flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
389 m_page_border_left
++;
390 m_page_border_right
++;
392 m_page_border_bottom
--;
396 m_page_border_left
--;
397 m_page_border_right
--;
399 m_page_border_bottom
++;
404 // Need to reload some bitmaps when flags change
405 #define Reload(setting) SetColour(setting, GetColour(setting))
406 Reload(wxRIBBON_ART_GALLERY_BUTTON_FACE_COLOUR
);
407 Reload(wxRIBBON_ART_GALLERY_BUTTON_HOVER_FACE_COLOUR
);
408 Reload(wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_FACE_COLOUR
);
409 Reload(wxRIBBON_ART_GALLERY_BUTTON_DISABLED_FACE_COLOUR
);
413 int wxRibbonMSWArtProvider::GetMetric(int id
) const
417 case wxRIBBON_ART_TAB_SEPARATION_SIZE
:
418 return m_tab_separation_size
;
419 case wxRIBBON_ART_PAGE_BORDER_LEFT_SIZE
:
420 return m_page_border_left
;
421 case wxRIBBON_ART_PAGE_BORDER_TOP_SIZE
:
422 return m_page_border_top
;
423 case wxRIBBON_ART_PAGE_BORDER_RIGHT_SIZE
:
424 return m_page_border_right
;
425 case wxRIBBON_ART_PAGE_BORDER_BOTTOM_SIZE
:
426 return m_page_border_bottom
;
427 case wxRIBBON_ART_PANEL_X_SEPARATION_SIZE
:
428 return m_panel_x_separation_size
;
429 case wxRIBBON_ART_PANEL_Y_SEPARATION_SIZE
:
430 return m_panel_y_separation_size
;
431 case wxRIBBON_ART_TOOL_GROUP_SEPARATION_SIZE
:
432 return m_tool_group_separation_size
;
433 case wxRIBBON_ART_GALLERY_BITMAP_PADDING_LEFT_SIZE
:
434 return m_gallery_bitmap_padding_left_size
;
435 case wxRIBBON_ART_GALLERY_BITMAP_PADDING_RIGHT_SIZE
:
436 return m_gallery_bitmap_padding_right_size
;
437 case wxRIBBON_ART_GALLERY_BITMAP_PADDING_TOP_SIZE
:
438 return m_gallery_bitmap_padding_top_size
;
439 case wxRIBBON_ART_GALLERY_BITMAP_PADDING_BOTTOM_SIZE
:
440 return m_gallery_bitmap_padding_bottom_size
;
442 wxFAIL_MSG(wxT("Invalid Metric Ordinal"));
449 void wxRibbonMSWArtProvider::SetMetric(int id
, int new_val
)
453 case wxRIBBON_ART_TAB_SEPARATION_SIZE
:
454 m_tab_separation_size
= new_val
;
456 case wxRIBBON_ART_PAGE_BORDER_LEFT_SIZE
:
457 m_page_border_left
= new_val
;
459 case wxRIBBON_ART_PAGE_BORDER_TOP_SIZE
:
460 m_page_border_top
= new_val
;
462 case wxRIBBON_ART_PAGE_BORDER_RIGHT_SIZE
:
463 m_page_border_right
= new_val
;
465 case wxRIBBON_ART_PAGE_BORDER_BOTTOM_SIZE
:
466 m_page_border_bottom
= new_val
;
468 case wxRIBBON_ART_PANEL_X_SEPARATION_SIZE
:
469 m_panel_x_separation_size
= new_val
;
471 case wxRIBBON_ART_PANEL_Y_SEPARATION_SIZE
:
472 m_panel_y_separation_size
= new_val
;
474 case wxRIBBON_ART_TOOL_GROUP_SEPARATION_SIZE
:
475 m_tool_group_separation_size
= new_val
;
477 case wxRIBBON_ART_GALLERY_BITMAP_PADDING_LEFT_SIZE
:
478 m_gallery_bitmap_padding_left_size
= new_val
;
480 case wxRIBBON_ART_GALLERY_BITMAP_PADDING_RIGHT_SIZE
:
481 m_gallery_bitmap_padding_right_size
= new_val
;
483 case wxRIBBON_ART_GALLERY_BITMAP_PADDING_TOP_SIZE
:
484 m_gallery_bitmap_padding_top_size
= new_val
;
486 case wxRIBBON_ART_GALLERY_BITMAP_PADDING_BOTTOM_SIZE
:
487 m_gallery_bitmap_padding_bottom_size
= new_val
;
490 wxFAIL_MSG(wxT("Invalid Metric Ordinal"));
495 void wxRibbonMSWArtProvider::SetFont(int id
, const wxFont
& font
)
499 case wxRIBBON_ART_TAB_LABEL_FONT
:
500 m_tab_label_font
= font
;
502 case wxRIBBON_ART_BUTTON_BAR_LABEL_FONT
:
503 m_button_bar_label_font
= font
;
505 case wxRIBBON_ART_PANEL_LABEL_FONT
:
506 m_panel_label_font
= font
;
509 wxFAIL_MSG(wxT("Invalid Metric Ordinal"));
514 wxFont
wxRibbonMSWArtProvider::GetFont(int id
) const
518 case wxRIBBON_ART_TAB_LABEL_FONT
:
519 return m_tab_label_font
;
520 case wxRIBBON_ART_BUTTON_BAR_LABEL_FONT
:
521 return m_button_bar_label_font
;
522 case wxRIBBON_ART_PANEL_LABEL_FONT
:
523 return m_panel_label_font
;
525 wxFAIL_MSG(wxT("Invalid Metric Ordinal"));
532 wxColour
wxRibbonMSWArtProvider::GetColour(int id
) const
536 case wxRIBBON_ART_BUTTON_BAR_LABEL_COLOUR
:
537 return m_button_bar_label_colour
;
538 case wxRIBBON_ART_BUTTON_BAR_HOVER_BORDER_COLOUR
:
539 return m_button_bar_hover_border_pen
.GetColour();
540 case wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_TOP_COLOUR
:
541 return m_button_bar_hover_background_top_colour
;
542 case wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR
:
543 return m_button_bar_hover_background_top_gradient_colour
;
544 case wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_COLOUR
:
545 return m_button_bar_hover_background_colour
;
546 case wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_GRADIENT_COLOUR
:
547 return m_button_bar_hover_background_gradient_colour
;
548 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BORDER_COLOUR
:
549 return m_button_bar_active_border_pen
.GetColour();
550 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_TOP_COLOUR
:
551 return m_button_bar_active_background_top_colour
;
552 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR
:
553 return m_button_bar_active_background_top_gradient_colour
;
554 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_COLOUR
:
555 return m_button_bar_active_background_colour
;
556 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_GRADIENT_COLOUR
:
557 return m_button_bar_active_background_gradient_colour
;
558 case wxRIBBON_ART_GALLERY_BORDER_COLOUR
:
559 return m_gallery_border_pen
.GetColour();
560 case wxRIBBON_ART_GALLERY_HOVER_BACKGROUND_COLOUR
:
561 return m_gallery_hover_background_brush
.GetColour();
562 case wxRIBBON_ART_GALLERY_BUTTON_BACKGROUND_COLOUR
:
563 return m_gallery_button_background_colour
;
564 case wxRIBBON_ART_GALLERY_BUTTON_BACKGROUND_GRADIENT_COLOUR
:
565 return m_gallery_button_background_gradient_colour
;
566 case wxRIBBON_ART_GALLERY_BUTTON_BACKGROUND_TOP_COLOUR
:
567 return m_gallery_button_background_top_brush
.GetColour();
568 case wxRIBBON_ART_GALLERY_BUTTON_FACE_COLOUR
:
569 return m_gallery_button_face_colour
;
570 case wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_COLOUR
:
571 return m_gallery_button_hover_background_colour
;
572 case wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_GRADIENT_COLOUR
:
573 return m_gallery_button_hover_background_gradient_colour
;
574 case wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_TOP_COLOUR
:
575 return m_gallery_button_hover_background_top_brush
.GetColour();
576 case wxRIBBON_ART_GALLERY_BUTTON_HOVER_FACE_COLOUR
:
577 return m_gallery_button_face_colour
;
578 case wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_COLOUR
:
579 return m_gallery_button_active_background_colour
;
580 case wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_GRADIENT_COLOUR
:
581 return m_gallery_button_active_background_gradient_colour
;
582 case wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_TOP_COLOUR
:
583 return m_gallery_button_background_top_brush
.GetColour();
584 case wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_FACE_COLOUR
:
585 return m_gallery_button_active_face_colour
;
586 case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_COLOUR
:
587 return m_gallery_button_disabled_background_colour
;
588 case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_GRADIENT_COLOUR
:
589 return m_gallery_button_disabled_background_gradient_colour
;
590 case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_TOP_COLOUR
:
591 return m_gallery_button_disabled_background_top_brush
.GetColour();
592 case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_FACE_COLOUR
:
593 return m_gallery_button_disabled_face_colour
;
594 case wxRIBBON_ART_GALLERY_ITEM_BORDER_COLOUR
:
595 return m_gallery_item_border_pen
.GetColour();
596 case wxRIBBON_ART_TAB_CTRL_BACKGROUND_COLOUR
:
597 case wxRIBBON_ART_TAB_CTRL_BACKGROUND_GRADIENT_COLOUR
:
598 return m_tab_ctrl_background_brush
.GetColour();
599 case wxRIBBON_ART_TAB_LABEL_COLOUR
:
600 return m_tab_label_colour
;
601 case wxRIBBON_ART_TAB_SEPARATOR_COLOUR
:
602 return m_tab_separator_colour
;
603 case wxRIBBON_ART_TAB_SEPARATOR_GRADIENT_COLOUR
:
604 return m_tab_separator_gradient_colour
;
605 case wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_TOP_COLOUR
:
606 case wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR
:
607 return wxColour(0, 0, 0);
608 case wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_COLOUR
:
609 return m_tab_active_background_colour
;
610 case wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_GRADIENT_COLOUR
:
611 return m_tab_active_background_gradient_colour
;
612 case wxRIBBON_ART_TAB_HOVER_BACKGROUND_TOP_COLOUR
:
613 return m_tab_hover_background_top_colour
;
614 case wxRIBBON_ART_TAB_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR
:
615 return m_tab_hover_background_top_gradient_colour
;
616 case wxRIBBON_ART_TAB_HOVER_BACKGROUND_COLOUR
:
617 return m_tab_hover_background_colour
;
618 case wxRIBBON_ART_TAB_HOVER_BACKGROUND_GRADIENT_COLOUR
:
619 return m_tab_hover_background_gradient_colour
;
620 case wxRIBBON_ART_TAB_BORDER_COLOUR
:
621 return m_tab_border_pen
.GetColour();
622 case wxRIBBON_ART_PANEL_BORDER_COLOUR
:
623 return m_panel_border_pen
.GetColour();
624 case wxRIBBON_ART_PANEL_BORDER_GRADIENT_COLOUR
:
625 return m_panel_border_gradient_pen
.GetColour();
626 case wxRIBBON_ART_PANEL_MINIMISED_BORDER_COLOUR
:
627 return m_panel_minimised_border_pen
.GetColour();
628 case wxRIBBON_ART_PANEL_MINIMISED_BORDER_GRADIENT_COLOUR
:
629 return m_panel_minimised_border_gradient_pen
.GetColour();
630 case wxRIBBON_ART_PANEL_LABEL_BACKGROUND_COLOUR
:
631 case wxRIBBON_ART_PANEL_LABEL_BACKGROUND_GRADIENT_COLOUR
:
632 return m_panel_label_background_brush
.GetColour();
633 case wxRIBBON_ART_PANEL_LABEL_COLOUR
:
634 return m_panel_label_colour
;
635 case wxRIBBON_ART_PANEL_MINIMISED_LABEL_COLOUR
:
636 return m_panel_minimised_label_colour
;
637 case wxRIBBON_ART_PANEL_HOVER_LABEL_BACKGROUND_COLOUR
:
638 case wxRIBBON_ART_PANEL_HOVER_LABEL_BACKGROUND_GRADIENT_COLOUR
:
639 return m_panel_hover_label_background_brush
.GetColour();
640 case wxRIBBON_ART_PANEL_HOVER_LABEL_COLOUR
:
641 return m_panel_hover_label_colour
;
642 case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_TOP_COLOUR
:
643 return m_panel_active_background_top_colour
;
644 case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR
:
645 return m_panel_active_background_top_gradient_colour
;
646 case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_COLOUR
:
647 return m_panel_active_background_colour
;
648 case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_GRADIENT_COLOUR
:
649 return m_panel_active_background_gradient_colour
;
650 case wxRIBBON_ART_PAGE_BORDER_COLOUR
:
651 return m_page_border_pen
.GetColour();
652 case wxRIBBON_ART_PAGE_BACKGROUND_TOP_COLOUR
:
653 return m_page_background_top_colour
;
654 case wxRIBBON_ART_PAGE_BACKGROUND_TOP_GRADIENT_COLOUR
:
655 return m_page_background_top_gradient_colour
;
656 case wxRIBBON_ART_PAGE_BACKGROUND_COLOUR
:
657 return m_page_background_colour
;
658 case wxRIBBON_ART_PAGE_BACKGROUND_GRADIENT_COLOUR
:
659 return m_page_background_gradient_colour
;
660 case wxRIBBON_ART_PAGE_HOVER_BACKGROUND_TOP_COLOUR
:
661 return m_page_hover_background_top_colour
;
662 case wxRIBBON_ART_PAGE_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR
:
663 return m_page_hover_background_top_gradient_colour
;
664 case wxRIBBON_ART_PAGE_HOVER_BACKGROUND_COLOUR
:
665 return m_page_hover_background_colour
;
666 case wxRIBBON_ART_PAGE_HOVER_BACKGROUND_GRADIENT_COLOUR
:
667 return m_page_hover_background_gradient_colour
;
668 case wxRIBBON_ART_TOOLBAR_BORDER_COLOUR
:
669 case wxRIBBON_ART_TOOLBAR_HOVER_BORDER_COLOUR
:
670 return m_toolbar_border_pen
.GetColour();
671 case wxRIBBON_ART_TOOLBAR_FACE_COLOUR
:
672 return m_tool_face_colour
;
674 wxFAIL_MSG(wxT("Invalid Metric Ordinal"));
681 void wxRibbonMSWArtProvider::SetColour(int id
, const wxColor
& colour
)
685 case wxRIBBON_ART_BUTTON_BAR_LABEL_COLOUR
:
686 m_button_bar_label_colour
= colour
;
688 case wxRIBBON_ART_BUTTON_BAR_HOVER_BORDER_COLOUR
:
689 m_button_bar_hover_border_pen
.SetColour(colour
);
691 case wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_TOP_COLOUR
:
692 m_button_bar_hover_background_top_colour
= colour
;
694 case wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR
:
695 m_button_bar_hover_background_top_gradient_colour
= colour
;
697 case wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_COLOUR
:
698 m_button_bar_hover_background_colour
= colour
;
700 case wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_GRADIENT_COLOUR
:
701 m_button_bar_hover_background_gradient_colour
= colour
;
703 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BORDER_COLOUR
:
704 m_button_bar_active_border_pen
.SetColour(colour
);
706 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_TOP_COLOUR
:
707 m_button_bar_active_background_top_colour
= colour
;
709 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR
:
710 m_button_bar_active_background_top_gradient_colour
= colour
;
712 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_COLOUR
:
713 m_button_bar_active_background_colour
= colour
;
715 case wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_GRADIENT_COLOUR
:
716 m_button_bar_active_background_gradient_colour
= colour
;
718 case wxRIBBON_ART_GALLERY_BORDER_COLOUR
:
719 m_gallery_border_pen
.SetColour(colour
);
721 case wxRIBBON_ART_GALLERY_HOVER_BACKGROUND_COLOUR
:
722 m_gallery_hover_background_brush
.SetColour(colour
);
724 case wxRIBBON_ART_GALLERY_BUTTON_BACKGROUND_COLOUR
:
725 m_gallery_button_background_colour
= colour
;
727 case wxRIBBON_ART_GALLERY_BUTTON_BACKGROUND_GRADIENT_COLOUR
:
728 m_gallery_button_background_gradient_colour
= colour
;
730 case wxRIBBON_ART_GALLERY_BUTTON_BACKGROUND_TOP_COLOUR
:
731 m_gallery_button_background_top_brush
.SetColour(colour
);
733 case wxRIBBON_ART_GALLERY_BUTTON_FACE_COLOUR
:
734 m_gallery_button_face_colour
= colour
;
735 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
737 m_gallery_up_bitmap
[0] = wxRibbonLoadPixmap(gallery_left_xpm
, colour
);
738 m_gallery_down_bitmap
[0] = wxRibbonLoadPixmap(gallery_right_xpm
, colour
);
742 m_gallery_up_bitmap
[0] = wxRibbonLoadPixmap(gallery_up_xpm
, colour
);
743 m_gallery_down_bitmap
[0] = wxRibbonLoadPixmap(gallery_down_xpm
, colour
);
745 m_gallery_extension_bitmap
[0] = wxRibbonLoadPixmap(gallery_extension_xpm
, colour
);
747 case wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_COLOUR
:
748 m_gallery_button_hover_background_colour
= colour
;
750 case wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_GRADIENT_COLOUR
:
751 m_gallery_button_hover_background_gradient_colour
= colour
;
753 case wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_TOP_COLOUR
:
754 m_gallery_button_hover_background_top_brush
.SetColour(colour
);
756 case wxRIBBON_ART_GALLERY_BUTTON_HOVER_FACE_COLOUR
:
757 m_gallery_button_hover_face_colour
= colour
;
758 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
760 m_gallery_up_bitmap
[1] = wxRibbonLoadPixmap(gallery_left_xpm
, colour
);
761 m_gallery_down_bitmap
[1] = wxRibbonLoadPixmap(gallery_right_xpm
, colour
);
765 m_gallery_up_bitmap
[1] = wxRibbonLoadPixmap(gallery_up_xpm
, colour
);
766 m_gallery_down_bitmap
[1] = wxRibbonLoadPixmap(gallery_down_xpm
, colour
);
768 m_gallery_extension_bitmap
[1] = wxRibbonLoadPixmap(gallery_extension_xpm
, colour
);
770 case wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_COLOUR
:
771 m_gallery_button_active_background_colour
= colour
;
773 case wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_GRADIENT_COLOUR
:
774 m_gallery_button_active_background_gradient_colour
= colour
;
776 case wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_TOP_COLOUR
:
777 m_gallery_button_background_top_brush
.SetColour(colour
);
779 case wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_FACE_COLOUR
:
780 m_gallery_button_active_face_colour
= colour
;
781 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
783 m_gallery_up_bitmap
[2] = wxRibbonLoadPixmap(gallery_left_xpm
, colour
);
784 m_gallery_down_bitmap
[2] = wxRibbonLoadPixmap(gallery_right_xpm
, colour
);
788 m_gallery_up_bitmap
[2] = wxRibbonLoadPixmap(gallery_up_xpm
, colour
);
789 m_gallery_down_bitmap
[2] = wxRibbonLoadPixmap(gallery_down_xpm
, colour
);
791 m_gallery_extension_bitmap
[2] = wxRibbonLoadPixmap(gallery_extension_xpm
, colour
);
793 case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_COLOUR
:
794 m_gallery_button_disabled_background_colour
= colour
;
796 case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_GRADIENT_COLOUR
:
797 m_gallery_button_disabled_background_gradient_colour
= colour
;
799 case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_TOP_COLOUR
:
800 m_gallery_button_disabled_background_top_brush
.SetColour(colour
);
802 case wxRIBBON_ART_GALLERY_BUTTON_DISABLED_FACE_COLOUR
:
803 m_gallery_button_disabled_face_colour
= colour
;
804 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
806 m_gallery_up_bitmap
[3] = wxRibbonLoadPixmap(gallery_left_xpm
, colour
);
807 m_gallery_down_bitmap
[3] = wxRibbonLoadPixmap(gallery_right_xpm
, colour
);
811 m_gallery_up_bitmap
[3] = wxRibbonLoadPixmap(gallery_up_xpm
, colour
);
812 m_gallery_down_bitmap
[3] = wxRibbonLoadPixmap(gallery_down_xpm
, colour
);
814 m_gallery_extension_bitmap
[3] = wxRibbonLoadPixmap(gallery_extension_xpm
, colour
);
816 case wxRIBBON_ART_GALLERY_ITEM_BORDER_COLOUR
:
817 m_gallery_item_border_pen
.SetColour(colour
);
819 case wxRIBBON_ART_TAB_CTRL_BACKGROUND_COLOUR
:
820 case wxRIBBON_ART_TAB_CTRL_BACKGROUND_GRADIENT_COLOUR
:
821 m_tab_ctrl_background_brush
.SetColour(colour
);
822 m_cached_tab_separator_visibility
= -1.0;
824 case wxRIBBON_ART_TAB_LABEL_COLOUR
:
825 m_tab_label_colour
= colour
;
827 case wxRIBBON_ART_TAB_SEPARATOR_COLOUR
:
828 m_tab_separator_colour
= colour
;
829 m_cached_tab_separator_visibility
= -1.0;
831 case wxRIBBON_ART_TAB_SEPARATOR_GRADIENT_COLOUR
:
832 m_tab_separator_gradient_colour
= colour
;
833 m_cached_tab_separator_visibility
= -1.0;
835 case wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_TOP_COLOUR
:
836 case wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR
:
838 case wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_COLOUR
:
839 m_tab_active_background_colour
= colour
;
841 case wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_GRADIENT_COLOUR
:
842 m_tab_active_background_gradient_colour
= colour
;
844 case wxRIBBON_ART_TAB_HOVER_BACKGROUND_TOP_COLOUR
:
845 m_tab_hover_background_top_colour
= colour
;
847 case wxRIBBON_ART_TAB_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR
:
848 m_tab_hover_background_top_gradient_colour
= colour
;
850 case wxRIBBON_ART_TAB_HOVER_BACKGROUND_COLOUR
:
851 m_tab_hover_background_colour
= colour
;
853 case wxRIBBON_ART_TAB_HOVER_BACKGROUND_GRADIENT_COLOUR
:
854 m_tab_hover_background_gradient_colour
= colour
;
856 case wxRIBBON_ART_TAB_BORDER_COLOUR
:
857 m_tab_border_pen
.SetColour(colour
);
859 case wxRIBBON_ART_PANEL_BORDER_COLOUR
:
860 m_panel_border_pen
.SetColour(colour
);
862 case wxRIBBON_ART_PANEL_BORDER_GRADIENT_COLOUR
:
863 m_panel_border_gradient_pen
.SetColour(colour
);
865 case wxRIBBON_ART_PANEL_MINIMISED_BORDER_COLOUR
:
866 m_panel_minimised_border_pen
.SetColour(colour
);
868 case wxRIBBON_ART_PANEL_MINIMISED_BORDER_GRADIENT_COLOUR
:
869 m_panel_minimised_border_gradient_pen
.SetColour(colour
);
871 case wxRIBBON_ART_PANEL_LABEL_BACKGROUND_COLOUR
:
872 case wxRIBBON_ART_PANEL_LABEL_BACKGROUND_GRADIENT_COLOUR
:
873 m_panel_label_background_brush
.SetColour(colour
);
875 case wxRIBBON_ART_PANEL_LABEL_COLOUR
:
876 m_panel_label_colour
= colour
;
878 case wxRIBBON_ART_PANEL_HOVER_LABEL_BACKGROUND_COLOUR
:
879 case wxRIBBON_ART_PANEL_HOVER_LABEL_BACKGROUND_GRADIENT_COLOUR
:
880 m_panel_hover_label_background_brush
.SetColour(colour
);
882 case wxRIBBON_ART_PANEL_HOVER_LABEL_COLOUR
:
883 m_panel_hover_label_colour
= colour
;
885 case wxRIBBON_ART_PANEL_MINIMISED_LABEL_COLOUR
:
886 m_panel_minimised_label_colour
= colour
;
888 case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_TOP_COLOUR
:
889 m_panel_active_background_top_colour
= colour
;
891 case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR
:
892 m_panel_active_background_top_gradient_colour
= colour
;
894 case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_COLOUR
:
895 m_panel_active_background_colour
= colour
;
897 case wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_GRADIENT_COLOUR
:
898 m_panel_active_background_gradient_colour
= colour
;
900 case wxRIBBON_ART_PAGE_BORDER_COLOUR
:
901 m_page_border_pen
.SetColour(colour
);
903 case wxRIBBON_ART_PAGE_BACKGROUND_TOP_COLOUR
:
904 m_page_background_top_colour
= colour
;
906 case wxRIBBON_ART_PAGE_BACKGROUND_TOP_GRADIENT_COLOUR
:
907 m_page_background_top_gradient_colour
= colour
;
909 case wxRIBBON_ART_PAGE_BACKGROUND_COLOUR
:
910 m_page_background_colour
= colour
;
912 case wxRIBBON_ART_PAGE_BACKGROUND_GRADIENT_COLOUR
:
913 m_page_background_gradient_colour
= colour
;
915 case wxRIBBON_ART_PAGE_HOVER_BACKGROUND_TOP_COLOUR
:
916 m_page_hover_background_top_colour
= colour
;
918 case wxRIBBON_ART_PAGE_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR
:
919 m_page_hover_background_top_gradient_colour
= colour
;
921 case wxRIBBON_ART_PAGE_HOVER_BACKGROUND_COLOUR
:
922 m_page_hover_background_colour
= colour
;
924 case wxRIBBON_ART_PAGE_HOVER_BACKGROUND_GRADIENT_COLOUR
:
925 m_page_hover_background_gradient_colour
= colour
;
927 case wxRIBBON_ART_TOOLBAR_BORDER_COLOUR
:
928 case wxRIBBON_ART_TOOLBAR_HOVER_BORDER_COLOUR
:
929 m_toolbar_border_pen
.SetColour(colour
);
931 case wxRIBBON_ART_TOOLBAR_FACE_COLOUR
:
932 m_tool_face_colour
= colour
;
933 m_toolbar_drop_bitmap
= wxRibbonLoadPixmap(gallery_down_xpm
, colour
);
936 wxFAIL_MSG(wxT("Invalid Metric Ordinal"));
941 void wxRibbonMSWArtProvider::DrawTabCtrlBackground(
943 wxWindow
* WXUNUSED(wnd
),
946 dc
.SetPen(*wxTRANSPARENT_PEN
);
947 dc
.SetBrush(m_tab_ctrl_background_brush
);
948 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
, rect
.height
);
950 dc
.SetPen(m_page_border_pen
);
953 dc
.DrawLine(rect
.x
+ 3, rect
.y
+ rect
.height
- 1, rect
.x
+ rect
.width
- 3, rect
.y
+ rect
.height
- 1);
957 dc
.DrawLine(rect
.x
, rect
.y
+ rect
.height
- 1, rect
.x
+ rect
.width
, rect
.y
+ rect
.height
- 1);
961 void wxRibbonMSWArtProvider::DrawTab(
963 wxWindow
* WXUNUSED(wnd
),
964 const wxRibbonPageTabInfo
& tab
)
966 if(tab
.rect
.height
<= 2)
969 if(tab
.active
|| tab
.hovered
)
973 wxRect
background(tab
.rect
);
977 background
.width
-= 4;
978 background
.height
-= 2;
980 dc
.GradientFillLinear(background
, m_tab_active_background_colour
,
981 m_tab_active_background_gradient_colour
, wxSOUTH
);
983 // TODO: active and hovered
987 wxRect
background(tab
.rect
);
991 background
.width
-= 4;
992 background
.height
-= 3;
993 int h
= background
.height
;
994 background
.height
/= 2;
995 dc
.GradientFillLinear(background
,
996 m_tab_hover_background_top_colour
,
997 m_tab_hover_background_top_gradient_colour
, wxSOUTH
);
999 background
.y
+= background
.height
;
1000 background
.height
= h
- background
.height
;
1001 dc
.GradientFillLinear(background
, m_tab_hover_background_colour
,
1002 m_tab_hover_background_gradient_colour
, wxSOUTH
);
1005 wxPoint border_points
[6];
1006 border_points
[0] = wxPoint(1, tab
.rect
.height
- 2);
1007 border_points
[1] = wxPoint(1, 3);
1008 border_points
[2] = wxPoint(3, 1);
1009 border_points
[3] = wxPoint(tab
.rect
.width
- 4, 1);
1010 border_points
[4] = wxPoint(tab
.rect
.width
- 2, 3);
1011 border_points
[5] = wxPoint(tab
.rect
.width
- 2, tab
.rect
.height
- 1);
1013 dc
.SetPen(m_tab_border_pen
);
1014 dc
.DrawLines(sizeof(border_points
)/sizeof(wxPoint
), border_points
, tab
.rect
.x
, tab
.rect
.y
);
1018 // Give the tab a curved outward border at the bottom
1019 dc
.DrawPoint(tab
.rect
.x
, tab
.rect
.y
+ tab
.rect
.height
- 2);
1020 dc
.DrawPoint(tab
.rect
.x
+ tab
.rect
.width
- 1, tab
.rect
.y
+ tab
.rect
.height
- 2);
1022 wxPen
p(m_tab_active_background_gradient_colour
);
1025 // Technically the first two points are the wrong colour, but they're near enough
1026 dc
.DrawPoint(tab
.rect
.x
+ 1, tab
.rect
.y
+ tab
.rect
.height
- 2);
1027 dc
.DrawPoint(tab
.rect
.x
+ tab
.rect
.width
- 2, tab
.rect
.y
+ tab
.rect
.height
- 2);
1028 dc
.DrawPoint(tab
.rect
.x
+ 1, tab
.rect
.y
+ tab
.rect
.height
- 1);
1029 dc
.DrawPoint(tab
.rect
.x
, tab
.rect
.y
+ tab
.rect
.height
- 1);
1030 dc
.DrawPoint(tab
.rect
.x
+ tab
.rect
.width
- 2, tab
.rect
.y
+ tab
.rect
.height
- 1);
1031 dc
.DrawPoint(tab
.rect
.x
+ tab
.rect
.width
- 1, tab
.rect
.y
+ tab
.rect
.height
- 1);
1035 if(m_flags
& wxRIBBON_BAR_SHOW_PAGE_ICONS
)
1037 wxBitmap icon
= tab
.page
->GetIcon();
1040 int x
= tab
.rect
.x
+ 4;
1041 if((m_flags
& wxRIBBON_BAR_SHOW_PAGE_LABELS
) == 0)
1042 x
= tab
.rect
.x
+ (tab
.rect
.width
- icon
.GetWidth()) / 2;
1043 dc
.DrawBitmap(icon
, x
, tab
.rect
.y
+ 1 + (tab
.rect
.height
- 1 -
1044 icon
.GetHeight()) / 2, true);
1047 if(m_flags
& wxRIBBON_BAR_SHOW_PAGE_LABELS
)
1049 wxString label
= tab
.page
->GetLabel();
1050 if(!label
.IsEmpty())
1052 dc
.SetFont(m_tab_label_font
);
1053 dc
.SetTextForeground(m_tab_label_colour
);
1054 dc
.SetBackgroundMode(wxTRANSPARENT
);
1058 dc
.GetTextExtent(label
, &text_width
, &text_height
);
1059 int width
= tab
.rect
.width
- 5;
1060 int x
= tab
.rect
.x
+ 3;
1061 if(m_flags
& wxRIBBON_BAR_SHOW_PAGE_ICONS
)
1063 x
+= 3 + tab
.page
->GetIcon().GetWidth();
1064 width
-= 3 + tab
.page
->GetIcon().GetWidth();
1066 int y
= tab
.rect
.y
+ (tab
.rect
.height
- text_height
) / 2;
1068 if(width
<= text_width
)
1070 dc
.SetClippingRegion(x
, tab
.rect
.y
, width
, tab
.rect
.height
);
1071 dc
.DrawText(label
, x
, y
);
1075 dc
.DrawText(label
, x
+ (width
- text_width
) / 2 + 1, y
);
1081 void wxRibbonMSWArtProvider::DrawTabSeparator(
1087 if(visibility
<= 0.0)
1091 if(visibility
> 1.0)
1096 // The tab separator is relatively expensive to draw (for its size), and is
1097 // usually drawn multiple times sequentially (in different positions), so it
1098 // makes sense to draw it once and cache it.
1099 if(!m_cached_tab_separator
.IsOk() || m_cached_tab_separator
.GetSize() != rect
.GetSize() || visibility
!= m_cached_tab_separator_visibility
)
1101 wxRect
size(rect
.GetSize());
1102 ReallyDrawTabSeparator(wnd
, size
, visibility
);
1104 dc
.DrawBitmap(m_cached_tab_separator
, rect
.x
, rect
.y
, false);
1107 void wxRibbonMSWArtProvider::ReallyDrawTabSeparator(wxWindow
* wnd
, const wxRect
& rect
, double visibility
)
1109 if(!m_cached_tab_separator
.IsOk() || m_cached_tab_separator
.GetSize() != rect
.GetSize())
1111 m_cached_tab_separator
= wxBitmap(rect
.GetSize());
1114 wxMemoryDC
dc(m_cached_tab_separator
);
1115 DrawTabCtrlBackground(dc
, wnd
, rect
);
1117 wxCoord x
= rect
.x
+ rect
.width
/ 2;
1118 double h
= (double)(rect
.height
- 1);
1120 double r1
= m_tab_ctrl_background_brush
.GetColour().Red() * (1.0 - visibility
) + 0.5;
1121 double g1
= m_tab_ctrl_background_brush
.GetColour().Green() * (1.0 - visibility
) + 0.5;
1122 double b1
= m_tab_ctrl_background_brush
.GetColour().Blue() * (1.0 - visibility
) + 0.5;
1123 double r2
= m_tab_separator_colour
.Red();
1124 double g2
= m_tab_separator_colour
.Green();
1125 double b2
= m_tab_separator_colour
.Blue();
1126 double r3
= m_tab_separator_gradient_colour
.Red();
1127 double g3
= m_tab_separator_gradient_colour
.Green();
1128 double b3
= m_tab_separator_gradient_colour
.Blue();
1130 for(int i
= 0; i
< rect
.height
- 1; ++i
)
1132 double p
= ((double)i
)/h
;
1134 double r
= (p
* r3
+ (1.0 - p
) * r2
) * visibility
+ r1
;
1135 double g
= (p
* g3
+ (1.0 - p
) * g2
) * visibility
+ g1
;
1136 double b
= (p
* b3
+ (1.0 - p
) * b2
) * visibility
+ b1
;
1138 wxPen
P(wxColour((unsigned char)r
, (unsigned char)g
, (unsigned char)b
));
1140 dc
.DrawPoint(x
, rect
.y
+ i
);
1143 m_cached_tab_separator_visibility
= visibility
;
1146 void wxRibbonMSWArtProvider::DrawPartialPageBackground(wxDC
& dc
,
1147 wxWindow
* WXUNUSED(wnd
), const wxRect
& rect
, wxRibbonPage
* page
,
1148 wxPoint offset
, bool hovered
)
1150 wxRect
background(page
->GetSize());
1151 page
->AdjustRectToIncludeScrollButtons(&background
);
1152 background
.height
-= 2;
1153 // Page background isn't dependant upon the width of the page
1154 // (at least not the part of it intended to be painted by this
1155 // function). Set to wider than the page itself for when externally
1156 // expanded panels need a background - the expanded panel can be wider
1159 background
.width
= INT_MAX
;
1161 // upper_rect, lower_rect, paint_rect are all in page co-ordinates
1162 wxRect
upper_rect(background
);
1163 upper_rect
.height
/= 5;
1165 wxRect
lower_rect(background
);
1166 lower_rect
.y
+= upper_rect
.height
;
1167 lower_rect
.height
-= upper_rect
.height
;
1169 wxRect
paint_rect(rect
);
1170 paint_rect
.x
+= offset
.x
;
1171 paint_rect
.y
+= offset
.y
;
1173 wxColour bg_top
, bg_top_grad
, bg_btm
, bg_btm_grad
;
1176 bg_top
= m_page_hover_background_top_colour
;
1177 bg_top_grad
= m_page_hover_background_top_gradient_colour
;
1178 bg_btm
= m_page_hover_background_colour
;
1179 bg_btm_grad
= m_page_hover_background_gradient_colour
;
1183 bg_top
= m_page_background_top_colour
;
1184 bg_top_grad
= m_page_background_top_gradient_colour
;
1185 bg_btm
= m_page_background_colour
;
1186 bg_btm_grad
= m_page_background_gradient_colour
;
1189 if(paint_rect
.Intersects(upper_rect
))
1191 wxRect
rect(upper_rect
);
1192 rect
.Intersect(paint_rect
);
1195 wxColour
starting_colour(wxRibbonInterpolateColour(bg_top
, bg_top_grad
,
1196 paint_rect
.y
, upper_rect
.y
, upper_rect
.y
+ upper_rect
.height
));
1197 wxColour
ending_colour(wxRibbonInterpolateColour(bg_top
, bg_top_grad
,
1198 paint_rect
.y
+ paint_rect
.height
, upper_rect
.y
,
1199 upper_rect
.y
+ upper_rect
.height
));
1200 dc
.GradientFillLinear(rect
, starting_colour
, ending_colour
, wxSOUTH
);
1203 if(paint_rect
.Intersects(lower_rect
))
1205 wxRect
rect(lower_rect
);
1206 rect
.Intersect(paint_rect
);
1209 wxColour
starting_colour(wxRibbonInterpolateColour(bg_btm
, bg_btm_grad
,
1210 paint_rect
.y
, lower_rect
.y
, lower_rect
.y
+ lower_rect
.height
));
1211 wxColour
ending_colour(wxRibbonInterpolateColour(bg_btm
, bg_btm_grad
,
1212 paint_rect
.y
+ paint_rect
.height
,
1213 lower_rect
.y
, lower_rect
.y
+ lower_rect
.height
));
1214 dc
.GradientFillLinear(rect
, starting_colour
, ending_colour
, wxSOUTH
);
1218 void wxRibbonMSWArtProvider::DrawPageBackground(
1220 wxWindow
* WXUNUSED(wnd
),
1223 dc
.SetPen(*wxTRANSPARENT_PEN
);
1224 dc
.SetBrush(m_tab_ctrl_background_brush
);
1230 dc
.DrawRectangle(edge
.x
, edge
.y
, edge
.width
, edge
.height
);
1232 edge
.x
+= rect
.width
- 2;
1233 dc
.DrawRectangle(edge
.x
, edge
.y
, edge
.width
, edge
.height
);
1237 edge
.y
+= (rect
.height
- edge
.height
);
1238 dc
.DrawRectangle(edge
.x
, edge
.y
, edge
.width
, edge
.height
);
1242 wxRect
background(rect
);
1244 background
.width
-= 4;
1245 background
.height
-= 2;
1247 background
.height
/= 5;
1248 dc
.GradientFillLinear(background
, m_page_background_top_colour
,
1249 m_page_background_top_gradient_colour
, wxSOUTH
);
1251 background
.y
+= background
.height
;
1252 background
.height
= rect
.height
- 2 - background
.height
;
1253 dc
.GradientFillLinear(background
, m_page_background_colour
,
1254 m_page_background_gradient_colour
, wxSOUTH
);
1258 wxPoint border_points
[8];
1259 border_points
[0] = wxPoint(2, 0);
1260 border_points
[1] = wxPoint(1, 1);
1261 border_points
[2] = wxPoint(1, rect
.height
- 4);
1262 border_points
[3] = wxPoint(3, rect
.height
- 2);
1263 border_points
[4] = wxPoint(rect
.width
- 4, rect
.height
- 2);
1264 border_points
[5] = wxPoint(rect
.width
- 2, rect
.height
- 4);
1265 border_points
[6] = wxPoint(rect
.width
- 2, 1);
1266 border_points
[7] = wxPoint(rect
.width
- 4, -1);
1268 dc
.SetPen(m_page_border_pen
);
1269 dc
.DrawLines(sizeof(border_points
)/sizeof(wxPoint
), border_points
, rect
.x
, rect
.y
);
1273 void wxRibbonMSWArtProvider::DrawScrollButton(
1275 wxWindow
* WXUNUSED(wnd
),
1276 const wxRect
& rect_
,
1281 if((style
& wxRIBBON_SCROLL_BTN_FOR_MASK
) == wxRIBBON_SCROLL_BTN_FOR_PAGE
)
1283 // Page scroll buttons do not have the luxury of rendering on top of anything
1284 // else, and their size includes some padding, hence the background painting
1285 // and size adjustment.
1286 dc
.SetPen(*wxTRANSPARENT_PEN
);
1287 dc
.SetBrush(m_tab_ctrl_background_brush
);
1288 dc
.DrawRectangle(rect
);
1289 dc
.SetClippingRegion(rect
);
1290 switch(style
& wxRIBBON_SCROLL_BTN_DIRECTION_MASK
)
1292 case wxRIBBON_SCROLL_BTN_LEFT
:
1294 case wxRIBBON_SCROLL_BTN_RIGHT
:
1298 case wxRIBBON_SCROLL_BTN_UP
:
1304 case wxRIBBON_SCROLL_BTN_DOWN
:
1313 wxRect
background(rect
);
1316 background
.width
-= 2;
1317 background
.height
-= 2;
1319 if(style
& wxRIBBON_SCROLL_BTN_UP
)
1320 background
.height
/= 2;
1322 background
.height
/= 5;
1323 dc
.GradientFillLinear(background
, m_page_background_top_colour
,
1324 m_page_background_top_gradient_colour
, wxSOUTH
);
1326 background
.y
+= background
.height
;
1327 background
.height
= rect
.height
- 2 - background
.height
;
1328 dc
.GradientFillLinear(background
, m_page_background_colour
,
1329 m_page_background_gradient_colour
, wxSOUTH
);
1333 wxPoint border_points
[7];
1334 switch(style
& wxRIBBON_SCROLL_BTN_DIRECTION_MASK
)
1336 case wxRIBBON_SCROLL_BTN_LEFT
:
1337 border_points
[0] = wxPoint(2, 0);
1338 border_points
[1] = wxPoint(rect
.width
- 1, 0);
1339 border_points
[2] = wxPoint(rect
.width
- 1, rect
.height
- 1);
1340 border_points
[3] = wxPoint(2, rect
.height
- 1);
1341 border_points
[4] = wxPoint(0, rect
.height
- 3);
1342 border_points
[5] = wxPoint(0, 2);
1344 case wxRIBBON_SCROLL_BTN_RIGHT
:
1345 border_points
[0] = wxPoint(0, 0);
1346 border_points
[1] = wxPoint(rect
.width
- 3, 0);
1347 border_points
[2] = wxPoint(rect
.width
- 1, 2);
1348 border_points
[3] = wxPoint(rect
.width
- 1, rect
.height
- 3);
1349 border_points
[4] = wxPoint(rect
.width
- 3, rect
.height
- 1);
1350 border_points
[5] = wxPoint(0, rect
.height
- 1);
1352 case wxRIBBON_SCROLL_BTN_UP
:
1353 border_points
[0] = wxPoint(2, 0);
1354 border_points
[1] = wxPoint(rect
.width
- 3, 0);
1355 border_points
[2] = wxPoint(rect
.width
- 1, 2);
1356 border_points
[3] = wxPoint(rect
.width
- 1, rect
.height
- 1);
1357 border_points
[4] = wxPoint(0, rect
.height
- 1);
1358 border_points
[5] = wxPoint(0, 2);
1360 case wxRIBBON_SCROLL_BTN_DOWN
:
1361 border_points
[0] = wxPoint(0, 0);
1362 border_points
[1] = wxPoint(rect
.width
- 1, 0);
1363 border_points
[2] = wxPoint(rect
.width
- 1, rect
.height
- 3);
1364 border_points
[3] = wxPoint(rect
.width
- 3, rect
.height
- 1);
1365 border_points
[4] = wxPoint(2, rect
.height
- 1);
1366 border_points
[5] = wxPoint(0, rect
.height
- 3);
1369 border_points
[6] = border_points
[0];
1371 dc
.SetPen(m_page_border_pen
);
1372 dc
.DrawLines(sizeof(border_points
)/sizeof(wxPoint
), border_points
, rect
.x
, rect
.y
);
1376 // NB: Code for handling hovered/active state is temporary
1377 wxPoint arrow_points
[3];
1378 switch(style
& wxRIBBON_SCROLL_BTN_DIRECTION_MASK
)
1380 case wxRIBBON_SCROLL_BTN_LEFT
:
1381 arrow_points
[0] = wxPoint(rect
.width
/ 2 - 2, rect
.height
/ 2);
1382 if(style
& wxRIBBON_SCROLL_BTN_ACTIVE
)
1383 arrow_points
[0].y
+= 1;
1384 arrow_points
[1] = arrow_points
[0] + wxPoint(3, -3);
1385 arrow_points
[2] = arrow_points
[0] + wxPoint(3, 3);
1387 case wxRIBBON_SCROLL_BTN_RIGHT
:
1388 arrow_points
[0] = wxPoint(rect
.width
/ 2 + 2, rect
.height
/ 2);
1389 if(style
& wxRIBBON_SCROLL_BTN_ACTIVE
)
1390 arrow_points
[0].y
+= 1;
1391 arrow_points
[1] = arrow_points
[0] - wxPoint(3, 3);
1392 arrow_points
[2] = arrow_points
[0] - wxPoint(3, -3);
1394 case wxRIBBON_SCROLL_BTN_UP
:
1395 arrow_points
[0] = wxPoint(rect
.width
/ 2, rect
.height
/ 2 - 2);
1396 if(style
& wxRIBBON_SCROLL_BTN_ACTIVE
)
1397 arrow_points
[0].y
+= 1;
1398 arrow_points
[1] = arrow_points
[0] + wxPoint( 3, 3);
1399 arrow_points
[2] = arrow_points
[0] + wxPoint(-3, 3);
1401 case wxRIBBON_SCROLL_BTN_DOWN
:
1402 arrow_points
[0] = wxPoint(rect
.width
/ 2, rect
.height
/ 2 + 2);
1403 if(style
& wxRIBBON_SCROLL_BTN_ACTIVE
)
1404 arrow_points
[0].y
+= 1;
1405 arrow_points
[1] = arrow_points
[0] - wxPoint( 3, 3);
1406 arrow_points
[2] = arrow_points
[0] - wxPoint(-3, 3);
1410 dc
.SetPen(*wxTRANSPARENT_PEN
);
1411 wxBrush
B(style
& wxRIBBON_SCROLL_BTN_HOVERED
? m_tab_active_background_colour
: m_tab_label_colour
);
1413 dc
.DrawPolygon(sizeof(arrow_points
)/sizeof(wxPoint
), arrow_points
, rect
.x
, rect
.y
);
1417 void wxRibbonMSWArtProvider::DrawDropdownArrow(wxDC
& dc
, int x
, int y
, const wxColour
& colour
)
1419 wxPoint arrow_points
[3];
1420 wxBrush
brush(colour
);
1421 arrow_points
[0] = wxPoint(1, 2);
1422 arrow_points
[1] = arrow_points
[0] + wxPoint(-3, -3);
1423 arrow_points
[2] = arrow_points
[0] + wxPoint( 3, -3);
1424 dc
.SetPen(*wxTRANSPARENT_PEN
);
1426 dc
.DrawPolygon(sizeof(arrow_points
)/sizeof(wxPoint
), arrow_points
, x
, y
);
1429 void wxRibbonMSWArtProvider::RemovePanelPadding(wxRect
* rect
)
1431 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
1443 void wxRibbonMSWArtProvider::DrawPanelBackground(
1448 DrawPartialPageBackground(dc
, wnd
, rect
, false);
1450 wxRect
true_rect(rect
);
1451 RemovePanelPadding(&true_rect
);
1455 dc
.SetFont(m_panel_label_font
);
1456 dc
.SetPen(*wxTRANSPARENT_PEN
);
1457 if(wnd
->IsHovered())
1459 dc
.SetBrush(m_panel_hover_label_background_brush
);
1460 dc
.SetTextForeground(m_panel_hover_label_colour
);
1464 dc
.SetBrush(m_panel_label_background_brush
);
1465 dc
.SetTextForeground(m_panel_label_colour
);
1468 wxRect
label_rect(true_rect
);
1469 wxString label
= wnd
->GetLabel();
1470 bool clip_label
= false;
1471 wxSize
label_size(dc
.GetTextExtent(label
));
1473 label_rect
.SetX(label_rect
.GetX() + 1);
1474 label_rect
.SetWidth(label_rect
.GetWidth() - 2);
1475 label_rect
.SetHeight(label_size
.GetHeight() + 2);
1476 label_rect
.SetY(true_rect
.GetBottom() - label_rect
.GetHeight());
1477 label_height
= label_rect
.GetHeight();
1479 if(label_size
.GetWidth() > label_rect
.GetWidth())
1481 // Test if there is enough length for 3 letters and ...
1482 wxString new_label
= label
.Mid(0, 3) + wxT("...");
1483 label_size
= dc
.GetTextExtent(new_label
);
1484 if(label_size
.GetWidth() > label_rect
.GetWidth())
1486 // Not enough room for three characters and ...
1487 // Display the entire label and just crop it
1492 // Room for some characters and ...
1493 // Display as many characters as possible and append ...
1494 for(size_t len
= label
.Len() - 1; len
>= 3; --len
)
1496 new_label
= label
.Mid(0, len
) + wxT("...");
1497 label_size
= dc
.GetTextExtent(new_label
);
1498 if(label_size
.GetWidth() <= label_rect
.GetWidth())
1507 dc
.DrawRectangle(label_rect
.GetX(), label_rect
.GetY(), label_rect
.GetWidth(), label_rect
.GetHeight());
1510 wxDCClipper
clip(dc
, label_rect
);
1511 dc
.DrawText(label
, label_rect
.x
, label_rect
.y
+
1512 (label_rect
.GetHeight() - label_size
.GetHeight()) / 2);
1516 dc
.DrawText(label
, label_rect
.x
+
1517 (label_rect
.GetWidth() - label_size
.GetWidth()) / 2,
1519 (label_rect
.GetHeight() - label_size
.GetHeight()) / 2);
1523 if(wnd
->IsHovered())
1525 wxRect
client_rect(true_rect
);
1527 client_rect
.width
-= 2;
1529 client_rect
.height
-= 2 + label_height
;
1530 DrawPartialPageBackground(dc
, wnd
, client_rect
, true);
1533 DrawPanelBorder(dc
, true_rect
, m_panel_border_pen
, m_panel_border_gradient_pen
);
1536 void wxRibbonMSWArtProvider::DrawGalleryBackground(
1538 wxRibbonGallery
* wnd
,
1541 DrawPartialPageBackground(dc
, wnd
, rect
);
1543 if(wnd
->IsHovered())
1545 dc
.SetPen(*wxTRANSPARENT_PEN
);
1546 dc
.SetBrush(m_gallery_hover_background_brush
);
1547 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
1549 dc
.DrawRectangle(rect
.x
+ 1, rect
.y
+ 1, rect
.width
- 2,
1554 dc
.DrawRectangle(rect
.x
+ 1, rect
.y
+ 1, rect
.width
- 16,
1559 dc
.SetPen(m_gallery_border_pen
);
1561 dc
.DrawLine(rect
.x
+ 1, rect
.y
, rect
.x
+ rect
.width
- 1, rect
.y
);
1562 dc
.DrawLine(rect
.x
, rect
.y
+ 1, rect
.x
, rect
.y
+ rect
.height
- 1);
1563 dc
.DrawLine(rect
.x
+ 1, rect
.y
+ rect
.height
- 1, rect
.x
+ rect
.width
- 1,
1564 rect
.y
+ rect
.height
- 1);
1565 dc
.DrawLine(rect
.x
+ rect
.width
- 1, rect
.y
+ 1, rect
.x
+ rect
.width
- 1,
1566 rect
.y
+ rect
.height
- 1);
1568 DrawGalleryBackgroundCommon(dc
, wnd
, rect
);
1571 void wxRibbonMSWArtProvider::DrawGalleryBackgroundCommon(wxDC
& dc
,
1572 wxRibbonGallery
* wnd
,
1575 wxRect up_btn
, down_btn
, ext_btn
;
1577 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
1579 // Divider between items and buttons
1580 dc
.DrawLine(rect
.x
, rect
.y
+ rect
.height
- 15, rect
.x
+ rect
.width
,
1581 rect
.y
+ rect
.height
- 15);
1583 up_btn
= wxRect(rect
.x
, rect
.y
+ rect
.height
- 15, rect
.width
/ 3, 15);
1585 down_btn
= wxRect(up_btn
.GetRight() + 1, up_btn
.GetTop(),
1586 up_btn
.GetWidth(), up_btn
.GetHeight());
1587 dc
.DrawLine(down_btn
.GetLeft(), down_btn
.GetTop(), down_btn
.GetLeft(),
1588 down_btn
.GetBottom());
1590 ext_btn
= wxRect(down_btn
.GetRight() + 1, up_btn
.GetTop(), rect
.width
-
1591 up_btn
.GetWidth() - down_btn
.GetWidth() - 1, up_btn
.GetHeight());
1592 dc
.DrawLine(ext_btn
.GetLeft(), ext_btn
.GetTop(), ext_btn
.GetLeft(),
1593 ext_btn
.GetBottom());
1597 // Divider between items and buttons
1598 dc
.DrawLine(rect
.x
+ rect
.width
- 15, rect
.y
, rect
.x
+ rect
.width
- 15,
1599 rect
.y
+ rect
.height
);
1601 up_btn
= wxRect(rect
.x
+ rect
.width
- 15, rect
.y
, 15, rect
.height
/ 3);
1603 down_btn
= wxRect(up_btn
.GetLeft(), up_btn
.GetBottom() + 1,
1604 up_btn
.GetWidth(), up_btn
.GetHeight());
1605 dc
.DrawLine(down_btn
.GetLeft(), down_btn
.GetTop(), down_btn
.GetRight(),
1608 ext_btn
= wxRect(up_btn
.GetLeft(), down_btn
.GetBottom() + 1, up_btn
.GetWidth(),
1609 rect
.height
- up_btn
.GetHeight() - down_btn
.GetHeight() - 1);
1610 dc
.DrawLine(ext_btn
.GetLeft(), ext_btn
.GetTop(), ext_btn
.GetRight(),
1614 DrawGalleryButton(dc
, up_btn
, wnd
->GetUpButtonState(),
1615 m_gallery_up_bitmap
);
1616 DrawGalleryButton(dc
, down_btn
, wnd
->GetDownButtonState(),
1617 m_gallery_down_bitmap
);
1618 DrawGalleryButton(dc
, ext_btn
, wnd
->GetExtensionButtonState(),
1619 m_gallery_extension_bitmap
);
1622 void wxRibbonMSWArtProvider::DrawGalleryButton(wxDC
& dc
,
1624 wxRibbonGalleryButtonState state
,
1627 wxBitmap btn_bitmap
;
1628 wxBrush btn_top_brush
;
1629 wxColour btn_colour
;
1630 wxColour btn_grad_colour
;
1633 case wxRIBBON_GALLERY_BUTTON_NORMAL
:
1634 btn_top_brush
= m_gallery_button_background_top_brush
;
1635 btn_colour
= m_gallery_button_background_colour
;
1636 btn_grad_colour
= m_gallery_button_background_gradient_colour
;
1637 btn_bitmap
= bitmaps
[0];
1639 case wxRIBBON_GALLERY_BUTTON_HOVERED
:
1640 btn_top_brush
= m_gallery_button_hover_background_top_brush
;
1641 btn_colour
= m_gallery_button_hover_background_colour
;
1642 btn_grad_colour
= m_gallery_button_hover_background_gradient_colour
;
1643 btn_bitmap
= bitmaps
[1];
1645 case wxRIBBON_GALLERY_BUTTON_ACTIVE
:
1646 btn_top_brush
= m_gallery_button_active_background_top_brush
;
1647 btn_colour
= m_gallery_button_active_background_colour
;
1648 btn_grad_colour
= m_gallery_button_active_background_gradient_colour
;
1649 btn_bitmap
= bitmaps
[2];
1651 case wxRIBBON_GALLERY_BUTTON_DISABLED
:
1652 btn_top_brush
= m_gallery_button_disabled_background_top_brush
;
1653 btn_colour
= m_gallery_button_disabled_background_colour
;
1654 btn_grad_colour
= m_gallery_button_disabled_background_gradient_colour
;
1655 btn_bitmap
= bitmaps
[3];
1661 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
1672 dc
.SetPen(*wxTRANSPARENT_PEN
);
1673 dc
.SetBrush(btn_top_brush
);
1674 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
, rect
.height
/ 2);
1677 lower
.height
= (lower
.height
+ 1) / 2;
1678 lower
.y
+= rect
.height
- lower
.height
;
1679 dc
.GradientFillLinear(lower
, btn_colour
, btn_grad_colour
, wxSOUTH
);
1681 dc
.DrawBitmap(btn_bitmap
, rect
.x
+ rect
.width
/ 2 - 2, lower
.y
- 2, true);
1684 void wxRibbonMSWArtProvider::DrawGalleryItemBackground(
1686 wxRibbonGallery
* wnd
,
1688 wxRibbonGalleryItem
* item
)
1690 if(wnd
->GetHoveredItem() != item
&& wnd
->GetActiveItem() != item
&&
1691 wnd
->GetSelection() != item
)
1694 dc
.SetPen(m_gallery_item_border_pen
);
1695 dc
.DrawLine(rect
.x
+ 1, rect
.y
, rect
.x
+ rect
.width
- 1, rect
.y
);
1696 dc
.DrawLine(rect
.x
, rect
.y
+ 1, rect
.x
, rect
.y
+ rect
.height
- 1);
1697 dc
.DrawLine(rect
.x
+ 1, rect
.y
+ rect
.height
- 1, rect
.x
+ rect
.width
- 1,
1698 rect
.y
+ rect
.height
- 1);
1699 dc
.DrawLine(rect
.x
+ rect
.width
- 1, rect
.y
+ 1, rect
.x
+ rect
.width
- 1,
1700 rect
.y
+ rect
.height
- 1);
1704 wxColour bg_gradient_colour
;
1706 if(wnd
->GetActiveItem() == item
|| wnd
->GetSelection() == item
)
1708 top_brush
= m_gallery_button_active_background_top_brush
;
1709 bg_colour
= m_gallery_button_active_background_colour
;
1710 bg_gradient_colour
= m_gallery_button_active_background_gradient_colour
;
1714 top_brush
= m_gallery_button_hover_background_top_brush
;
1715 bg_colour
= m_gallery_button_hover_background_colour
;
1716 bg_gradient_colour
= m_gallery_button_hover_background_gradient_colour
;
1724 dc
.SetPen(*wxTRANSPARENT_PEN
);
1725 dc
.SetBrush(top_brush
);
1726 dc
.DrawRectangle(upper
.x
, upper
.y
, upper
.width
, upper
.height
);
1728 wxRect
lower(upper
);
1729 lower
.y
+= lower
.height
;
1730 lower
.height
= rect
.height
- 2 - lower
.height
;
1731 dc
.GradientFillLinear(lower
, bg_colour
, bg_gradient_colour
, wxSOUTH
);
1734 void wxRibbonMSWArtProvider::DrawPanelBorder(wxDC
& dc
, const wxRect
& rect
,
1735 wxPen
& primary_colour
,
1736 wxPen
& secondary_colour
)
1738 wxPoint border_points
[9];
1739 border_points
[0] = wxPoint(2, 0);
1740 border_points
[1] = wxPoint(rect
.width
- 3, 0);
1741 border_points
[2] = wxPoint(rect
.width
- 1, 2);
1742 border_points
[3] = wxPoint(rect
.width
- 1, rect
.height
- 3);
1743 border_points
[4] = wxPoint(rect
.width
- 3, rect
.height
- 1);
1744 border_points
[5] = wxPoint(2, rect
.height
- 1);
1745 border_points
[6] = wxPoint(0, rect
.height
- 3);
1746 border_points
[7] = wxPoint(0, 2);
1748 if(primary_colour
.GetColour() == secondary_colour
.GetColour())
1750 border_points
[8] = border_points
[0];
1751 dc
.SetPen(primary_colour
);
1752 dc
.DrawLines(sizeof(border_points
)/sizeof(wxPoint
), border_points
, rect
.x
, rect
.y
);
1756 dc
.SetPen(primary_colour
);
1757 dc
.DrawLines(3, border_points
, rect
.x
, rect
.y
);
1759 #define SingleLine(start, finish) \
1760 dc.DrawLine(start.x + rect.x, start.y + rect.y, finish.x + rect.x, finish.y + rect.y)
1762 SingleLine(border_points
[0], border_points
[7]);
1763 dc
.SetPen(secondary_colour
);
1764 dc
.DrawLines(3, border_points
+ 4, rect
.x
, rect
.y
);
1765 SingleLine(border_points
[4], border_points
[3]);
1769 border_points
[6] = border_points
[2];
1770 wxRibbonDrawParallelGradientLines(dc
, 2, border_points
+ 6, 0, 1,
1771 border_points
[3].y
- border_points
[2].y
+ 1, rect
.x
, rect
.y
,
1772 primary_colour
.GetColour(), secondary_colour
.GetColour());
1776 void wxRibbonMSWArtProvider::DrawMinimisedPanel(
1782 DrawPartialPageBackground(dc
, wnd
, rect
, false);
1784 wxRect
true_rect(rect
);
1785 RemovePanelPadding(&true_rect
);
1787 if(wnd
->GetExpandedPanel() != NULL
)
1789 wxRect
client_rect(true_rect
);
1791 client_rect
.width
-= 2;
1793 client_rect
.height
= (rect
.y
+ rect
.height
/ 5) - client_rect
.x
;
1794 dc
.GradientFillLinear(client_rect
,
1795 m_panel_active_background_top_colour
,
1796 m_panel_active_background_top_gradient_colour
, wxSOUTH
);
1798 client_rect
.y
+= client_rect
.height
;
1799 client_rect
.height
= (true_rect
.y
+ true_rect
.height
) - client_rect
.y
;
1800 dc
.GradientFillLinear(client_rect
,
1801 m_panel_active_background_colour
,
1802 m_panel_active_background_gradient_colour
, wxSOUTH
);
1804 else if(wnd
->IsHovered())
1806 wxRect
client_rect(true_rect
);
1808 client_rect
.width
-= 2;
1810 client_rect
.height
-= 2;
1811 DrawPartialPageBackground(dc
, wnd
, client_rect
, true);
1815 DrawMinimisedPanelCommon(dc
, wnd
, true_rect
, &preview
);
1817 dc
.SetBrush(m_panel_hover_label_background_brush
);
1818 dc
.SetPen(*wxTRANSPARENT_PEN
);
1819 dc
.DrawRectangle(preview
.x
+ 1, preview
.y
+ preview
.height
- 8,
1820 preview
.width
- 2, 7);
1822 int mid_pos
= rect
.y
+ rect
.height
/ 5 - preview
.y
;
1823 if(mid_pos
< 0 || mid_pos
>= preview
.height
)
1825 wxRect
full_rect(preview
);
1828 full_rect
.width
-= 2;
1829 full_rect
.height
-= 9;
1832 dc
.GradientFillLinear(full_rect
,
1833 m_page_hover_background_colour
,
1834 m_page_hover_background_gradient_colour
, wxSOUTH
);
1838 dc
.GradientFillLinear(full_rect
,
1839 m_page_hover_background_top_colour
,
1840 m_page_hover_background_top_gradient_colour
, wxSOUTH
);
1845 wxRect
top_rect(preview
);
1848 top_rect
.width
-= 2;
1849 top_rect
.height
= mid_pos
;
1850 dc
.GradientFillLinear(top_rect
,
1851 m_page_hover_background_top_colour
,
1852 m_page_hover_background_top_gradient_colour
, wxSOUTH
);
1854 wxRect
btm_rect(top_rect
);
1855 btm_rect
.y
= preview
.y
+ mid_pos
;
1856 btm_rect
.height
= preview
.y
+ preview
.height
- 7 - btm_rect
.y
;
1857 dc
.GradientFillLinear(btm_rect
,
1858 m_page_hover_background_colour
,
1859 m_page_hover_background_gradient_colour
, wxSOUTH
);
1864 dc
.DrawBitmap(bitmap
, preview
.x
+ (preview
.width
- bitmap
.GetWidth()) / 2,
1865 preview
.y
+ (preview
.height
- 7 - bitmap
.GetHeight()) / 2, true);
1868 DrawPanelBorder(dc
, preview
, m_panel_border_pen
, m_panel_border_gradient_pen
);
1870 DrawPanelBorder(dc
, true_rect
, m_panel_minimised_border_pen
,
1871 m_panel_minimised_border_gradient_pen
);
1874 void wxRibbonMSWArtProvider::DrawMinimisedPanelCommon(
1877 const wxRect
& true_rect
,
1878 wxRect
* preview_rect
)
1880 wxRect
preview(0, 0, 32, 32);
1881 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
1883 preview
.x
= true_rect
.x
+ 4;
1884 preview
.y
= true_rect
.y
+ (true_rect
.height
- preview
.height
) / 2;
1888 preview
.x
= true_rect
.x
+ (true_rect
.width
- preview
.width
) / 2;
1889 preview
.y
= true_rect
.y
+ 4;
1892 *preview_rect
= preview
;
1894 wxCoord label_width
, label_height
;
1895 dc
.SetFont(m_panel_label_font
);
1896 dc
.GetTextExtent(wnd
->GetLabel(), &label_width
, &label_height
);
1898 int xpos
= true_rect
.x
+ (true_rect
.width
- label_width
+ 1) / 2;
1899 int ypos
= preview
.y
+ preview
.height
+ 5;
1901 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
1903 xpos
= preview
.x
+ preview
.width
+ 5;
1904 ypos
= true_rect
.y
+ (true_rect
.height
- label_height
) / 2;
1907 dc
.SetTextForeground(m_panel_minimised_label_colour
);
1908 dc
.DrawText(wnd
->GetLabel(), xpos
, ypos
);
1911 wxPoint arrow_points
[3];
1912 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
1914 xpos
+= label_width
;
1915 arrow_points
[0] = wxPoint(xpos
+ 5, ypos
+ label_height
/ 2);
1916 arrow_points
[1] = arrow_points
[0] + wxPoint(-3, 3);
1917 arrow_points
[2] = arrow_points
[0] + wxPoint(-3, -3);
1921 ypos
+= label_height
;
1922 arrow_points
[0] = wxPoint(true_rect
.width
/ 2, ypos
+ 5);
1923 arrow_points
[1] = arrow_points
[0] + wxPoint(-3, -3);
1924 arrow_points
[2] = arrow_points
[0] + wxPoint( 3, -3);
1927 dc
.SetPen(*wxTRANSPARENT_PEN
);
1928 wxBrush
B(m_panel_minimised_label_colour
);
1930 dc
.DrawPolygon(sizeof(arrow_points
)/sizeof(wxPoint
), arrow_points
,
1931 true_rect
.x
, true_rect
.y
);
1934 void wxRibbonMSWArtProvider::DrawButtonBarBackground(
1939 DrawPartialPageBackground(dc
, wnd
, rect
, true);
1942 void wxRibbonMSWArtProvider::DrawPartialPageBackground(
1948 // Assume the window is a child of a ribbon page, and also check for a
1949 // hovered panel somewhere between the window and the page, as it causes
1950 // the background to change.
1951 wxPoint
offset(wnd
->GetPosition());
1952 wxRibbonPage
* page
= NULL
;
1953 wxWindow
* parent
= wnd
->GetParent();
1954 wxRibbonPanel
* panel
= wxDynamicCast(wnd
, wxRibbonPanel
);
1955 bool hovered
= false;
1959 hovered
= allow_hovered
&& panel
->IsHovered();
1960 if(panel
->GetExpandedDummy() != NULL
)
1962 offset
= panel
->GetExpandedDummy()->GetPosition();
1963 parent
= panel
->GetExpandedDummy()->GetParent();
1966 for(; parent
; parent
= parent
->GetParent())
1970 panel
= wxDynamicCast(parent
, wxRibbonPanel
);
1973 hovered
= allow_hovered
&& panel
->IsHovered();
1974 if(panel
->GetExpandedDummy() != NULL
)
1976 parent
= panel
->GetExpandedDummy();
1980 page
= wxDynamicCast(parent
, wxRibbonPage
);
1985 offset
+= parent
->GetPosition();
1989 DrawPartialPageBackground(dc
, wnd
, rect
, page
, offset
, hovered
);
1993 // No page found - fallback to painting with a stock brush
1994 dc
.SetBrush(*wxWHITE_BRUSH
);
1995 dc
.SetPen(*wxTRANSPARENT_PEN
);
1996 dc
.DrawRectangle(rect
.x
, rect
.y
, rect
.width
, rect
.height
);
1999 void wxRibbonMSWArtProvider::DrawButtonBarButton(
2001 wxWindow
* WXUNUSED(wnd
),
2003 wxRibbonButtonKind kind
,
2005 const wxString
& label
,
2006 const wxBitmap
& bitmap_large
,
2007 const wxBitmap
& bitmap_small
)
2009 if(state
& (wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK
|
2010 wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK
))
2012 if(state
& wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK
)
2013 dc
.SetPen(m_button_bar_active_border_pen
);
2015 dc
.SetPen(m_button_bar_hover_border_pen
);
2017 wxRect
bg_rect(rect
);
2021 bg_rect
.height
-= 2;
2023 wxRect
bg_rect_top(bg_rect
);
2024 bg_rect_top
.height
/= 3;
2025 bg_rect
.y
+= bg_rect_top
.height
;
2026 bg_rect
.height
-= bg_rect_top
.height
;
2028 if(kind
== wxRIBBON_BUTTON_HYBRID
)
2030 switch(state
& wxRIBBON_BUTTONBAR_BUTTON_SIZE_MASK
)
2032 case wxRIBBON_BUTTONBAR_BUTTON_LARGE
:
2034 int iYBorder
= rect
.y
+ bitmap_large
.GetHeight() + 4;
2035 wxRect
partial_bg(rect
);
2036 if(state
& wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED
)
2038 partial_bg
.SetBottom(iYBorder
- 1);
2042 partial_bg
.height
-= (iYBorder
- partial_bg
.y
+ 1);
2043 partial_bg
.y
= iYBorder
+ 1;
2045 dc
.DrawLine(rect
.x
, iYBorder
, rect
.x
+ rect
.width
, iYBorder
);
2046 bg_rect
.Intersect(partial_bg
);
2047 bg_rect_top
.Intersect(partial_bg
);
2050 case wxRIBBON_BUTTONBAR_BUTTON_MEDIUM
:
2052 int iArrowWidth
= 9;
2053 if(state
& wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED
)
2055 bg_rect
.width
-= iArrowWidth
;
2056 bg_rect_top
.width
-= iArrowWidth
;
2057 dc
.DrawLine(bg_rect_top
.x
+ bg_rect_top
.width
,
2058 rect
.y
, bg_rect_top
.x
+ bg_rect_top
.width
,
2059 rect
.y
+ rect
.height
);
2064 bg_rect
.x
+= bg_rect
.width
- iArrowWidth
;
2065 bg_rect_top
.x
+= bg_rect_top
.width
- iArrowWidth
;
2066 bg_rect
.width
= iArrowWidth
;
2067 bg_rect_top
.width
= iArrowWidth
;
2068 dc
.DrawLine(bg_rect_top
.x
- 1, rect
.y
,
2069 bg_rect_top
.x
- 1, rect
.y
+ rect
.height
);
2073 case wxRIBBON_BUTTONBAR_BUTTON_SMALL
:
2078 if(state
& wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK
)
2080 dc
.GradientFillLinear(bg_rect_top
,
2081 m_button_bar_active_background_top_colour
,
2082 m_button_bar_active_background_top_gradient_colour
, wxSOUTH
);
2083 dc
.GradientFillLinear(bg_rect
,
2084 m_button_bar_active_background_colour
,
2085 m_button_bar_active_background_gradient_colour
, wxSOUTH
);
2089 dc
.GradientFillLinear(bg_rect_top
,
2090 m_button_bar_hover_background_top_colour
,
2091 m_button_bar_hover_background_top_gradient_colour
, wxSOUTH
);
2092 dc
.GradientFillLinear(bg_rect
,
2093 m_button_bar_hover_background_colour
,
2094 m_button_bar_hover_background_gradient_colour
, wxSOUTH
);
2097 wxPoint border_points
[9];
2098 border_points
[0] = wxPoint(2, 0);
2099 border_points
[1] = wxPoint(rect
.width
- 3, 0);
2100 border_points
[2] = wxPoint(rect
.width
- 1, 2);
2101 border_points
[3] = wxPoint(rect
.width
- 1, rect
.height
- 3);
2102 border_points
[4] = wxPoint(rect
.width
- 3, rect
.height
- 1);
2103 border_points
[5] = wxPoint(2, rect
.height
- 1);
2104 border_points
[6] = wxPoint(0, rect
.height
- 3);
2105 border_points
[7] = wxPoint(0, 2);
2106 border_points
[8] = border_points
[0];
2108 dc
.DrawLines(sizeof(border_points
)/sizeof(wxPoint
), border_points
,
2112 dc
.SetFont(m_button_bar_label_font
);
2113 dc
.SetTextForeground(m_button_bar_label_colour
);
2114 DrawButtonBarButtonForeground(dc
, rect
, kind
, state
, label
, bitmap_large
,
2118 void wxRibbonMSWArtProvider::DrawButtonBarButtonForeground(
2121 wxRibbonButtonKind kind
,
2123 const wxString
& label
,
2124 const wxBitmap
& bitmap_large
,
2125 const wxBitmap
& bitmap_small
)
2127 switch(state
& wxRIBBON_BUTTONBAR_BUTTON_SIZE_MASK
)
2129 case wxRIBBON_BUTTONBAR_BUTTON_LARGE
:
2131 const int padding
= 2;
2132 dc
.DrawBitmap(bitmap_large
,
2133 rect
.x
+ (rect
.width
- bitmap_large
.GetWidth()) / 2,
2134 rect
.y
+ padding
, true);
2135 int ypos
= rect
.y
+ padding
+ bitmap_large
.GetHeight() + padding
;
2136 int arrow_width
= kind
== wxRIBBON_BUTTON_NORMAL
? 0 : 8;
2137 wxCoord label_w
, label_h
;
2138 dc
.GetTextExtent(label
, &label_w
, &label_h
);
2139 if(label_w
+ 2 * padding
<= rect
.width
)
2141 dc
.DrawText(label
, rect
.x
+ (rect
.width
- label_w
) / 2, ypos
);
2142 if(arrow_width
!= 0)
2144 DrawDropdownArrow(dc
, rect
.x
+ rect
.width
/ 2,
2145 ypos
+ (label_h
* 3) / 2,
2146 m_button_bar_label_colour
);
2151 size_t breaki
= label
.Len();
2155 if(wxRibbonCanLabelBreakAtPosition(label
, breaki
))
2157 wxString label_top
= label
.Mid(0, breaki
);
2158 dc
.GetTextExtent(label_top
, &label_w
, &label_h
);
2159 if(label_w
+ 2 * padding
<= rect
.width
)
2161 dc
.DrawText(label_top
,
2162 rect
.x
+ (rect
.width
- label_w
) / 2, ypos
);
2164 wxString label_bottom
= label
.Mid(breaki
+ 1);
2165 dc
.GetTextExtent(label_bottom
, &label_w
, &label_h
);
2166 label_w
+= arrow_width
;
2167 int iX
= rect
.x
+ (rect
.width
- label_w
) / 2;
2168 dc
.DrawText(label_bottom
, iX
, ypos
);
2169 if(arrow_width
!= 0)
2171 DrawDropdownArrow(dc
,
2172 iX
+ 2 +label_w
- arrow_width
,
2173 ypos
+ label_h
/ 2 + 1,
2174 m_button_bar_label_colour
);
2179 } while(breaki
> 0);
2183 case wxRIBBON_BUTTONBAR_BUTTON_MEDIUM
:
2185 int x_cursor
= rect
.x
+ 2;
2186 dc
.DrawBitmap(bitmap_small
, x_cursor
,
2187 rect
.y
+ (rect
.height
- bitmap_small
.GetHeight())/2, true);
2188 x_cursor
+= bitmap_small
.GetWidth() + 2;
2189 wxCoord label_w
, label_h
;
2190 dc
.GetTextExtent(label
, &label_w
, &label_h
);
2191 dc
.DrawText(label
, x_cursor
,
2192 rect
.y
+ (rect
.height
- label_h
) / 2);
2193 x_cursor
+= label_w
+ 3;
2194 if(kind
!= wxRIBBON_BUTTON_NORMAL
)
2196 DrawDropdownArrow(dc
, x_cursor
, rect
.y
+ rect
.height
/ 2,
2197 m_button_bar_label_colour
);
2207 void wxRibbonMSWArtProvider::DrawToolBarBackground(
2212 DrawPartialPageBackground(dc
, wnd
, rect
);
2215 void wxRibbonMSWArtProvider::DrawToolGroupBackground(
2217 wxWindow
* WXUNUSED(wnd
),
2220 dc
.SetPen(m_toolbar_border_pen
);
2222 outline
[0] = wxPoint(2, 0);
2223 outline
[1] = wxPoint(rect
.width
- 3, 0);
2224 outline
[2] = wxPoint(rect
.width
- 1, 2);
2225 outline
[3] = wxPoint(rect
.width
- 1, rect
.height
- 3);
2226 outline
[4] = wxPoint(rect
.width
- 3, rect
.height
- 1);
2227 outline
[5] = wxPoint(2, rect
.height
- 1);
2228 outline
[6] = wxPoint(0, rect
.height
- 3);
2229 outline
[7] = wxPoint(0, 2);
2230 outline
[8] = outline
[0];
2232 dc
.DrawLines(sizeof(outline
)/sizeof(wxPoint
), outline
, rect
.x
, rect
.y
);
2235 void wxRibbonMSWArtProvider::DrawTool(
2237 wxWindow
* WXUNUSED(wnd
),
2239 const wxBitmap
& bitmap
,
2240 wxRibbonButtonKind kind
,
2243 wxRect
bg_rect(rect
);
2245 if((state
& wxRIBBON_TOOLBAR_TOOL_LAST
) == 0)
2247 bool is_split_hybrid
= (kind
== wxRIBBON_BUTTON_HYBRID
&& (state
&
2248 (wxRIBBON_TOOLBAR_TOOL_HOVER_MASK
| wxRIBBON_TOOLBAR_TOOL_ACTIVE_MASK
)));
2251 wxRect
bg_rect_top(bg_rect
);
2252 bg_rect_top
.height
= (bg_rect_top
.height
* 2) / 5;
2253 wxRect
bg_rect_btm(bg_rect
);
2254 bg_rect_btm
.y
+= bg_rect_top
.height
;
2255 bg_rect_btm
.height
-= bg_rect_top
.height
;
2256 wxColour bg_top_colour
= m_tool_background_top_colour
;
2257 wxColour bg_top_grad_colour
= m_tool_background_top_gradient_colour
;
2258 wxColour bg_colour
= m_tool_background_colour
;
2259 wxColour bg_grad_colour
= m_tool_background_gradient_colour
;
2260 if(state
& wxRIBBON_TOOLBAR_TOOL_ACTIVE_MASK
)
2262 bg_top_colour
= m_tool_active_background_top_colour
;
2263 bg_top_grad_colour
= m_tool_active_background_top_gradient_colour
;
2264 bg_colour
= m_tool_active_background_colour
;
2265 bg_grad_colour
= m_tool_active_background_gradient_colour
;
2267 else if(state
& wxRIBBON_TOOLBAR_TOOL_HOVER_MASK
)
2269 bg_top_colour
= m_tool_hover_background_top_colour
;
2270 bg_top_grad_colour
= m_tool_hover_background_top_gradient_colour
;
2271 bg_colour
= m_tool_hover_background_colour
;
2272 bg_grad_colour
= m_tool_hover_background_gradient_colour
;
2274 dc
.GradientFillLinear(bg_rect_top
, bg_top_colour
, bg_top_grad_colour
, wxSOUTH
);
2275 dc
.GradientFillLinear(bg_rect_btm
, bg_colour
, bg_grad_colour
, wxSOUTH
);
2278 wxRect
nonrect(bg_rect
);
2279 if(state
& (wxRIBBON_TOOLBAR_TOOL_DROPDOWN_HOVERED
|
2280 wxRIBBON_TOOLBAR_TOOL_DROPDOWN_ACTIVE
))
2286 nonrect
.x
+= nonrect
.width
- 8;
2289 wxBrush
B(m_tool_hover_background_top_colour
);
2290 dc
.SetPen(*wxTRANSPARENT_PEN
);
2292 dc
.DrawRectangle(nonrect
.x
, nonrect
.y
, nonrect
.width
, nonrect
.height
);
2296 dc
.SetPen(m_toolbar_border_pen
);
2297 if(state
& wxRIBBON_TOOLBAR_TOOL_FIRST
)
2299 dc
.DrawPoint(rect
.x
+ 1, rect
.y
+ 1);
2300 dc
.DrawPoint(rect
.x
+ 1, rect
.y
+ rect
.height
- 2);
2303 dc
.DrawLine(rect
.x
, rect
.y
+ 1, rect
.x
, rect
.y
+ rect
.height
- 1);
2305 if(state
& wxRIBBON_TOOLBAR_TOOL_LAST
)
2307 dc
.DrawPoint(rect
.x
+ rect
.width
- 2, rect
.y
+ 1);
2308 dc
.DrawPoint(rect
.x
+ rect
.width
- 2, rect
.y
+ rect
.height
- 2);
2312 int avail_width
= bg_rect
.GetWidth();
2313 if(kind
!= wxRIBBON_BUTTON_NORMAL
)
2318 dc
.DrawLine(rect
.x
+ avail_width
+ 1, rect
.y
,
2319 rect
.x
+ avail_width
+ 1, rect
.y
+ rect
.height
);
2321 dc
.DrawBitmap(m_toolbar_drop_bitmap
, bg_rect
.x
+ avail_width
+ 2,
2322 bg_rect
.y
+ (bg_rect
.height
/ 2) - 2, true);
2324 dc
.DrawBitmap(bitmap
, bg_rect
.x
+ (avail_width
- bitmap
.GetWidth()) / 2,
2325 bg_rect
.y
+ (bg_rect
.height
- bitmap
.GetHeight()) / 2, true);
2328 void wxRibbonMSWArtProvider::GetBarTabWidth(
2330 wxWindow
* WXUNUSED(wnd
),
2331 const wxString
& label
,
2332 const wxBitmap
& bitmap
,
2334 int* small_begin_need_separator
,
2335 int* small_must_have_separator
,
2340 if((m_flags
& wxRIBBON_BAR_SHOW_PAGE_LABELS
) && !label
.IsEmpty())
2342 dc
.SetFont(m_tab_label_font
);
2343 width
+= dc
.GetTextExtent(label
).GetWidth();
2344 min
+= wxMin(25, width
); // enough for a few chars
2347 // gap between label and bitmap
2352 if((m_flags
& wxRIBBON_BAR_SHOW_PAGE_ICONS
) && bitmap
.IsOk())
2354 width
+= bitmap
.GetWidth();
2355 min
+= bitmap
.GetWidth();
2360 *ideal
= width
+ 30;
2362 if(small_begin_need_separator
!= NULL
)
2364 *small_begin_need_separator
= width
+ 20;
2366 if(small_must_have_separator
!= NULL
)
2368 *small_must_have_separator
= width
+ 10;
2376 int wxRibbonMSWArtProvider::GetTabCtrlHeight(
2378 wxWindow
* WXUNUSED(wnd
),
2379 const wxRibbonPageTabInfoArray
& pages
)
2381 int text_height
= 0;
2382 int icon_height
= 0;
2384 if(pages
.GetCount() <= 1 && (m_flags
& wxRIBBON_BAR_ALWAYS_SHOW_TABS
) == 0)
2386 // To preserve space, a single tab need not be displayed. We still need
2387 // two pixels of border / padding though.
2391 if(m_flags
& wxRIBBON_BAR_SHOW_PAGE_LABELS
)
2393 dc
.SetFont(m_tab_label_font
);
2394 text_height
= dc
.GetTextExtent(wxT("ABCDEFXj")).GetHeight() + 10;
2396 if(m_flags
& wxRIBBON_BAR_SHOW_PAGE_ICONS
)
2398 size_t numpages
= pages
.GetCount();
2399 for(size_t i
= 0; i
< numpages
; ++i
)
2401 const wxRibbonPageTabInfo
& info
= pages
.Item(i
);
2402 if(info
.page
->GetIcon().IsOk())
2404 icon_height
= wxMax(icon_height
, info
.page
->GetIcon().GetHeight() + 4);
2409 return wxMax(text_height
, icon_height
);
2412 wxSize
wxRibbonMSWArtProvider::GetScrollButtonMinimumSize(
2414 wxWindow
* WXUNUSED(wnd
),
2415 long WXUNUSED(style
))
2417 return wxSize(12, 12);
2420 wxSize
wxRibbonMSWArtProvider::GetPanelSize(
2422 const wxRibbonPanel
* wnd
,
2424 wxPoint
* client_offset
)
2426 dc
.SetFont(m_panel_label_font
);
2427 wxSize label_size
= dc
.GetTextExtent(wnd
->GetLabel());
2429 client_size
.IncBy(0, label_size
.GetHeight());
2430 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
2431 client_size
.IncBy(4, 8);
2433 client_size
.IncBy(6, 6);
2435 if(client_offset
!= NULL
)
2437 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
2438 *client_offset
= wxPoint(2, 3);
2440 *client_offset
= wxPoint(3, 2);
2446 wxSize
wxRibbonMSWArtProvider::GetPanelClientSize(
2448 const wxRibbonPanel
* wnd
,
2450 wxPoint
* client_offset
)
2452 dc
.SetFont(m_panel_label_font
);
2453 wxSize label_size
= dc
.GetTextExtent(wnd
->GetLabel());
2455 size
.DecBy(0, label_size
.GetHeight());
2456 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
2461 if(client_offset
!= NULL
)
2463 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
2464 *client_offset
= wxPoint(2, 3);
2466 *client_offset
= wxPoint(3, 2);
2468 if (size
.x
< 0) size
.x
= 0;
2469 if (size
.y
< 0) size
.y
= 0;
2474 wxSize
wxRibbonMSWArtProvider::GetGallerySize(
2476 const wxRibbonGallery
* WXUNUSED(wnd
),
2479 client_size
.IncBy( 2, 1); // Left / top padding
2480 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
2481 client_size
.IncBy(1, 16); // Right / bottom padding
2483 client_size
.IncBy(16, 1); // Right / bottom padding
2487 wxSize
wxRibbonMSWArtProvider::GetGalleryClientSize(
2489 const wxRibbonGallery
* WXUNUSED(wnd
),
2491 wxPoint
* client_offset
,
2492 wxRect
* scroll_up_button
,
2493 wxRect
* scroll_down_button
,
2494 wxRect
* extension_button
)
2499 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
2501 // Flow is vertical - put buttons on bottom
2502 scroll_up
.y
= size
.GetHeight() - 15;
2503 scroll_up
.height
= 15;
2505 scroll_up
.width
= (size
.GetWidth() + 2) / 3;
2506 scroll_down
.y
= scroll_up
.y
;
2507 scroll_down
.height
= scroll_up
.height
;
2508 scroll_down
.x
= scroll_up
.x
+ scroll_up
.width
;
2509 scroll_down
.width
= scroll_up
.width
;
2510 extension
.y
= scroll_down
.y
;
2511 extension
.height
= scroll_down
.height
;
2512 extension
.x
= scroll_down
.x
+ scroll_down
.width
;
2513 extension
.width
= size
.GetWidth() - scroll_up
.width
- scroll_down
.width
;
2519 // Flow is horizontal - put buttons on right
2520 scroll_up
.x
= size
.GetWidth() - 15;
2521 scroll_up
.width
= 15;
2523 scroll_up
.height
= (size
.GetHeight() + 2) / 3;
2524 scroll_down
.x
= scroll_up
.x
;
2525 scroll_down
.width
= scroll_up
.width
;
2526 scroll_down
.y
= scroll_up
.y
+ scroll_up
.height
;
2527 scroll_down
.height
= scroll_up
.height
;
2528 extension
.x
= scroll_down
.x
;
2529 extension
.width
= scroll_down
.width
;
2530 extension
.y
= scroll_down
.y
+ scroll_down
.height
;
2531 extension
.height
= size
.GetHeight() - scroll_up
.height
- scroll_down
.height
;
2536 if(client_offset
!= NULL
)
2537 *client_offset
= wxPoint(2, 1);
2538 if(scroll_up_button
!= NULL
)
2539 *scroll_up_button
= scroll_up
;
2540 if(scroll_down_button
!= NULL
)
2541 *scroll_down_button
= scroll_down
;
2542 if(extension_button
!= NULL
)
2543 *extension_button
= extension
;
2548 wxRect
wxRibbonMSWArtProvider::GetPageBackgroundRedrawArea(
2550 const wxRibbonPage
* WXUNUSED(wnd
),
2551 wxSize page_old_size
,
2552 wxSize page_new_size
)
2554 wxRect new_rect
, old_rect
;
2556 if(page_new_size
.GetWidth() != page_old_size
.GetWidth())
2558 if(page_new_size
.GetHeight() != page_old_size
.GetHeight())
2560 // Width and height both changed - redraw everything
2561 return wxRect(page_new_size
);
2565 // Only width changed - redraw right hand side
2566 const int right_edge_width
= 4;
2568 new_rect
= wxRect(page_new_size
.GetWidth() - right_edge_width
, 0, right_edge_width
, page_new_size
.GetHeight());
2569 old_rect
= wxRect(page_old_size
.GetWidth() - right_edge_width
, 0, right_edge_width
, page_old_size
.GetHeight());
2574 if(page_new_size
.GetHeight() == page_old_size
.GetHeight())
2576 // Nothing changed (should never happen) - redraw nothing
2577 return wxRect(0, 0, 0, 0);
2581 // Height changed - need to redraw everything (as the background
2582 // gradient is done vertically).
2583 return page_new_size
;
2587 new_rect
.Union(old_rect
);
2588 new_rect
.Intersect(wxRect(page_new_size
));
2592 bool wxRibbonMSWArtProvider::GetButtonBarButtonSize(
2595 wxRibbonButtonKind kind
,
2596 wxRibbonButtonBarButtonState size
,
2597 const wxString
& label
,
2598 wxSize bitmap_size_large
,
2599 wxSize bitmap_size_small
,
2600 wxSize
* button_size
,
2601 wxRect
* normal_region
,
2602 wxRect
* dropdown_region
)
2604 const int drop_button_width
= 8;
2606 dc
.SetFont(m_button_bar_label_font
);
2607 switch(size
& wxRIBBON_BUTTONBAR_BUTTON_SIZE_MASK
)
2609 case wxRIBBON_BUTTONBAR_BUTTON_SMALL
:
2610 // Small bitmap, no label
2611 *button_size
= bitmap_size_small
+ wxSize(6, 4);
2614 case wxRIBBON_BUTTON_NORMAL
:
2615 *normal_region
= wxRect(*button_size
);
2616 *dropdown_region
= wxRect(0, 0, 0, 0);
2618 case wxRIBBON_BUTTON_DROPDOWN
:
2619 *button_size
+= wxSize(drop_button_width
, 0);
2620 *dropdown_region
= wxRect(*button_size
);
2621 *normal_region
= wxRect(0, 0, 0, 0);
2623 case wxRIBBON_BUTTON_HYBRID
:
2624 *normal_region
= wxRect(*button_size
);
2625 *dropdown_region
= wxRect(button_size
->GetWidth(), 0,
2626 drop_button_width
, button_size
->GetHeight());
2627 *button_size
+= wxSize(drop_button_width
, 0);
2631 case wxRIBBON_BUTTONBAR_BUTTON_MEDIUM
:
2632 // Small bitmap, with label to the right
2634 GetButtonBarButtonSize(dc
, wnd
, kind
, wxRIBBON_BUTTONBAR_BUTTON_SMALL
,
2635 label
, bitmap_size_large
, bitmap_size_small
, button_size
,
2636 normal_region
, dropdown_region
);
2637 int text_size
= dc
.GetTextExtent(label
).GetWidth();
2638 button_size
->SetWidth(button_size
->GetWidth() + text_size
);
2641 case wxRIBBON_BUTTON_DROPDOWN
:
2642 dropdown_region
->SetWidth(dropdown_region
->GetWidth() + text_size
);
2644 case wxRIBBON_BUTTON_HYBRID
:
2645 dropdown_region
->SetX(dropdown_region
->GetX() + text_size
);
2647 case wxRIBBON_BUTTON_NORMAL
:
2648 normal_region
->SetWidth(normal_region
->GetWidth() + text_size
);
2653 case wxRIBBON_BUTTONBAR_BUTTON_LARGE
:
2654 // Large bitmap, with label below (possibly split over 2 lines)
2656 wxSize
icon_size(bitmap_size_large
);
2657 icon_size
+= wxSize(4, 4);
2658 wxCoord label_height
;
2660 dc
.GetTextExtent(label
, &best_width
, &label_height
);
2661 int last_line_extra_width
= 0;
2662 if(kind
!= wxRIBBON_BUTTON_NORMAL
)
2664 last_line_extra_width
+= 8;
2667 for(i
= 0; i
< label
.Len(); ++i
)
2669 if(wxRibbonCanLabelBreakAtPosition(label
, i
))
2672 dc
.GetTextExtent(label
.Mid(0, i
- 1)).GetWidth(),
2673 dc
.GetTextExtent(label
.Mid(i
+ 1)).GetWidth() + last_line_extra_width
);
2674 if(width
< best_width
)
2680 label_height
*= 2; // Assume two lines even when only one is used
2681 // (to give all buttons a consistent height)
2682 icon_size
.SetWidth(wxMax(icon_size
.GetWidth(), best_width
) + 6);
2683 icon_size
.SetHeight(icon_size
.GetHeight() + label_height
);
2684 *button_size
= icon_size
;
2687 case wxRIBBON_BUTTON_DROPDOWN
:
2688 *dropdown_region
= wxRect(icon_size
);
2690 case wxRIBBON_BUTTON_HYBRID
:
2691 *normal_region
= wxRect(icon_size
);
2692 normal_region
->height
-= 2 + label_height
;
2693 dropdown_region
->x
= 0;
2694 dropdown_region
->y
= normal_region
->height
;
2695 dropdown_region
->width
= icon_size
.GetWidth();
2696 dropdown_region
->height
= icon_size
.GetHeight() - normal_region
->height
;
2698 case wxRIBBON_BUTTON_NORMAL
:
2699 *normal_region
= wxRect(icon_size
);
2708 wxSize
wxRibbonMSWArtProvider::GetMinimisedPanelMinimumSize(
2710 const wxRibbonPanel
* wnd
,
2711 wxSize
* desired_bitmap_size
,
2712 wxDirection
* expanded_panel_direction
)
2714 if(desired_bitmap_size
!= NULL
)
2716 *desired_bitmap_size
= wxSize(16, 16);
2718 if(expanded_panel_direction
!= NULL
)
2720 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
2721 *expanded_panel_direction
= wxEAST
;
2723 *expanded_panel_direction
= wxSOUTH
;
2725 wxSize
base_size(42, 42);
2727 dc
.SetFont(m_panel_label_font
);
2728 wxSize
label_size(dc
.GetTextExtent(wnd
->GetLabel()));
2729 label_size
.IncBy(2, 2); // Allow for differences between this DC and a paint DC
2730 label_size
.IncBy(6, 0); // Padding
2731 label_size
.y
*= 2; // Second line for dropdown button
2733 if(m_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
2735 // Label alongside icon
2736 return wxSize(base_size
.x
+ label_size
.x
,
2737 wxMax(base_size
.y
, label_size
.y
));
2741 // Label beneath icon
2742 return wxSize(wxMax(base_size
.x
, label_size
.x
),
2743 base_size
.y
+ label_size
.y
);
2747 wxSize
wxRibbonMSWArtProvider::GetToolSize(
2749 wxWindow
* WXUNUSED(wnd
),
2751 wxRibbonButtonKind kind
,
2752 bool WXUNUSED(is_first
),
2754 wxRect
* dropdown_region
)
2756 wxSize
size(bitmap_size
);
2760 if(kind
!= wxRIBBON_BUTTON_NORMAL
)
2765 if(kind
== wxRIBBON_BUTTON_DROPDOWN
)
2766 *dropdown_region
= size
;
2768 *dropdown_region
= wxRect(size
.GetWidth() - 8, 0, 8, size
.GetHeight());
2774 *dropdown_region
= wxRect(0, 0, 0, 0);
2779 #endif // wxUSE_RIBBON