How about this? Apologies for the eye-bleeding colors; wanted to make sure I could see any gaps.
class MainWindow : public juce::DocumentWindow, public juce::LookAndFeel_V4
{
public:
MainWindow(juce::String name)
: DocumentWindow(name, juce::Colours::transparentBlack, 0)
{
setUsingNativeTitleBar(false);
setOpaque(false);
setDropShadowEnabled(false);
setContentNonOwned(&mainComponent, false);
setResizable(true, false);
centreWithSize(500, 500);
setVisible(true);
setLookAndFeel(this);
}
~MainWindow()
{
setLookAndFeel(nullptr);
}
void closeButtonPressed() override
{
JUCEApplication::getInstance()->systemRequestedQuit();
}
void paint(juce::Graphics& g) override
{
getLookAndFeel().drawResizableWindowBorder(g, getWidth(), getHeight(), juce::BorderSize<int>{ 1 }, * this);
getLookAndFeel().drawDocumentWindowTitleBar(*this, g,
getWidth(), getTitleBarHeight(),
0, getWidth(),
nullptr, false);
}
void drawResizableWindowBorder(juce::Graphics& g,
int w,
int h,
const juce::BorderSize< int >& border,
juce::ResizableWindow& window
) override
{
g.setColour(juce::Colours::purple);
g.fillRoundedRectangle(getLocalBounds().toFloat(), 10.0f);
}
void drawDocumentWindowTitleBar(juce::DocumentWindow&,
juce::Graphics& g,
int w,
int h,
int titleSpaceX,
int titleSpaceW,
const juce::Image* icon,
bool drawTitleTextOnLeft) override
{
g.setColour(juce::Colours::black);
g.setFont({ 20.0f, juce::Font::bold });
g.drawText(getTitle(), 0, 0, w, h, juce::Justification::centred);
}
void drawCornerResizer(juce::Graphics&, int w, int h, bool isMouseOver, bool isMouseDragging) override
{
}
void drawResizableFrame(juce::Graphics&, int w, int h, const juce::BorderSize<int>&) override
{
}
private:
class MainComponent : public juce::Component
{
public:
MainComponent() = default;
~MainComponent() override = default;
void paint(juce::Graphics& g) override
{
g.fillAll(juce::Colours::yellow);
}
private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainComponent)
} mainComponent;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainWindow)
};
Matt