The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

694 lines
34KB

  1. /*
  2. ==============================================================================
  3. This file is part of the JUCE library.
  4. Copyright (c) 2013 - Raw Material Software Ltd.
  5. Permission is granted to use this software under the terms of either:
  6. a) the GPL v2 (or any later version)
  7. b) the Affero GPL v3
  8. Details of these licenses can be found at: www.gnu.org/licenses
  9. JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
  10. WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  11. A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  12. ------------------------------------------------------------------------------
  13. To release a closed-source product which uses JUCE, commercial licenses are
  14. available: visit www.juce.com for more information.
  15. ==============================================================================
  16. */
  17. #ifndef JUCE_LOOKANDFEEL_H_INCLUDED
  18. #define JUCE_LOOKANDFEEL_H_INCLUDED
  19. #include "../widgets/juce_Slider.h"
  20. #include "../layout/juce_TabbedComponent.h"
  21. #include "../windows/juce_AlertWindow.h"
  22. class ToggleButton;
  23. class TextButton;
  24. class AlertWindow;
  25. class TextLayout;
  26. class ScrollBar;
  27. class ComboBox;
  28. class Button;
  29. class FilenameComponent;
  30. class DocumentWindow;
  31. class ResizableWindow;
  32. class GroupComponent;
  33. class MenuBarComponent;
  34. class DropShadower;
  35. class GlyphArrangement;
  36. class PropertyComponent;
  37. class TableHeaderComponent;
  38. class Toolbar;
  39. class ToolbarItemComponent;
  40. class PopupMenu;
  41. class ProgressBar;
  42. class FileBrowserComponent;
  43. class DirectoryContentsDisplayComponent;
  44. class FilePreviewComponent;
  45. class ImageButton;
  46. class CallOutBox;
  47. class Drawable;
  48. class CaretComponent;
  49. class BubbleComponent;
  50. //==============================================================================
  51. /**
  52. LookAndFeel objects define the appearance of all the JUCE widgets, and subclasses
  53. can be used to apply different 'skins' to the application.
  54. */
  55. class JUCE_API LookAndFeel
  56. {
  57. public:
  58. //==============================================================================
  59. /** Creates the default JUCE look and feel. */
  60. LookAndFeel();
  61. /** Destructor. */
  62. virtual ~LookAndFeel();
  63. //==============================================================================
  64. /** Returns the current default look-and-feel for a component to use when it
  65. hasn't got one explicitly set.
  66. @see setDefaultLookAndFeel
  67. */
  68. static LookAndFeel& getDefaultLookAndFeel() noexcept;
  69. /** Changes the default look-and-feel.
  70. @param newDefaultLookAndFeel the new look-and-feel object to use - if this is
  71. set to null, it will revert to using the default one. The
  72. object passed-in must be deleted by the caller when
  73. it's no longer needed.
  74. @see getDefaultLookAndFeel
  75. */
  76. static void setDefaultLookAndFeel (LookAndFeel* newDefaultLookAndFeel) noexcept;
  77. //==============================================================================
  78. /** Looks for a colour that has been registered with the given colour ID number.
  79. If a colour has been set for this ID number using setColour(), then it is
  80. returned. If none has been set, it will just return Colours::black.
  81. The colour IDs for various purposes are stored as enums in the components that
  82. they are relevent to - for an example, see Slider::ColourIds,
  83. Label::ColourIds, TextEditor::ColourIds, TreeView::ColourIds, etc.
  84. If you're looking up a colour for use in drawing a component, it's usually
  85. best not to call this directly, but to use the Component::findColour() method
  86. instead. That will first check whether a suitable colour has been registered
  87. directly with the component, and will fall-back on calling the component's
  88. LookAndFeel's findColour() method if none is found.
  89. @see setColour, Component::findColour, Component::setColour
  90. */
  91. Colour findColour (int colourId) const noexcept;
  92. /** Registers a colour to be used for a particular purpose.
  93. For more details, see the comments for findColour().
  94. @see findColour, Component::findColour, Component::setColour
  95. */
  96. void setColour (int colourId, const Colour& colour) noexcept;
  97. /** Returns true if the specified colour ID has been explicitly set using the
  98. setColour() method.
  99. */
  100. bool isColourSpecified (int colourId) const noexcept;
  101. //==============================================================================
  102. virtual Typeface::Ptr getTypefaceForFont (const Font& font);
  103. /** Allows you to change the default sans-serif font.
  104. If you need to supply your own Typeface object for any of the default fonts, rather
  105. than just supplying the name (e.g. if you want to use an embedded font), then
  106. you should instead override getTypefaceForFont() to create and return the typeface.
  107. */
  108. void setDefaultSansSerifTypefaceName (const String& newName);
  109. //==============================================================================
  110. /** Override this to get the chance to swap a component's mouse cursor for a
  111. customised one.
  112. */
  113. virtual MouseCursor getMouseCursorFor (Component& component);
  114. //==============================================================================
  115. // Creates a new graphics context object.
  116. virtual LowLevelGraphicsContext* createGraphicsContext (const Image& imageToRenderOn,
  117. const Point<int>& origin,
  118. const RectangleList<int>& initialClip);
  119. //==============================================================================
  120. /** Draws the lozenge-shaped background for a standard button. */
  121. virtual void drawButtonBackground (Graphics&,
  122. Button& button,
  123. const Colour& backgroundColour,
  124. bool isMouseOverButton,
  125. bool isButtonDown);
  126. virtual Font getTextButtonFont (TextButton& button);
  127. /** Draws the text for a TextButton. */
  128. virtual void drawButtonText (Graphics&,
  129. TextButton& button,
  130. bool isMouseOverButton,
  131. bool isButtonDown);
  132. /** Draws the contents of a standard ToggleButton. */
  133. virtual void drawToggleButton (Graphics&,
  134. ToggleButton& button,
  135. bool isMouseOverButton,
  136. bool isButtonDown);
  137. virtual void changeToggleButtonWidthToFitText (ToggleButton& button);
  138. virtual void drawTickBox (Graphics&,
  139. Component& component,
  140. float x, float y, float w, float h,
  141. bool ticked,
  142. bool isEnabled,
  143. bool isMouseOverButton,
  144. bool isButtonDown);
  145. virtual void drawDrawableButton (Graphics&,
  146. DrawableButton& button,
  147. bool isMouseOverButton,
  148. bool isButtonDown);
  149. //==============================================================================
  150. // AlertWindow handling..
  151. virtual AlertWindow* createAlertWindow (const String& title,
  152. const String& message,
  153. const String& button1,
  154. const String& button2,
  155. const String& button3,
  156. AlertWindow::AlertIconType iconType,
  157. int numButtons,
  158. Component* associatedComponent);
  159. virtual void drawAlertBox (Graphics&,
  160. AlertWindow& alert,
  161. const Rectangle<int>& textArea,
  162. TextLayout& textLayout);
  163. virtual int getAlertBoxWindowFlags();
  164. virtual int getAlertWindowButtonHeight();
  165. virtual Font getAlertWindowMessageFont();
  166. virtual Font getAlertWindowFont();
  167. void setUsingNativeAlertWindows (bool shouldUseNativeAlerts);
  168. bool isUsingNativeAlertWindows();
  169. /** Draws a progress bar.
  170. If the progress value is less than 0 or greater than 1.0, this should draw a spinning
  171. bar that fills the whole space (i.e. to say that the app is still busy but the progress
  172. isn't known). It can use the current time as a basis for playing an animation.
  173. (Used by progress bars in AlertWindow).
  174. */
  175. virtual void drawProgressBar (Graphics&, ProgressBar& progressBar,
  176. int width, int height,
  177. double progress, const String& textToShow);
  178. //==============================================================================
  179. // Draws a small image that spins to indicate that something's happening..
  180. // This method should use the current time to animate itself, so just keep
  181. // repainting it every so often.
  182. virtual void drawSpinningWaitAnimation (Graphics&, const Colour& colour,
  183. int x, int y, int w, int h);
  184. //==============================================================================
  185. virtual bool areScrollbarButtonsVisible();
  186. /** Draws one of the buttons on a scrollbar.
  187. @param g the context to draw into
  188. @param scrollbar the bar itself
  189. @param width the width of the button
  190. @param height the height of the button
  191. @param buttonDirection the direction of the button, where 0 = up, 1 = right, 2 = down, 3 = left
  192. @param isScrollbarVertical true if it's a vertical bar, false if horizontal
  193. @param isMouseOverButton whether the mouse is currently over the button (also true if it's held down)
  194. @param isButtonDown whether the mouse button's held down
  195. */
  196. virtual void drawScrollbarButton (Graphics& g,
  197. ScrollBar& scrollbar,
  198. int width, int height,
  199. int buttonDirection,
  200. bool isScrollbarVertical,
  201. bool isMouseOverButton,
  202. bool isButtonDown);
  203. /** Draws the thumb area of a scrollbar.
  204. @param g the context to draw into
  205. @param scrollbar the bar itself
  206. @param x the x position of the left edge of the thumb area to draw in
  207. @param y the y position of the top edge of the thumb area to draw in
  208. @param width the width of the thumb area to draw in
  209. @param height the height of the thumb area to draw in
  210. @param isScrollbarVertical true if it's a vertical bar, false if horizontal
  211. @param thumbStartPosition for vertical bars, the y coordinate of the top of the
  212. thumb, or its x position for horizontal bars
  213. @param thumbSize for vertical bars, the height of the thumb, or its width for
  214. horizontal bars. This may be 0 if the thumb shouldn't be drawn.
  215. @param isMouseOver whether the mouse is over the thumb area, also true if the mouse is
  216. currently dragging the thumb
  217. @param isMouseDown whether the mouse is currently dragging the scrollbar
  218. */
  219. virtual void drawScrollbar (Graphics& g,
  220. ScrollBar& scrollbar,
  221. int x, int y,
  222. int width, int height,
  223. bool isScrollbarVertical,
  224. int thumbStartPosition,
  225. int thumbSize,
  226. bool isMouseOver,
  227. bool isMouseDown);
  228. /** Returns the component effect to use for a scrollbar */
  229. virtual ImageEffectFilter* getScrollbarEffect();
  230. /** Returns the minimum length in pixels to use for a scrollbar thumb. */
  231. virtual int getMinimumScrollbarThumbSize (ScrollBar& scrollbar);
  232. /** Returns the default thickness to use for a scrollbar. */
  233. virtual int getDefaultScrollbarWidth();
  234. /** Returns the length in pixels to use for a scrollbar button. */
  235. virtual int getScrollbarButtonSize (ScrollBar& scrollbar);
  236. //==============================================================================
  237. /** Returns a tick shape for use in yes/no boxes, etc. */
  238. virtual Path getTickShape (float height);
  239. /** Returns a cross shape for use in yes/no boxes, etc. */
  240. virtual Path getCrossShape (float height);
  241. //==============================================================================
  242. /** Draws the + or - box in a treeview. */
  243. virtual void drawTreeviewPlusMinusBox (Graphics&, int x, int y, int w, int h, bool isPlus, bool isMouseOver);
  244. //==============================================================================
  245. virtual void fillTextEditorBackground (Graphics&, int width, int height, TextEditor& textEditor);
  246. virtual void drawTextEditorOutline (Graphics&, int width, int height, TextEditor& textEditor);
  247. virtual CaretComponent* createCaretComponent (Component* keyFocusOwner);
  248. //==============================================================================
  249. // These return a pointer to an internally cached drawable - make sure you don't keep
  250. // a copy of this pointer anywhere, as it may become invalid in the future.
  251. virtual const Drawable* getDefaultFolderImage();
  252. virtual const Drawable* getDefaultDocumentFileImage();
  253. virtual AttributedString createFileChooserHeaderText (const String& title,
  254. const String& instructions);
  255. virtual void drawFileBrowserRow (Graphics&, int width, int height,
  256. const String& filename, Image* icon,
  257. const String& fileSizeDescription,
  258. const String& fileTimeDescription,
  259. bool isDirectory,
  260. bool isItemSelected,
  261. int itemIndex,
  262. DirectoryContentsDisplayComponent& component);
  263. virtual Button* createFileBrowserGoUpButton();
  264. virtual void layoutFileBrowserComponent (FileBrowserComponent& browserComp,
  265. DirectoryContentsDisplayComponent* fileListComponent,
  266. FilePreviewComponent* previewComp,
  267. ComboBox* currentPathBox,
  268. TextEditor* filenameBox,
  269. Button* goUpButton);
  270. //==============================================================================
  271. virtual void drawBubble (Graphics&, BubbleComponent&,
  272. const Point<float>& tip, const Rectangle<float>& body);
  273. //==============================================================================
  274. virtual void drawLasso (Graphics&, Component& lassoComp);
  275. //==============================================================================
  276. /** Fills the background of a popup menu component. */
  277. virtual void drawPopupMenuBackground (Graphics&, int width, int height);
  278. /** Draws one of the items in a popup menu. */
  279. virtual void drawPopupMenuItem (Graphics&,
  280. int width, int height,
  281. bool isSeparator,
  282. bool isActive,
  283. bool isHighlighted,
  284. bool isTicked,
  285. bool hasSubMenu,
  286. const String& text,
  287. const String& shortcutKeyText,
  288. Image* image,
  289. const Colour* const textColour);
  290. /** Returns the size and style of font to use in popup menus. */
  291. virtual Font getPopupMenuFont();
  292. virtual void drawPopupMenuUpDownArrow (Graphics&,
  293. int width, int height,
  294. bool isScrollUpArrow);
  295. /** Finds the best size for an item in a popup menu. */
  296. virtual void getIdealPopupMenuItemSize (const String& text,
  297. bool isSeparator,
  298. int standardMenuItemHeight,
  299. int& idealWidth,
  300. int& idealHeight);
  301. virtual int getMenuWindowFlags();
  302. virtual void drawMenuBarBackground (Graphics&, int width, int height,
  303. bool isMouseOverBar,
  304. MenuBarComponent& menuBar);
  305. virtual int getMenuBarItemWidth (MenuBarComponent& menuBar, int itemIndex, const String& itemText);
  306. virtual Font getMenuBarFont (MenuBarComponent& menuBar, int itemIndex, const String& itemText);
  307. virtual void drawMenuBarItem (Graphics&,
  308. int width, int height,
  309. int itemIndex,
  310. const String& itemText,
  311. bool isMouseOverItem,
  312. bool isMenuOpen,
  313. bool isMouseOverBar,
  314. MenuBarComponent& menuBar);
  315. //==============================================================================
  316. virtual void drawComboBox (Graphics&, int width, int height,
  317. bool isButtonDown,
  318. int buttonX, int buttonY,
  319. int buttonW, int buttonH,
  320. ComboBox& box);
  321. virtual Font getComboBoxFont (ComboBox& box);
  322. virtual Label* createComboBoxTextBox (ComboBox& box);
  323. virtual void positionComboBoxText (ComboBox& box, Label& labelToPosition);
  324. //==============================================================================
  325. virtual void drawLabel (Graphics&, Label&);
  326. virtual Font getLabelFont (Label&);
  327. //==============================================================================
  328. virtual void drawLinearSlider (Graphics&,
  329. int x, int y,
  330. int width, int height,
  331. float sliderPos,
  332. float minSliderPos,
  333. float maxSliderPos,
  334. const Slider::SliderStyle style,
  335. Slider& slider);
  336. virtual void drawLinearSliderBackground (Graphics&,
  337. int x, int y,
  338. int width, int height,
  339. float sliderPos,
  340. float minSliderPos,
  341. float maxSliderPos,
  342. const Slider::SliderStyle style,
  343. Slider& slider);
  344. virtual void drawLinearSliderThumb (Graphics&,
  345. int x, int y,
  346. int width, int height,
  347. float sliderPos,
  348. float minSliderPos,
  349. float maxSliderPos,
  350. const Slider::SliderStyle style,
  351. Slider& slider);
  352. virtual int getSliderThumbRadius (Slider& slider);
  353. virtual void drawRotarySlider (Graphics&,
  354. int x, int y,
  355. int width, int height,
  356. float sliderPosProportional,
  357. float rotaryStartAngle,
  358. float rotaryEndAngle,
  359. Slider& slider);
  360. virtual Button* createSliderButton (bool isIncrement);
  361. virtual Label* createSliderTextBox (Slider& slider);
  362. virtual ImageEffectFilter* getSliderEffect();
  363. virtual Font getSliderPopupFont();
  364. virtual int getSliderPopupPlacement();
  365. //==============================================================================
  366. virtual void getTooltipSize (const String& tipText, int& width, int& height);
  367. virtual void drawTooltip (Graphics&, const String& text, int width, int height);
  368. //==============================================================================
  369. virtual Button* createFilenameComponentBrowseButton (const String& text);
  370. virtual void layoutFilenameComponent (FilenameComponent& filenameComp,
  371. ComboBox* filenameBox, Button* browseButton);
  372. //==============================================================================
  373. virtual void drawConcertinaPanelHeader (Graphics&, const Rectangle<int>& area,
  374. bool isMouseOver, bool isMouseDown,
  375. ConcertinaPanel&, Component& panel);
  376. //==============================================================================
  377. virtual void drawCornerResizer (Graphics&,
  378. int w, int h,
  379. bool isMouseOver,
  380. bool isMouseDragging);
  381. virtual void drawResizableFrame (Graphics&,
  382. int w, int h,
  383. const BorderSize<int>&);
  384. //==============================================================================
  385. virtual void fillResizableWindowBackground (Graphics&, int w, int h,
  386. const BorderSize<int>&,
  387. ResizableWindow& window);
  388. virtual void drawResizableWindowBorder (Graphics&,
  389. int w, int h,
  390. const BorderSize<int>& border,
  391. ResizableWindow& window);
  392. //==============================================================================
  393. virtual void drawDocumentWindowTitleBar (DocumentWindow& window,
  394. Graphics&, int w, int h,
  395. int titleSpaceX, int titleSpaceW,
  396. const Image* icon,
  397. bool drawTitleTextOnLeft);
  398. virtual Button* createDocumentWindowButton (int buttonType);
  399. virtual void positionDocumentWindowButtons (DocumentWindow& window,
  400. int titleBarX, int titleBarY,
  401. int titleBarW, int titleBarH,
  402. Button* minimiseButton,
  403. Button* maximiseButton,
  404. Button* closeButton,
  405. bool positionTitleBarButtonsOnLeft);
  406. virtual int getDefaultMenuBarHeight();
  407. //==============================================================================
  408. virtual DropShadower* createDropShadowerForComponent (Component* component);
  409. //==============================================================================
  410. virtual void drawStretchableLayoutResizerBar (Graphics&,
  411. int w, int h,
  412. bool isVerticalBar,
  413. bool isMouseOver,
  414. bool isMouseDragging);
  415. //==============================================================================
  416. virtual void drawGroupComponentOutline (Graphics&, int w, int h,
  417. const String& text,
  418. const Justification& position,
  419. GroupComponent& group);
  420. //==============================================================================
  421. virtual int getTabButtonSpaceAroundImage();
  422. virtual int getTabButtonOverlap (int tabDepth);
  423. virtual int getTabButtonBestWidth (TabBarButton&, int tabDepth);
  424. virtual Rectangle<int> getTabButtonExtraComponentBounds (const TabBarButton&, Rectangle<int>& textArea, Component& extraComp);
  425. virtual void drawTabButton (TabBarButton&, Graphics&, bool isMouseOver, bool isMouseDown);
  426. virtual void drawTabButtonText (TabBarButton&, Graphics&, bool isMouseOver, bool isMouseDown);
  427. virtual void drawTabbedButtonBarBackground (TabbedButtonBar&, Graphics&);
  428. virtual void drawTabAreaBehindFrontButton (TabbedButtonBar&, Graphics&, int w, int h);
  429. virtual void createTabButtonShape (TabBarButton&, Path& path, bool isMouseOver, bool isMouseDown);
  430. virtual void fillTabButtonShape (TabBarButton&, Graphics&, const Path& path, bool isMouseOver, bool isMouseDown);
  431. virtual Button* createTabBarExtrasButton();
  432. //==============================================================================
  433. virtual void drawImageButton (Graphics&, Image* image,
  434. int imageX, int imageY, int imageW, int imageH,
  435. const Colour& overlayColour,
  436. float imageOpacity,
  437. ImageButton& button);
  438. //==============================================================================
  439. virtual void drawTableHeaderBackground (Graphics&, TableHeaderComponent&);
  440. virtual void drawTableHeaderColumn (Graphics&, const String& columnName, int columnId,
  441. int width, int height,
  442. bool isMouseOver, bool isMouseDown,
  443. int columnFlags);
  444. //==============================================================================
  445. virtual void paintToolbarBackground (Graphics&, int width, int height, Toolbar& toolbar);
  446. virtual Button* createToolbarMissingItemsButton (Toolbar& toolbar);
  447. virtual void paintToolbarButtonBackground (Graphics&, int width, int height,
  448. bool isMouseOver, bool isMouseDown,
  449. ToolbarItemComponent& component);
  450. virtual void paintToolbarButtonLabel (Graphics&, int x, int y, int width, int height,
  451. const String& text, ToolbarItemComponent& component);
  452. //==============================================================================
  453. virtual void drawPropertyPanelSectionHeader (Graphics&, const String& name,
  454. bool isOpen, int width, int height);
  455. virtual void drawPropertyComponentBackground (Graphics&, int width, int height,
  456. PropertyComponent& component);
  457. virtual void drawPropertyComponentLabel (Graphics&, int width, int height,
  458. PropertyComponent& component);
  459. virtual Rectangle<int> getPropertyComponentContentPosition (PropertyComponent& component);
  460. //==============================================================================
  461. virtual void drawCallOutBoxBackground (CallOutBox& box, Graphics&, const Path& path, Image& cachedImage);
  462. //==============================================================================
  463. virtual void drawLevelMeter (Graphics&, int width, int height, float level);
  464. virtual void drawKeymapChangeButton (Graphics&, int width, int height, Button& button, const String& keyDescription);
  465. //==============================================================================
  466. /** Plays the system's default 'beep' noise, to alert the user about something very important.
  467. */
  468. virtual void playAlertSound();
  469. //==============================================================================
  470. /** Draws a 3D raised (or indented) bevel using two colours.
  471. The bevel is drawn inside the given rectangle, and greater bevel thicknesses
  472. extend inwards.
  473. The top-left colour is used for the top- and left-hand edges of the
  474. bevel; the bottom-right colour is used for the bottom- and right-hand
  475. edges.
  476. If useGradient is true, then the bevel fades out to make it look more curved
  477. and less angular. If sharpEdgeOnOutside is true, the outside of the bevel is
  478. sharp, and it fades towards the centre; if sharpEdgeOnOutside is false, then
  479. the centre edges are sharp and it fades towards the outside.
  480. */
  481. static void drawBevel (Graphics&,
  482. int x, int y, int width, int height,
  483. int bevelThickness,
  484. const Colour& topLeftColour = Colours::white,
  485. const Colour& bottomRightColour = Colours::black,
  486. bool useGradient = true,
  487. bool sharpEdgeOnOutside = true);
  488. /** Utility function to draw a shiny, glassy circle (for round LED-type buttons). */
  489. static void drawGlassSphere (Graphics&,
  490. float x, float y,
  491. float diameter,
  492. const Colour& colour,
  493. float outlineThickness) noexcept;
  494. static void drawGlassPointer (Graphics&,
  495. float x, float y,
  496. float diameter,
  497. const Colour& colour, float outlineThickness,
  498. int direction) noexcept;
  499. /** Utility function to draw a shiny, glassy oblong (for text buttons). */
  500. static void drawGlassLozenge (Graphics&,
  501. float x, float y,
  502. float width, float height,
  503. const Colour& colour,
  504. float outlineThickness,
  505. float cornerSize,
  506. bool flatOnLeft, bool flatOnRight,
  507. bool flatOnTop, bool flatOnBottom) noexcept;
  508. static Drawable* loadDrawableFromData (const void* data, size_t numBytes);
  509. private:
  510. //==============================================================================
  511. friend class WeakReference<LookAndFeel>;
  512. WeakReference<LookAndFeel>::Master masterReference;
  513. Array <int> colourIds;
  514. Array <Colour> colours;
  515. // default typeface names
  516. String defaultSans, defaultSerif, defaultFixed;
  517. ScopedPointer<Drawable> folderImage, documentImage;
  518. bool useNativeAlertWindows;
  519. void drawShinyButtonShape (Graphics&,
  520. float x, float y, float w, float h, float maxCornerSize,
  521. const Colour& baseColour,
  522. float strokeWidth,
  523. bool flatOnLeft,
  524. bool flatOnRight,
  525. bool flatOnTop,
  526. bool flatOnBottom) noexcept;
  527. #if JUCE_CATCH_DEPRECATED_CODE_MISUSE
  528. // These methods have been deprecated - see their new parameter lists..
  529. virtual int drawFileBrowserRow (Graphics&, int, int, const String&, Image*, const String&, const String&, bool, bool, int) { return 0; }
  530. virtual int drawTabButton (Graphics&, int, int, const Colour&, int, const String&, Button&, TabbedButtonBar::Orientation, bool, bool, bool) { return 0; }
  531. virtual int createTabButtonShape (Path&, int, int, int, const String&, Button&, TabbedButtonBar::Orientation, bool, bool, bool) { return 0; }
  532. virtual int fillTabButtonShape (Graphics&, const Path&, const Colour&, int, const String&, Button&, TabbedButtonBar::Orientation, bool, bool, bool) { return 0; }
  533. virtual int drawTabAreaBehindFrontButton (Graphics&, int, int, TabbedButtonBar&, TabbedButtonBar::Orientation) { return 0; }
  534. virtual int drawTabButtonText (Graphics&, int, int, int, int, const Colour&, int, const String&, Button&, TabbedButtonBar::Orientation, bool, bool, bool) { return 0; }
  535. virtual int getTabButtonBestWidth (int, const String&, int, Button&) { return 0; }
  536. virtual int drawBubble (Graphics&, float, float, float, float, float, float) { return 0; }
  537. virtual int getFontForTextButton (TextButton&) { return 0; }
  538. virtual int createFileChooserHeaderText (const String&, const String&, GlyphArrangement&, int) { return 0; }
  539. #endif
  540. class GlassWindowButton;
  541. class SliderLabelComp;
  542. JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LookAndFeel)
  543. };
  544. #endif // JUCE_LOOKANDFEEL_H_INCLUDED