art.h 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name: wx/ribbon/art.h
  3. // Purpose: Art providers for ribbon-bar-style interface
  4. // Author: Peter Cawley
  5. // Modified by:
  6. // Created: 2009-05-25
  7. // Copyright: (C) Peter Cawley
  8. // Licence: wxWindows licence
  9. ///////////////////////////////////////////////////////////////////////////////
  10. #ifndef _WX_RIBBON_ART_H_
  11. #define _WX_RIBBON_ART_H_
  12. #include "wx/defs.h"
  13. #if wxUSE_RIBBON
  14. #include "wx/brush.h"
  15. #include "wx/colour.h"
  16. #include "wx/font.h"
  17. #include "wx/pen.h"
  18. #include "wx/bitmap.h"
  19. #include "wx/ribbon/bar.h"
  20. class WXDLLIMPEXP_FWD_CORE wxDC;
  21. class WXDLLIMPEXP_FWD_CORE wxWindow;
  22. enum wxRibbonArtSetting
  23. {
  24. wxRIBBON_ART_TAB_SEPARATION_SIZE,
  25. wxRIBBON_ART_PAGE_BORDER_LEFT_SIZE,
  26. wxRIBBON_ART_PAGE_BORDER_TOP_SIZE,
  27. wxRIBBON_ART_PAGE_BORDER_RIGHT_SIZE,
  28. wxRIBBON_ART_PAGE_BORDER_BOTTOM_SIZE,
  29. wxRIBBON_ART_PANEL_X_SEPARATION_SIZE,
  30. wxRIBBON_ART_PANEL_Y_SEPARATION_SIZE,
  31. wxRIBBON_ART_TOOL_GROUP_SEPARATION_SIZE,
  32. wxRIBBON_ART_GALLERY_BITMAP_PADDING_LEFT_SIZE,
  33. wxRIBBON_ART_GALLERY_BITMAP_PADDING_RIGHT_SIZE,
  34. wxRIBBON_ART_GALLERY_BITMAP_PADDING_TOP_SIZE,
  35. wxRIBBON_ART_GALLERY_BITMAP_PADDING_BOTTOM_SIZE,
  36. wxRIBBON_ART_PANEL_LABEL_FONT,
  37. wxRIBBON_ART_BUTTON_BAR_LABEL_FONT,
  38. wxRIBBON_ART_TAB_LABEL_FONT,
  39. wxRIBBON_ART_BUTTON_BAR_LABEL_COLOUR,
  40. wxRIBBON_ART_BUTTON_BAR_HOVER_BORDER_COLOUR,
  41. wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_TOP_COLOUR,
  42. wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR,
  43. wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_COLOUR,
  44. wxRIBBON_ART_BUTTON_BAR_HOVER_BACKGROUND_GRADIENT_COLOUR,
  45. wxRIBBON_ART_BUTTON_BAR_ACTIVE_BORDER_COLOUR,
  46. wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_TOP_COLOUR,
  47. wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR,
  48. wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_COLOUR,
  49. wxRIBBON_ART_BUTTON_BAR_ACTIVE_BACKGROUND_GRADIENT_COLOUR,
  50. wxRIBBON_ART_GALLERY_BORDER_COLOUR,
  51. wxRIBBON_ART_GALLERY_HOVER_BACKGROUND_COLOUR,
  52. wxRIBBON_ART_GALLERY_BUTTON_BACKGROUND_COLOUR,
  53. wxRIBBON_ART_GALLERY_BUTTON_BACKGROUND_GRADIENT_COLOUR,
  54. wxRIBBON_ART_GALLERY_BUTTON_BACKGROUND_TOP_COLOUR,
  55. wxRIBBON_ART_GALLERY_BUTTON_FACE_COLOUR,
  56. wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_COLOUR,
  57. wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_GRADIENT_COLOUR,
  58. wxRIBBON_ART_GALLERY_BUTTON_HOVER_BACKGROUND_TOP_COLOUR,
  59. wxRIBBON_ART_GALLERY_BUTTON_HOVER_FACE_COLOUR,
  60. wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_COLOUR,
  61. wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_GRADIENT_COLOUR,
  62. wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_BACKGROUND_TOP_COLOUR,
  63. wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_FACE_COLOUR,
  64. wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_COLOUR,
  65. wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_GRADIENT_COLOUR,
  66. wxRIBBON_ART_GALLERY_BUTTON_DISABLED_BACKGROUND_TOP_COLOUR,
  67. wxRIBBON_ART_GALLERY_BUTTON_DISABLED_FACE_COLOUR,
  68. wxRIBBON_ART_GALLERY_ITEM_BORDER_COLOUR,
  69. wxRIBBON_ART_TAB_LABEL_COLOUR,
  70. wxRIBBON_ART_TAB_SEPARATOR_COLOUR,
  71. wxRIBBON_ART_TAB_SEPARATOR_GRADIENT_COLOUR,
  72. wxRIBBON_ART_TAB_CTRL_BACKGROUND_COLOUR,
  73. wxRIBBON_ART_TAB_CTRL_BACKGROUND_GRADIENT_COLOUR,
  74. wxRIBBON_ART_TAB_HOVER_BACKGROUND_TOP_COLOUR,
  75. wxRIBBON_ART_TAB_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR,
  76. wxRIBBON_ART_TAB_HOVER_BACKGROUND_COLOUR,
  77. wxRIBBON_ART_TAB_HOVER_BACKGROUND_GRADIENT_COLOUR,
  78. wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_TOP_COLOUR,
  79. wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR,
  80. wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_COLOUR,
  81. wxRIBBON_ART_TAB_ACTIVE_BACKGROUND_GRADIENT_COLOUR,
  82. wxRIBBON_ART_TAB_BORDER_COLOUR,
  83. wxRIBBON_ART_PANEL_BORDER_COLOUR,
  84. wxRIBBON_ART_PANEL_BORDER_GRADIENT_COLOUR,
  85. wxRIBBON_ART_PANEL_MINIMISED_BORDER_COLOUR,
  86. wxRIBBON_ART_PANEL_MINIMISED_BORDER_GRADIENT_COLOUR,
  87. wxRIBBON_ART_PANEL_LABEL_BACKGROUND_COLOUR,
  88. wxRIBBON_ART_PANEL_LABEL_BACKGROUND_GRADIENT_COLOUR,
  89. wxRIBBON_ART_PANEL_LABEL_COLOUR,
  90. wxRIBBON_ART_PANEL_HOVER_LABEL_BACKGROUND_COLOUR,
  91. wxRIBBON_ART_PANEL_HOVER_LABEL_BACKGROUND_GRADIENT_COLOUR,
  92. wxRIBBON_ART_PANEL_HOVER_LABEL_COLOUR,
  93. wxRIBBON_ART_PANEL_MINIMISED_LABEL_COLOUR,
  94. wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_TOP_COLOUR,
  95. wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR,
  96. wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_COLOUR,
  97. wxRIBBON_ART_PANEL_ACTIVE_BACKGROUND_GRADIENT_COLOUR,
  98. wxRIBBON_ART_PANEL_BUTTON_FACE_COLOUR,
  99. wxRIBBON_ART_PANEL_BUTTON_HOVER_FACE_COLOUR,
  100. wxRIBBON_ART_PAGE_TOGGLE_FACE_COLOUR,
  101. wxRIBBON_ART_PAGE_TOGGLE_HOVER_FACE_COLOUR,
  102. wxRIBBON_ART_PAGE_BORDER_COLOUR,
  103. wxRIBBON_ART_PAGE_BACKGROUND_TOP_COLOUR,
  104. wxRIBBON_ART_PAGE_BACKGROUND_TOP_GRADIENT_COLOUR,
  105. wxRIBBON_ART_PAGE_BACKGROUND_COLOUR,
  106. wxRIBBON_ART_PAGE_BACKGROUND_GRADIENT_COLOUR,
  107. wxRIBBON_ART_PAGE_HOVER_BACKGROUND_TOP_COLOUR,
  108. wxRIBBON_ART_PAGE_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR,
  109. wxRIBBON_ART_PAGE_HOVER_BACKGROUND_COLOUR,
  110. wxRIBBON_ART_PAGE_HOVER_BACKGROUND_GRADIENT_COLOUR,
  111. wxRIBBON_ART_TOOLBAR_BORDER_COLOUR,
  112. wxRIBBON_ART_TOOLBAR_HOVER_BORDER_COLOUR,
  113. wxRIBBON_ART_TOOLBAR_FACE_COLOUR,
  114. wxRIBBON_ART_TOOL_BACKGROUND_TOP_COLOUR,
  115. wxRIBBON_ART_TOOL_BACKGROUND_TOP_GRADIENT_COLOUR,
  116. wxRIBBON_ART_TOOL_BACKGROUND_COLOUR,
  117. wxRIBBON_ART_TOOL_BACKGROUND_GRADIENT_COLOUR,
  118. wxRIBBON_ART_TOOL_HOVER_BACKGROUND_TOP_COLOUR,
  119. wxRIBBON_ART_TOOL_HOVER_BACKGROUND_TOP_GRADIENT_COLOUR,
  120. wxRIBBON_ART_TOOL_HOVER_BACKGROUND_COLOUR,
  121. wxRIBBON_ART_TOOL_HOVER_BACKGROUND_GRADIENT_COLOUR,
  122. wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_TOP_COLOUR,
  123. wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_TOP_GRADIENT_COLOUR,
  124. wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_COLOUR,
  125. wxRIBBON_ART_TOOL_ACTIVE_BACKGROUND_GRADIENT_COLOUR,
  126. wxRIBBON_ART_BUTTON_BAR_LABEL_DISABLED_COLOUR
  127. };
  128. enum wxRibbonScrollButtonStyle
  129. {
  130. wxRIBBON_SCROLL_BTN_LEFT = 0,
  131. wxRIBBON_SCROLL_BTN_RIGHT = 1,
  132. wxRIBBON_SCROLL_BTN_UP = 2,
  133. wxRIBBON_SCROLL_BTN_DOWN = 3,
  134. wxRIBBON_SCROLL_BTN_DIRECTION_MASK = 3,
  135. wxRIBBON_SCROLL_BTN_NORMAL = 0,
  136. wxRIBBON_SCROLL_BTN_HOVERED = 4,
  137. wxRIBBON_SCROLL_BTN_ACTIVE = 8,
  138. wxRIBBON_SCROLL_BTN_STATE_MASK = 12,
  139. wxRIBBON_SCROLL_BTN_FOR_OTHER = 0,
  140. wxRIBBON_SCROLL_BTN_FOR_TABS = 16,
  141. wxRIBBON_SCROLL_BTN_FOR_PAGE = 32,
  142. wxRIBBON_SCROLL_BTN_FOR_MASK = 48
  143. };
  144. enum wxRibbonButtonKind
  145. {
  146. wxRIBBON_BUTTON_NORMAL = 1 << 0,
  147. wxRIBBON_BUTTON_DROPDOWN = 1 << 1,
  148. wxRIBBON_BUTTON_HYBRID = wxRIBBON_BUTTON_NORMAL | wxRIBBON_BUTTON_DROPDOWN,
  149. wxRIBBON_BUTTON_TOGGLE = 1 << 2
  150. };
  151. enum wxRibbonButtonBarButtonState
  152. {
  153. wxRIBBON_BUTTONBAR_BUTTON_SMALL = 0 << 0,
  154. wxRIBBON_BUTTONBAR_BUTTON_MEDIUM = 1 << 0,
  155. wxRIBBON_BUTTONBAR_BUTTON_LARGE = 2 << 0,
  156. wxRIBBON_BUTTONBAR_BUTTON_SIZE_MASK = 3 << 0,
  157. wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED = 1 << 3,
  158. wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED = 1 << 4,
  159. wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK = wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED | wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED,
  160. wxRIBBON_BUTTONBAR_BUTTON_NORMAL_ACTIVE = 1 << 5,
  161. wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_ACTIVE = 1 << 6,
  162. wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK = wxRIBBON_BUTTONBAR_BUTTON_NORMAL_ACTIVE | wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_ACTIVE,
  163. wxRIBBON_BUTTONBAR_BUTTON_DISABLED = 1 << 7,
  164. wxRIBBON_BUTTONBAR_BUTTON_TOGGLED = 1 << 8,
  165. wxRIBBON_BUTTONBAR_BUTTON_STATE_MASK = 0x1F8
  166. };
  167. enum wxRibbonGalleryButtonState
  168. {
  169. wxRIBBON_GALLERY_BUTTON_NORMAL,
  170. wxRIBBON_GALLERY_BUTTON_HOVERED,
  171. wxRIBBON_GALLERY_BUTTON_ACTIVE,
  172. wxRIBBON_GALLERY_BUTTON_DISABLED
  173. };
  174. class wxRibbonBar;
  175. class wxRibbonPage;
  176. class wxRibbonPanel;
  177. class wxRibbonGallery;
  178. class wxRibbonGalleryItem;
  179. class wxRibbonPageTabInfo;
  180. class wxRibbonPageTabInfoArray;
  181. class WXDLLIMPEXP_RIBBON wxRibbonArtProvider
  182. {
  183. public:
  184. wxRibbonArtProvider();
  185. virtual ~wxRibbonArtProvider();
  186. virtual wxRibbonArtProvider* Clone() const = 0;
  187. virtual void SetFlags(long flags) = 0;
  188. virtual long GetFlags() const = 0;
  189. virtual int GetMetric(int id) const = 0;
  190. virtual void SetMetric(int id, int new_val) = 0;
  191. virtual void SetFont(int id, const wxFont& font) = 0;
  192. virtual wxFont GetFont(int id) const = 0;
  193. virtual wxColour GetColour(int id) const = 0;
  194. virtual void SetColour(int id, const wxColor& colour) = 0;
  195. wxColour GetColor(int id) const { return GetColour(id); }
  196. void SetColor(int id, const wxColour& color) { SetColour(id, color); }
  197. virtual void GetColourScheme(wxColour* primary,
  198. wxColour* secondary,
  199. wxColour* tertiary) const = 0;
  200. virtual void SetColourScheme(const wxColour& primary,
  201. const wxColour& secondary,
  202. const wxColour& tertiary) = 0;
  203. virtual void DrawTabCtrlBackground(
  204. wxDC& dc,
  205. wxWindow* wnd,
  206. const wxRect& rect) = 0;
  207. virtual void DrawTab(wxDC& dc,
  208. wxWindow* wnd,
  209. const wxRibbonPageTabInfo& tab) = 0;
  210. virtual void DrawTabSeparator(wxDC& dc,
  211. wxWindow* wnd,
  212. const wxRect& rect,
  213. double visibility) = 0;
  214. virtual void DrawPageBackground(
  215. wxDC& dc,
  216. wxWindow* wnd,
  217. const wxRect& rect) = 0;
  218. virtual void DrawScrollButton(
  219. wxDC& dc,
  220. wxWindow* wnd,
  221. const wxRect& rect,
  222. long style) = 0;
  223. virtual void DrawPanelBackground(
  224. wxDC& dc,
  225. wxRibbonPanel* wnd,
  226. const wxRect& rect) = 0;
  227. virtual void DrawGalleryBackground(
  228. wxDC& dc,
  229. wxRibbonGallery* wnd,
  230. const wxRect& rect) = 0;
  231. virtual void DrawGalleryItemBackground(
  232. wxDC& dc,
  233. wxRibbonGallery* wnd,
  234. const wxRect& rect,
  235. wxRibbonGalleryItem* item) = 0;
  236. virtual void DrawMinimisedPanel(
  237. wxDC& dc,
  238. wxRibbonPanel* wnd,
  239. const wxRect& rect,
  240. wxBitmap& bitmap) = 0;
  241. virtual void DrawButtonBarBackground(
  242. wxDC& dc,
  243. wxWindow* wnd,
  244. const wxRect& rect) = 0;
  245. virtual void DrawButtonBarButton(
  246. wxDC& dc,
  247. wxWindow* wnd,
  248. const wxRect& rect,
  249. wxRibbonButtonKind kind,
  250. long state,
  251. const wxString& label,
  252. const wxBitmap& bitmap_large,
  253. const wxBitmap& bitmap_small) = 0;
  254. virtual void DrawToolBarBackground(
  255. wxDC& dc,
  256. wxWindow* wnd,
  257. const wxRect& rect) = 0;
  258. virtual void DrawToolGroupBackground(
  259. wxDC& dc,
  260. wxWindow* wnd,
  261. const wxRect& rect) = 0;
  262. virtual void DrawTool(
  263. wxDC& dc,
  264. wxWindow* wnd,
  265. const wxRect& rect,
  266. const wxBitmap& bitmap,
  267. wxRibbonButtonKind kind,
  268. long state) = 0;
  269. virtual void DrawToggleButton(
  270. wxDC& dc,
  271. wxRibbonBar* wnd,
  272. const wxRect& rect,
  273. wxRibbonDisplayMode mode) = 0;
  274. virtual void DrawHelpButton(
  275. wxDC& dc,
  276. wxRibbonBar* wnd,
  277. const wxRect& rect) = 0;
  278. virtual void GetBarTabWidth(
  279. wxDC& dc,
  280. wxWindow* wnd,
  281. const wxString& label,
  282. const wxBitmap& bitmap,
  283. int* ideal,
  284. int* small_begin_need_separator,
  285. int* small_must_have_separator,
  286. int* minimum) = 0;
  287. virtual int GetTabCtrlHeight(
  288. wxDC& dc,
  289. wxWindow* wnd,
  290. const wxRibbonPageTabInfoArray& pages) = 0;
  291. virtual wxSize GetScrollButtonMinimumSize(
  292. wxDC& dc,
  293. wxWindow* wnd,
  294. long style) = 0;
  295. virtual wxSize GetPanelSize(
  296. wxDC& dc,
  297. const wxRibbonPanel* wnd,
  298. wxSize client_size,
  299. wxPoint* client_offset) = 0;
  300. virtual wxSize GetPanelClientSize(
  301. wxDC& dc,
  302. const wxRibbonPanel* wnd,
  303. wxSize size,
  304. wxPoint* client_offset) = 0;
  305. virtual wxRect GetPanelExtButtonArea(
  306. wxDC& dc,
  307. const wxRibbonPanel* wnd,
  308. wxRect rect) = 0;
  309. virtual wxSize GetGallerySize(
  310. wxDC& dc,
  311. const wxRibbonGallery* wnd,
  312. wxSize client_size) = 0;
  313. virtual wxSize GetGalleryClientSize(
  314. wxDC& dc,
  315. const wxRibbonGallery* wnd,
  316. wxSize size,
  317. wxPoint* client_offset,
  318. wxRect* scroll_up_button,
  319. wxRect* scroll_down_button,
  320. wxRect* extension_button) = 0;
  321. virtual wxRect GetPageBackgroundRedrawArea(
  322. wxDC& dc,
  323. const wxRibbonPage* wnd,
  324. wxSize page_old_size,
  325. wxSize page_new_size) = 0;
  326. virtual bool GetButtonBarButtonSize(
  327. wxDC& dc,
  328. wxWindow* wnd,
  329. wxRibbonButtonKind kind,
  330. wxRibbonButtonBarButtonState size,
  331. const wxString& label,
  332. wxSize bitmap_size_large,
  333. wxSize bitmap_size_small,
  334. wxSize* button_size,
  335. wxRect* normal_region,
  336. wxRect* dropdown_region) = 0;
  337. virtual wxSize GetMinimisedPanelMinimumSize(
  338. wxDC& dc,
  339. const wxRibbonPanel* wnd,
  340. wxSize* desired_bitmap_size,
  341. wxDirection* expanded_panel_direction) = 0;
  342. virtual wxSize GetToolSize(
  343. wxDC& dc,
  344. wxWindow* wnd,
  345. wxSize bitmap_size,
  346. wxRibbonButtonKind kind,
  347. bool is_first,
  348. bool is_last,
  349. wxRect* dropdown_region) = 0;
  350. virtual wxRect GetBarToggleButtonArea(const wxRect& rect)= 0;
  351. virtual wxRect GetRibbonHelpButtonArea(const wxRect& rect) = 0;
  352. };
  353. class WXDLLIMPEXP_RIBBON wxRibbonMSWArtProvider : public wxRibbonArtProvider
  354. {
  355. public:
  356. wxRibbonMSWArtProvider(bool set_colour_scheme = true);
  357. virtual ~wxRibbonMSWArtProvider();
  358. wxRibbonArtProvider* Clone() const;
  359. void SetFlags(long flags);
  360. long GetFlags() const;
  361. int GetMetric(int id) const;
  362. void SetMetric(int id, int new_val);
  363. void SetFont(int id, const wxFont& font);
  364. wxFont GetFont(int id) const;
  365. wxColour GetColour(int id) const;
  366. void SetColour(int id, const wxColor& colour);
  367. void GetColourScheme(wxColour* primary,
  368. wxColour* secondary,
  369. wxColour* tertiary) const;
  370. void SetColourScheme(const wxColour& primary,
  371. const wxColour& secondary,
  372. const wxColour& tertiary);
  373. int GetTabCtrlHeight(
  374. wxDC& dc,
  375. wxWindow* wnd,
  376. const wxRibbonPageTabInfoArray& pages);
  377. void DrawTabCtrlBackground(
  378. wxDC& dc,
  379. wxWindow* wnd,
  380. const wxRect& rect);
  381. void DrawTab(wxDC& dc,
  382. wxWindow* wnd,
  383. const wxRibbonPageTabInfo& tab);
  384. void DrawTabSeparator(
  385. wxDC& dc,
  386. wxWindow* wnd,
  387. const wxRect& rect,
  388. double visibility);
  389. void DrawPageBackground(
  390. wxDC& dc,
  391. wxWindow* wnd,
  392. const wxRect& rect);
  393. void DrawScrollButton(
  394. wxDC& dc,
  395. wxWindow* wnd,
  396. const wxRect& rect,
  397. long style);
  398. void DrawPanelBackground(
  399. wxDC& dc,
  400. wxRibbonPanel* wnd,
  401. const wxRect& rect);
  402. void DrawGalleryBackground(
  403. wxDC& dc,
  404. wxRibbonGallery* wnd,
  405. const wxRect& rect);
  406. void DrawGalleryItemBackground(
  407. wxDC& dc,
  408. wxRibbonGallery* wnd,
  409. const wxRect& rect,
  410. wxRibbonGalleryItem* item);
  411. void DrawMinimisedPanel(
  412. wxDC& dc,
  413. wxRibbonPanel* wnd,
  414. const wxRect& rect,
  415. wxBitmap& bitmap);
  416. void DrawButtonBarBackground(
  417. wxDC& dc,
  418. wxWindow* wnd,
  419. const wxRect& rect);
  420. void DrawButtonBarButton(
  421. wxDC& dc,
  422. wxWindow* wnd,
  423. const wxRect& rect,
  424. wxRibbonButtonKind kind,
  425. long state,
  426. const wxString& label,
  427. const wxBitmap& bitmap_large,
  428. const wxBitmap& bitmap_small);
  429. void DrawToolBarBackground(
  430. wxDC& dc,
  431. wxWindow* wnd,
  432. const wxRect& rect);
  433. void DrawToolGroupBackground(
  434. wxDC& dc,
  435. wxWindow* wnd,
  436. const wxRect& rect);
  437. void DrawTool(
  438. wxDC& dc,
  439. wxWindow* wnd,
  440. const wxRect& rect,
  441. const wxBitmap& bitmap,
  442. wxRibbonButtonKind kind,
  443. long state);
  444. void DrawToggleButton(
  445. wxDC& dc,
  446. wxRibbonBar* wnd,
  447. const wxRect& rect,
  448. wxRibbonDisplayMode mode);
  449. void DrawHelpButton(wxDC& dc,
  450. wxRibbonBar* wnd,
  451. const wxRect& rect);
  452. void GetBarTabWidth(
  453. wxDC& dc,
  454. wxWindow* wnd,
  455. const wxString& label,
  456. const wxBitmap& bitmap,
  457. int* ideal,
  458. int* small_begin_need_separator,
  459. int* small_must_have_separator,
  460. int* minimum);
  461. wxSize GetScrollButtonMinimumSize(
  462. wxDC& dc,
  463. wxWindow* wnd,
  464. long style);
  465. wxSize GetPanelSize(
  466. wxDC& dc,
  467. const wxRibbonPanel* wnd,
  468. wxSize client_size,
  469. wxPoint* client_offset);
  470. wxSize GetPanelClientSize(
  471. wxDC& dc,
  472. const wxRibbonPanel* wnd,
  473. wxSize size,
  474. wxPoint* client_offset);
  475. wxRect GetPanelExtButtonArea(
  476. wxDC& dc,
  477. const wxRibbonPanel* wnd,
  478. wxRect rect);
  479. wxSize GetGallerySize(
  480. wxDC& dc,
  481. const wxRibbonGallery* wnd,
  482. wxSize client_size);
  483. wxSize GetGalleryClientSize(
  484. wxDC& dc,
  485. const wxRibbonGallery* wnd,
  486. wxSize size,
  487. wxPoint* client_offset,
  488. wxRect* scroll_up_button,
  489. wxRect* scroll_down_button,
  490. wxRect* extension_button);
  491. wxRect GetPageBackgroundRedrawArea(
  492. wxDC& dc,
  493. const wxRibbonPage* wnd,
  494. wxSize page_old_size,
  495. wxSize page_new_size);
  496. bool GetButtonBarButtonSize(
  497. wxDC& dc,
  498. wxWindow* wnd,
  499. wxRibbonButtonKind kind,
  500. wxRibbonButtonBarButtonState size,
  501. const wxString& label,
  502. wxSize bitmap_size_large,
  503. wxSize bitmap_size_small,
  504. wxSize* button_size,
  505. wxRect* normal_region,
  506. wxRect* dropdown_region);
  507. wxSize GetMinimisedPanelMinimumSize(
  508. wxDC& dc,
  509. const wxRibbonPanel* wnd,
  510. wxSize* desired_bitmap_size,
  511. wxDirection* expanded_panel_direction);
  512. wxSize GetToolSize(
  513. wxDC& dc,
  514. wxWindow* wnd,
  515. wxSize bitmap_size,
  516. wxRibbonButtonKind kind,
  517. bool is_first,
  518. bool is_last,
  519. wxRect* dropdown_region);
  520. wxRect GetBarToggleButtonArea(const wxRect& rect);
  521. wxRect GetRibbonHelpButtonArea(const wxRect& rect);
  522. protected:
  523. void ReallyDrawTabSeparator(wxWindow* wnd, const wxRect& rect, double visibility);
  524. void DrawPartialPageBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect,
  525. bool allow_hovered = true);
  526. void DrawPartialPageBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect,
  527. wxRibbonPage* page, wxPoint offset, bool hovered = false);
  528. void DrawPanelBorder(wxDC& dc, const wxRect& rect, wxPen& primary_colour,
  529. wxPen& secondary_colour);
  530. void RemovePanelPadding(wxRect* rect);
  531. void DrawDropdownArrow(wxDC& dc, int x, int y, const wxColour& colour);
  532. void DrawGalleryBackgroundCommon(wxDC& dc, wxRibbonGallery* wnd,
  533. const wxRect& rect);
  534. virtual void DrawGalleryButton(wxDC& dc, wxRect rect,
  535. wxRibbonGalleryButtonState state, wxBitmap* bitmaps);
  536. void DrawButtonBarButtonForeground(
  537. wxDC& dc,
  538. const wxRect& rect,
  539. wxRibbonButtonKind kind,
  540. long state,
  541. const wxString& label,
  542. const wxBitmap& bitmap_large,
  543. const wxBitmap& bitmap_small);
  544. void DrawMinimisedPanelCommon(
  545. wxDC& dc,
  546. wxRibbonPanel* wnd,
  547. const wxRect& rect,
  548. wxRect* preview_rect);
  549. void CloneTo(wxRibbonMSWArtProvider* copy) const;
  550. wxBitmap m_cached_tab_separator;
  551. wxBitmap m_gallery_up_bitmap[4];
  552. wxBitmap m_gallery_down_bitmap[4];
  553. wxBitmap m_gallery_extension_bitmap[4];
  554. wxBitmap m_toolbar_drop_bitmap;
  555. wxBitmap m_panel_extension_bitmap[2];
  556. wxBitmap m_ribbon_toggle_up_bitmap[2];
  557. wxBitmap m_ribbon_toggle_down_bitmap[2];
  558. wxBitmap m_ribbon_toggle_pin_bitmap[2];
  559. wxBitmap m_ribbon_bar_help_button_bitmap[2];
  560. wxColour m_primary_scheme_colour;
  561. wxColour m_secondary_scheme_colour;
  562. wxColour m_tertiary_scheme_colour;
  563. wxColour m_button_bar_label_colour;
  564. wxColour m_button_bar_label_disabled_colour;
  565. wxColour m_tab_label_colour;
  566. wxColour m_tab_separator_colour;
  567. wxColour m_tab_separator_gradient_colour;
  568. wxColour m_tab_active_background_colour;
  569. wxColour m_tab_active_background_gradient_colour;
  570. wxColour m_tab_hover_background_colour;
  571. wxColour m_tab_hover_background_gradient_colour;
  572. wxColour m_tab_hover_background_top_colour;
  573. wxColour m_tab_hover_background_top_gradient_colour;
  574. wxColour m_panel_label_colour;
  575. wxColour m_panel_minimised_label_colour;
  576. wxColour m_panel_hover_label_colour;
  577. wxColour m_panel_active_background_colour;
  578. wxColour m_panel_active_background_gradient_colour;
  579. wxColour m_panel_active_background_top_colour;
  580. wxColour m_panel_active_background_top_gradient_colour;
  581. wxColour m_panel_button_face_colour;
  582. wxColour m_panel_button_hover_face_colour;
  583. wxColour m_page_toggle_face_colour;
  584. wxColour m_page_toggle_hover_face_colour;
  585. wxColour m_page_background_colour;
  586. wxColour m_page_background_gradient_colour;
  587. wxColour m_page_background_top_colour;
  588. wxColour m_page_background_top_gradient_colour;
  589. wxColour m_page_hover_background_colour;
  590. wxColour m_page_hover_background_gradient_colour;
  591. wxColour m_page_hover_background_top_colour;
  592. wxColour m_page_hover_background_top_gradient_colour;
  593. wxColour m_button_bar_hover_background_colour;
  594. wxColour m_button_bar_hover_background_gradient_colour;
  595. wxColour m_button_bar_hover_background_top_colour;
  596. wxColour m_button_bar_hover_background_top_gradient_colour;
  597. wxColour m_button_bar_active_background_colour;
  598. wxColour m_button_bar_active_background_gradient_colour;
  599. wxColour m_button_bar_active_background_top_colour;
  600. wxColour m_button_bar_active_background_top_gradient_colour;
  601. wxColour m_gallery_button_background_colour;
  602. wxColour m_gallery_button_background_gradient_colour;
  603. wxColour m_gallery_button_hover_background_colour;
  604. wxColour m_gallery_button_hover_background_gradient_colour;
  605. wxColour m_gallery_button_active_background_colour;
  606. wxColour m_gallery_button_active_background_gradient_colour;
  607. wxColour m_gallery_button_disabled_background_colour;
  608. wxColour m_gallery_button_disabled_background_gradient_colour;
  609. wxColour m_gallery_button_face_colour;
  610. wxColour m_gallery_button_hover_face_colour;
  611. wxColour m_gallery_button_active_face_colour;
  612. wxColour m_gallery_button_disabled_face_colour;
  613. wxColour m_tool_face_colour;
  614. wxColour m_tool_background_top_colour;
  615. wxColour m_tool_background_top_gradient_colour;
  616. wxColour m_tool_background_colour;
  617. wxColour m_tool_background_gradient_colour;
  618. wxColour m_tool_hover_background_top_colour;
  619. wxColour m_tool_hover_background_top_gradient_colour;
  620. wxColour m_tool_hover_background_colour;
  621. wxColour m_tool_hover_background_gradient_colour;
  622. wxColour m_tool_active_background_top_colour;
  623. wxColour m_tool_active_background_top_gradient_colour;
  624. wxColour m_tool_active_background_colour;
  625. wxColour m_tool_active_background_gradient_colour;
  626. wxBrush m_tab_ctrl_background_brush;
  627. wxBrush m_panel_label_background_brush;
  628. wxBrush m_panel_hover_label_background_brush;
  629. wxBrush m_panel_hover_button_background_brush;
  630. wxBrush m_gallery_hover_background_brush;
  631. wxBrush m_gallery_button_background_top_brush;
  632. wxBrush m_gallery_button_hover_background_top_brush;
  633. wxBrush m_gallery_button_active_background_top_brush;
  634. wxBrush m_gallery_button_disabled_background_top_brush;
  635. wxBrush m_ribbon_toggle_brush;
  636. wxFont m_tab_label_font;
  637. wxFont m_panel_label_font;
  638. wxFont m_button_bar_label_font;
  639. wxPen m_page_border_pen;
  640. wxPen m_panel_border_pen;
  641. wxPen m_panel_border_gradient_pen;
  642. wxPen m_panel_minimised_border_pen;
  643. wxPen m_panel_minimised_border_gradient_pen;
  644. wxPen m_panel_hover_button_border_pen;
  645. wxPen m_tab_border_pen;
  646. wxPen m_button_bar_hover_border_pen;
  647. wxPen m_button_bar_active_border_pen;
  648. wxPen m_gallery_border_pen;
  649. wxPen m_gallery_item_border_pen;
  650. wxPen m_toolbar_border_pen;
  651. wxPen m_ribbon_toggle_pen;
  652. double m_cached_tab_separator_visibility;
  653. long m_flags;
  654. int m_tab_separation_size;
  655. int m_page_border_left;
  656. int m_page_border_top;
  657. int m_page_border_right;
  658. int m_page_border_bottom;
  659. int m_panel_x_separation_size;
  660. int m_panel_y_separation_size;
  661. int m_tool_group_separation_size;
  662. int m_gallery_bitmap_padding_left_size;
  663. int m_gallery_bitmap_padding_right_size;
  664. int m_gallery_bitmap_padding_top_size;
  665. int m_gallery_bitmap_padding_bottom_size;
  666. int m_toggle_button_offset;
  667. int m_help_button_offset;
  668. };
  669. class WXDLLIMPEXP_RIBBON wxRibbonAUIArtProvider : public wxRibbonMSWArtProvider
  670. {
  671. public:
  672. wxRibbonAUIArtProvider();
  673. virtual ~wxRibbonAUIArtProvider();
  674. wxRibbonArtProvider* Clone() const;
  675. wxColour GetColour(int id) const;
  676. void SetColour(int id, const wxColor& colour);
  677. void SetColourScheme(const wxColour& primary,
  678. const wxColour& secondary,
  679. const wxColour& tertiary);
  680. void SetFont(int id, const wxFont& font);
  681. wxSize GetScrollButtonMinimumSize(
  682. wxDC& dc,
  683. wxWindow* wnd,
  684. long style);
  685. void DrawScrollButton(
  686. wxDC& dc,
  687. wxWindow* wnd,
  688. const wxRect& rect,
  689. long style);
  690. wxSize GetPanelSize(
  691. wxDC& dc,
  692. const wxRibbonPanel* wnd,
  693. wxSize client_size,
  694. wxPoint* client_offset);
  695. wxSize GetPanelClientSize(
  696. wxDC& dc,
  697. const wxRibbonPanel* wnd,
  698. wxSize size,
  699. wxPoint* client_offset);
  700. wxRect GetPanelExtButtonArea(
  701. wxDC& dc,
  702. const wxRibbonPanel* wnd,
  703. wxRect rect);
  704. void DrawTabCtrlBackground(
  705. wxDC& dc,
  706. wxWindow* wnd,
  707. const wxRect& rect);
  708. int GetTabCtrlHeight(
  709. wxDC& dc,
  710. wxWindow* wnd,
  711. const wxRibbonPageTabInfoArray& pages);
  712. void GetBarTabWidth(
  713. wxDC& dc,
  714. wxWindow* wnd,
  715. const wxString& label,
  716. const wxBitmap& bitmap,
  717. int* ideal,
  718. int* small_begin_need_separator,
  719. int* small_must_have_separator,
  720. int* minimum);
  721. void DrawTab(wxDC& dc,
  722. wxWindow* wnd,
  723. const wxRibbonPageTabInfo& tab);
  724. void DrawTabSeparator(
  725. wxDC& dc,
  726. wxWindow* wnd,
  727. const wxRect& rect,
  728. double visibility);
  729. void DrawPageBackground(
  730. wxDC& dc,
  731. wxWindow* wnd,
  732. const wxRect& rect);
  733. void DrawPanelBackground(
  734. wxDC& dc,
  735. wxRibbonPanel* wnd,
  736. const wxRect& rect);
  737. void DrawMinimisedPanel(
  738. wxDC& dc,
  739. wxRibbonPanel* wnd,
  740. const wxRect& rect,
  741. wxBitmap& bitmap);
  742. void DrawGalleryBackground(
  743. wxDC& dc,
  744. wxRibbonGallery* wnd,
  745. const wxRect& rect);
  746. void DrawGalleryItemBackground(
  747. wxDC& dc,
  748. wxRibbonGallery* wnd,
  749. const wxRect& rect,
  750. wxRibbonGalleryItem* item);
  751. void DrawButtonBarBackground(
  752. wxDC& dc,
  753. wxWindow* wnd,
  754. const wxRect& rect);
  755. void DrawButtonBarButton(
  756. wxDC& dc,
  757. wxWindow* wnd,
  758. const wxRect& rect,
  759. wxRibbonButtonKind kind,
  760. long state,
  761. const wxString& label,
  762. const wxBitmap& bitmap_large,
  763. const wxBitmap& bitmap_small);
  764. void DrawToolBarBackground(
  765. wxDC& dc,
  766. wxWindow* wnd,
  767. const wxRect& rect);
  768. void DrawToolGroupBackground(
  769. wxDC& dc,
  770. wxWindow* wnd,
  771. const wxRect& rect);
  772. void DrawTool(
  773. wxDC& dc,
  774. wxWindow* wnd,
  775. const wxRect& rect,
  776. const wxBitmap& bitmap,
  777. wxRibbonButtonKind kind,
  778. long state);
  779. protected:
  780. void DrawPartialPanelBackground(wxDC& dc, wxWindow* wnd,
  781. const wxRect& rect);
  782. void DrawGalleryButton(wxDC& dc, wxRect rect,
  783. wxRibbonGalleryButtonState state, wxBitmap* bitmaps);
  784. wxColour m_tab_ctrl_background_colour;
  785. wxColour m_tab_ctrl_background_gradient_colour;
  786. wxColour m_panel_label_background_colour;
  787. wxColour m_panel_label_background_gradient_colour;
  788. wxColour m_panel_hover_label_background_colour;
  789. wxColour m_panel_hover_label_background_gradient_colour;
  790. wxBrush m_background_brush;
  791. wxBrush m_tab_active_top_background_brush;
  792. wxBrush m_tab_hover_background_brush;
  793. wxBrush m_button_bar_hover_background_brush;
  794. wxBrush m_button_bar_active_background_brush;
  795. wxBrush m_gallery_button_active_background_brush;
  796. wxBrush m_gallery_button_hover_background_brush;
  797. wxBrush m_gallery_button_disabled_background_brush;
  798. wxBrush m_tool_hover_background_brush;
  799. wxBrush m_tool_active_background_brush;
  800. wxPen m_toolbar_hover_borden_pen;
  801. wxFont m_tab_active_label_font;
  802. };
  803. #if defined(__WXMSW__)
  804. typedef wxRibbonMSWArtProvider wxRibbonDefaultArtProvider;
  805. #elif defined(__WXOSX_CARBON__) || \
  806. defined(__WXOSX_COCOA__) || \
  807. defined(__WXOSX_IPHONE__) || \
  808. defined(__WXCOCOA__)
  809. // TODO: Once implemented, change typedef to OSX
  810. // typedef wxRibbonOSXArtProvider wxRibbonDefaultArtProvider;
  811. typedef wxRibbonAUIArtProvider wxRibbonDefaultArtProvider;
  812. #else
  813. // TODO: Once implemented, change typedef to AUI
  814. typedef wxRibbonAUIArtProvider wxRibbonDefaultArtProvider;
  815. #endif
  816. #endif // wxUSE_RIBBON
  817. #endif // _WX_RIBBON_ART_H_