|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2022 - Raw Material Software Limited
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- By using JUCE, you agree to the terms of both the JUCE 7 End-User License
- Agreement and JUCE Privacy Policy.
-
- End User License Agreement: www.juce.com/juce-7-licence
- Privacy Policy: www.juce.com/juce-privacy-policy
-
- Or: You may also use this code under the terms of the GPL v3 (see
- www.gnu.org/licenses).
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
- */
-
- namespace juce
- {
-
- //==============================================================================
- /**
- The latest JUCE look-and-feel style, as introduced in 2017.
- @see LookAndFeel, LookAndFeel_V1, LookAndFeel_V2, LookAndFeel_V3
-
- @tags{GUI}
- */
- class JUCE_API LookAndFeel_V4 : public LookAndFeel_V3
- {
- public:
- /**
- A struct containing the set of colours to apply to the GUI
- */
- class ColourScheme
- {
- public:
- /** The standard set of colours to use. */
- enum UIColour
- {
- windowBackground = 0,
- widgetBackground,
- menuBackground,
- outline,
- defaultText,
- defaultFill,
- highlightedText,
- highlightedFill,
- menuText,
-
- numColours
- };
-
- template <typename... ItemColours>
- ColourScheme (ItemColours... coloursToUse)
- {
- static_assert (sizeof... (coloursToUse) == numColours, "Must supply one colour for each UIColour item");
- const Colour c[] = { Colour (coloursToUse)... };
-
- for (int i = 0; i < numColours; ++i)
- palette[i] = c[i];
- }
-
- ColourScheme (const ColourScheme&) = default;
- ColourScheme& operator= (const ColourScheme&) = default;
-
- /** Returns a colour from the scheme */
- Colour getUIColour (UIColour colourToGet) const noexcept;
-
- /** Sets a scheme colour. */
- void setUIColour (UIColour colourToSet, Colour newColour) noexcept;
-
- /** Returns true if two ColourPalette objects contain the same colours. */
- bool operator== (const ColourScheme&) const noexcept;
- /** Returns false if two ColourPalette objects contain the same colours. */
- bool operator!= (const ColourScheme&) const noexcept;
-
- private:
- Colour palette[numColours];
- };
-
- //==============================================================================
- /** Creates a LookAndFeel_V4 object with a default colour scheme. */
- LookAndFeel_V4();
-
- /** Creates a LookAndFeel_V4 object with a given colour scheme. */
- LookAndFeel_V4 (ColourScheme);
-
- /** Destructor. */
- ~LookAndFeel_V4() override;
-
- //==============================================================================
- void setColourScheme (ColourScheme);
- ColourScheme& getCurrentColourScheme() noexcept { return currentColourScheme; }
-
- static ColourScheme getDarkColourScheme();
- static ColourScheme getMidnightColourScheme();
- static ColourScheme getGreyColourScheme();
- static ColourScheme getLightColourScheme();
-
- //==============================================================================
- Button* createDocumentWindowButton (int) override;
- void positionDocumentWindowButtons (DocumentWindow&, int, int, int, int, Button*, Button*, Button*, bool) override;
- void drawDocumentWindowTitleBar (DocumentWindow&, Graphics&, int, int, int, int, const Image*, bool) override;
-
- //==============================================================================
- Font getTextButtonFont (TextButton&, int buttonHeight) override;
-
- void drawButtonBackground (Graphics&, Button&, const Colour& backgroundColour,
- bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) override;
-
- void drawToggleButton (Graphics&, ToggleButton&,
- bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) override;
- void drawTickBox (Graphics&, Component&,
- float x, float y, float w, float h,
- bool ticked, bool isEnabled,
- bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) override;
-
- void changeToggleButtonWidthToFitText (ToggleButton&) override;
-
- //==============================================================================
- AlertWindow* createAlertWindow (const String& title, const String& message,
- const String& button1,
- const String& button2,
- const String& button3,
- MessageBoxIconType iconType,
- int numButtons, Component* associatedComponent) override;
- void drawAlertBox (Graphics&, AlertWindow&, const Rectangle<int>& textArea, TextLayout&) override;
-
- int getAlertWindowButtonHeight() override;
- Font getAlertWindowTitleFont() override;
- Font getAlertWindowMessageFont() override;
- Font getAlertWindowFont() override;
-
- //==============================================================================
- void drawProgressBar (Graphics&, ProgressBar&, int width, int height, double progress, const String& textToShow) override;
- bool isProgressBarOpaque (ProgressBar&) override { return false; }
-
- //==============================================================================
- int getDefaultScrollbarWidth() override;
- void drawScrollbar (Graphics&, ScrollBar&, int x, int y, int width, int height, bool isScrollbarVertical,
- int thumbStartPosition, int thumbSize, bool isMouseOver, bool isMouseDown) override;
-
- //==============================================================================
- Path getTickShape (float height) override;
- Path getCrossShape (float height) override;
-
- //==============================================================================
- void fillTextEditorBackground (Graphics&, int width, int height, TextEditor&) override;
- void drawTextEditorOutline (Graphics&, int width, int height, TextEditor&) override;
-
- //==============================================================================
- Button* createFileBrowserGoUpButton() override;
-
- void layoutFileBrowserComponent (FileBrowserComponent&,
- DirectoryContentsDisplayComponent*,
- FilePreviewComponent*,
- ComboBox* currentPathBox,
- TextEditor* filenameBox,
- Button* goUpButton) override;
-
- void drawFileBrowserRow (Graphics&, int width, int height,
- const File& file, const String& filename, Image* icon,
- const String& fileSizeDescription, const String& fileTimeDescription,
- bool isDirectory, bool isItemSelected, int itemIndex,
- DirectoryContentsDisplayComponent&) override;
-
- //==============================================================================
- void drawPopupMenuItem (Graphics&, const Rectangle<int>& area,
- bool isSeparator, bool isActive, bool isHighlighted, bool isTicked, bool hasSubMenu,
- const String& text, const String& shortcutKeyText,
- const Drawable* icon, const Colour* textColour) override;
-
- void getIdealPopupMenuItemSize (const String& text, bool isSeparator, int standardMenuItemHeight,
- int& idealWidth, int& idealHeight) override;
-
- void drawMenuBarBackground (Graphics&, int width, int height, bool isMouseOverBar, MenuBarComponent&) override;
-
- void drawMenuBarItem (Graphics&, int width, int height,
- int itemIndex, const String& itemText,
- bool isMouseOverItem, bool isMenuOpen, bool isMouseOverBar,
- MenuBarComponent&) override;
-
- //==============================================================================
- void drawComboBox (Graphics&, int width, int height, bool isButtonDown,
- int buttonX, int buttonY, int buttonW, int buttonH,
- ComboBox&) override;
- Font getComboBoxFont (ComboBox&) override;
- void positionComboBoxText (ComboBox&, Label&) override;
-
- //==============================================================================
- int getSliderThumbRadius (Slider&) override;
-
- void drawLinearSlider (Graphics&, int x, int y, int width, int height,
- float sliderPos, float minSliderPos, float maxSliderPos,
- const Slider::SliderStyle, Slider&) override;
-
- void drawRotarySlider (Graphics&, int x, int y, int width, int height,
- float sliderPosProportional, float rotaryStartAngle,
- float rotaryEndAngle, Slider&) override;
-
- void drawPointer (Graphics&, float x, float y, float diameter,
- const Colour&, int direction) noexcept;
-
- Label* createSliderTextBox (Slider&) override;
-
- //==============================================================================
- void drawTooltip (Graphics&, const String& text, int width, int height) override;
-
- //==============================================================================
- void drawConcertinaPanelHeader (Graphics&, const Rectangle<int>& area,
- bool isMouseOver, bool isMouseDown,
- ConcertinaPanel&, Component& panel) override;
-
- //==============================================================================
- void drawLevelMeter (Graphics&, int, int, float) override;
-
- //==============================================================================
- void paintToolbarBackground (Graphics&, int width, int height, Toolbar&) override;
-
- void paintToolbarButtonLabel (Graphics&, int x, int y, int width, int height,
- const String& text, ToolbarItemComponent&) override;
-
- //==============================================================================
- void drawPropertyPanelSectionHeader (Graphics&, const String& name, bool isOpen, int width, int height) override;
- void drawPropertyComponentBackground (Graphics&, int width, int height, PropertyComponent&) override;
- void drawPropertyComponentLabel (Graphics&, int width, int height, PropertyComponent&) override;
- Rectangle<int> getPropertyComponentContentPosition (PropertyComponent&) override;
-
- //==============================================================================
- void drawCallOutBoxBackground (CallOutBox&, Graphics&, const Path&, Image&) override;
-
- //==============================================================================
- void drawStretchableLayoutResizerBar (Graphics&, int, int, bool, bool, bool) override;
-
- private:
- //==============================================================================
- void drawLinearProgressBar (Graphics&, ProgressBar&, int width, int height, double progress, const String&);
- void drawCircularProgressBar (Graphics&, ProgressBar&, const String&);
-
- int getPropertyComponentIndent (PropertyComponent&);
-
- //==============================================================================
- void initialiseColours();
- ColourScheme currentColourScheme;
-
- //==============================================================================
- JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LookAndFeel_V4)
- };
-
- } // namespace juce
|