#pragma once #include class InstaDrumsLookAndFeel : public juce::LookAndFeel_V4 { public: // Colour palette static inline const juce::Colour bgDark { 0xff1a1a2e }; static inline const juce::Colour bgMedium { 0xff16213e }; static inline const juce::Colour bgLight { 0xff0f3460 }; static inline const juce::Colour textPrimary { 0xffe0e0e0 }; static inline const juce::Colour textSecondary { 0xff888899 }; static inline const juce::Colour accent { 0xff00ff88 }; // Knob type property key static constexpr const char* knobTypeProperty = "knobType"; InstaDrumsLookAndFeel(); void drawRotarySlider (juce::Graphics& g, int x, int y, int width, int height, float sliderPosProportional, float rotaryStartAngle, float rotaryEndAngle, juce::Slider& slider) override; void drawButtonBackground (juce::Graphics& g, juce::Button& button, const juce::Colour& backgroundColour, bool shouldDrawButtonAsHighlighted, bool shouldDrawButtonAsDown) override; // Custom fonts juce::Font getRegularFont (float height) const; juce::Font getMediumFont (float height) const; juce::Font getBoldFont (float height) const; // Background texture void drawBackgroundTexture (juce::Graphics& g, juce::Rectangle area); juce::Typeface::Ptr getTypefaceForFont (const juce::Font& font) override; private: juce::Typeface::Ptr typefaceRegular; juce::Typeface::Ptr typefaceMedium; juce::Typeface::Ptr typefaceBold; juce::Image noiseTexture; void generateNoiseTexture(); };