mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-20 01:14:20 +00:00
Some internal modernisation in windowing classes
This commit is contained in:
parent
9527e077b1
commit
c42719c2eb
11 changed files with 173 additions and 227 deletions
|
|
@ -43,8 +43,7 @@ AlertWindow::AlertWindow (const String& title,
|
|||
Component* comp)
|
||||
: TopLevelWindow (title, true),
|
||||
alertIconType (iconType),
|
||||
associatedComponent (comp),
|
||||
escapeKeyCancels (true)
|
||||
associatedComponent (comp)
|
||||
{
|
||||
setAlwaysOnTop (juce_areThereAnyAlwaysOnTopWindows());
|
||||
|
||||
|
|
@ -71,7 +70,7 @@ void AlertWindow::userTriedToCloseWindow()
|
|||
//==============================================================================
|
||||
void AlertWindow::setMessage (const String& message)
|
||||
{
|
||||
const String newMessage (message.substring (0, 2048));
|
||||
auto newMessage = message.substring (0, 2048);
|
||||
|
||||
if (text != newMessage)
|
||||
{
|
||||
|
|
@ -84,7 +83,7 @@ void AlertWindow::setMessage (const String& message)
|
|||
//==============================================================================
|
||||
void AlertWindow::buttonClicked (Button* button)
|
||||
{
|
||||
if (Component* parent = button->getParentComponent())
|
||||
if (auto* parent = button->getParentComponent())
|
||||
parent->exitModalState (button->getCommandID());
|
||||
}
|
||||
|
||||
|
|
@ -94,7 +93,7 @@ void AlertWindow::addButton (const String& name,
|
|||
const KeyPress& shortcutKey1,
|
||||
const KeyPress& shortcutKey2)
|
||||
{
|
||||
TextButton* const b = new TextButton (name, String());
|
||||
auto* b = new TextButton (name, {});
|
||||
buttons.add (b);
|
||||
|
||||
b->setWantsKeyboardFocus (true);
|
||||
|
|
@ -105,19 +104,18 @@ void AlertWindow::addButton (const String& name,
|
|||
b->addListener (this);
|
||||
|
||||
Array<TextButton*> buttonsArray (buttons.begin(), buttons.size());
|
||||
auto& lf = getLookAndFeel();
|
||||
|
||||
const int buttonHeight = getLookAndFeel().getAlertWindowButtonHeight();
|
||||
const Array<int> buttonWidths = getLookAndFeel().getWidthsForTextButtons (*this, buttonsArray);
|
||||
auto buttonHeight = lf.getAlertWindowButtonHeight();
|
||||
auto buttonWidths = lf.getWidthsForTextButtons (*this, buttonsArray);
|
||||
|
||||
jassert (buttonWidths.size() == buttons.size());
|
||||
int i = 0;
|
||||
|
||||
const int n = buttonWidths.size();
|
||||
|
||||
for (int i = 0; i < n; ++i)
|
||||
buttons.getUnchecked (i)->setSize (buttonWidths.getReference (i), buttonHeight);
|
||||
for (auto* button : buttons)
|
||||
button->setSize (buttonWidths[i++], buttonHeight);
|
||||
|
||||
addAndMakeVisible (b, 0);
|
||||
|
||||
updateLayout (false);
|
||||
}
|
||||
|
||||
|
|
@ -128,10 +126,8 @@ int AlertWindow::getNumButtons() const
|
|||
|
||||
void AlertWindow::triggerButtonClick (const String& buttonName)
|
||||
{
|
||||
for (int i = buttons.size(); --i >= 0;)
|
||||
for (auto* b : buttons)
|
||||
{
|
||||
TextButton* const b = buttons.getUnchecked(i);
|
||||
|
||||
if (buttonName == b->getName())
|
||||
{
|
||||
b->triggerClick();
|
||||
|
|
@ -151,7 +147,7 @@ void AlertWindow::addTextEditor (const String& name,
|
|||
const String& onScreenLabel,
|
||||
const bool isPasswordBox)
|
||||
{
|
||||
TextEditor* ed = new TextEditor (name, isPasswordBox ? getDefaultPasswordChar() : 0);
|
||||
auto* ed = new TextEditor (name, isPasswordBox ? getDefaultPasswordChar() : 0);
|
||||
ed->setSelectAllWhenFocused (true);
|
||||
ed->setEscapeAndReturnKeysConsumed (false);
|
||||
textBoxes.add (ed);
|
||||
|
|
@ -169,9 +165,9 @@ void AlertWindow::addTextEditor (const String& name,
|
|||
|
||||
TextEditor* AlertWindow::getTextEditor (const String& nameOfTextEditor) const
|
||||
{
|
||||
for (int i = textBoxes.size(); --i >= 0;)
|
||||
if (textBoxes.getUnchecked(i)->getName() == nameOfTextEditor)
|
||||
return textBoxes.getUnchecked(i);
|
||||
for (auto* tb : textBoxes)
|
||||
if (tb->getName() == nameOfTextEditor)
|
||||
return tb;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
|
@ -190,7 +186,7 @@ void AlertWindow::addComboBox (const String& name,
|
|||
const StringArray& items,
|
||||
const String& onScreenLabel)
|
||||
{
|
||||
ComboBox* const cb = new ComboBox (name);
|
||||
auto* cb = new ComboBox (name);
|
||||
comboBoxes.add (cb);
|
||||
allComps.add (cb);
|
||||
|
||||
|
|
@ -205,9 +201,9 @@ void AlertWindow::addComboBox (const String& name,
|
|||
|
||||
ComboBox* AlertWindow::getComboBoxComponent (const String& nameOfList) const
|
||||
{
|
||||
for (int i = comboBoxes.size(); --i >= 0;)
|
||||
if (comboBoxes.getUnchecked(i)->getName() == nameOfList)
|
||||
return comboBoxes.getUnchecked(i);
|
||||
for (auto* cb : comboBoxes)
|
||||
if (cb->getName() == nameOfList)
|
||||
return cb;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
|
@ -231,15 +227,12 @@ public:
|
|||
setScrollbarsShown (true);
|
||||
lookAndFeelChanged();
|
||||
setWantsKeyboardFocus (false);
|
||||
|
||||
setFont (font);
|
||||
setText (message, false);
|
||||
|
||||
bestWidth = 2 * (int) std::sqrt (font.getHeight() * font.getStringWidth (message));
|
||||
}
|
||||
|
||||
int getPreferredWidth() const noexcept { return bestWidth; }
|
||||
|
||||
void updateLayout (const int width)
|
||||
{
|
||||
AttributedString s;
|
||||
|
|
@ -251,7 +244,6 @@ public:
|
|||
setSize (width, jmin (width, (int) (text.getHeight() + getFont().getHeight())));
|
||||
}
|
||||
|
||||
private:
|
||||
int bestWidth;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE (AlertTextComp)
|
||||
|
|
@ -259,10 +251,9 @@ private:
|
|||
|
||||
void AlertWindow::addTextBlock (const String& textBlock)
|
||||
{
|
||||
AlertTextComp* const c = new AlertTextComp (*this, textBlock, getLookAndFeel().getAlertWindowMessageFont());
|
||||
auto* c = new AlertTextComp (*this, textBlock, getLookAndFeel().getAlertWindowMessageFont());
|
||||
textBlocks.add (c);
|
||||
allComps.add (c);
|
||||
|
||||
addAndMakeVisible (c);
|
||||
|
||||
updateLayout (false);
|
||||
|
|
@ -271,10 +262,9 @@ void AlertWindow::addTextBlock (const String& textBlock)
|
|||
//==============================================================================
|
||||
void AlertWindow::addProgressBarComponent (double& progressValue)
|
||||
{
|
||||
ProgressBar* const pb = new ProgressBar (progressValue);
|
||||
auto* pb = new ProgressBar (progressValue);
|
||||
progressBars.add (pb);
|
||||
allComps.add (pb);
|
||||
|
||||
addAndMakeVisible (pb);
|
||||
|
||||
updateLayout (false);
|
||||
|
|
@ -285,25 +275,17 @@ void AlertWindow::addCustomComponent (Component* const component)
|
|||
{
|
||||
customComps.add (component);
|
||||
allComps.add (component);
|
||||
|
||||
addAndMakeVisible (component);
|
||||
|
||||
updateLayout (false);
|
||||
}
|
||||
|
||||
int AlertWindow::getNumCustomComponents() const
|
||||
{
|
||||
return customComps.size();
|
||||
}
|
||||
|
||||
Component* AlertWindow::getCustomComponent (const int index) const
|
||||
{
|
||||
return customComps [index];
|
||||
}
|
||||
int AlertWindow::getNumCustomComponents() const { return customComps.size(); }
|
||||
Component* AlertWindow::getCustomComponent (int index) const { return customComps [index]; }
|
||||
|
||||
Component* AlertWindow::removeCustomComponent (const int index)
|
||||
{
|
||||
Component* const c = getCustomComponent (index);
|
||||
auto* c = getCustomComponent (index);
|
||||
|
||||
if (c != nullptr)
|
||||
{
|
||||
|
|
@ -320,14 +302,15 @@ Component* AlertWindow::removeCustomComponent (const int index)
|
|||
//==============================================================================
|
||||
void AlertWindow::paint (Graphics& g)
|
||||
{
|
||||
getLookAndFeel().drawAlertBox (g, *this, textArea, textLayout);
|
||||
auto& lf = getLookAndFeel();
|
||||
lf.drawAlertBox (g, *this, textArea, textLayout);
|
||||
|
||||
g.setColour (findColour (textColourId));
|
||||
g.setFont (getLookAndFeel().getAlertWindowFont());
|
||||
g.setFont (lf.getAlertWindowFont());
|
||||
|
||||
for (int i = textBoxes.size(); --i >= 0;)
|
||||
{
|
||||
const TextEditor* const te = textBoxes.getUnchecked(i);
|
||||
auto* te = textBoxes.getUnchecked(i);
|
||||
|
||||
g.drawFittedText (textboxNames[i],
|
||||
te->getX(), te->getY() - 14,
|
||||
|
|
@ -337,7 +320,7 @@ void AlertWindow::paint (Graphics& g)
|
|||
|
||||
for (int i = comboBoxNames.size(); --i >= 0;)
|
||||
{
|
||||
const ComboBox* const cb = comboBoxes.getUnchecked(i);
|
||||
auto* cb = comboBoxes.getUnchecked(i);
|
||||
|
||||
g.drawFittedText (comboBoxNames[i],
|
||||
cb->getX(), cb->getY() - 14,
|
||||
|
|
@ -345,15 +328,11 @@ void AlertWindow::paint (Graphics& g)
|
|||
Justification::centredLeft, 1);
|
||||
}
|
||||
|
||||
for (int i = customComps.size(); --i >= 0;)
|
||||
{
|
||||
const Component* const c = customComps.getUnchecked(i);
|
||||
|
||||
for (auto* c : customComps)
|
||||
g.drawFittedText (c->getName(),
|
||||
c->getX(), c->getY() - 14,
|
||||
c->getWidth(), 14,
|
||||
Justification::centredLeft, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void AlertWindow::updateLayout (const bool onlyIncreaseSize)
|
||||
|
|
@ -361,15 +340,14 @@ void AlertWindow::updateLayout (const bool onlyIncreaseSize)
|
|||
const int titleH = 24;
|
||||
const int iconWidth = 80;
|
||||
|
||||
LookAndFeel& lf = getLookAndFeel();
|
||||
auto& lf = getLookAndFeel();
|
||||
auto messageFont (lf.getAlertWindowMessageFont());
|
||||
|
||||
const Font messageFont (lf.getAlertWindowMessageFont());
|
||||
auto wid = jmax (messageFont.getStringWidth (text),
|
||||
messageFont.getStringWidth (getName()));
|
||||
|
||||
const int wid = jmax (messageFont.getStringWidth (text),
|
||||
messageFont.getStringWidth (getName()));
|
||||
|
||||
const int sw = (int) std::sqrt (messageFont.getHeight() * wid);
|
||||
int w = jmin (300 + sw * 2, (int) (getParentWidth() * 0.7f));
|
||||
auto sw = (int) std::sqrt (messageFont.getHeight() * wid);
|
||||
auto w = jmin (300 + sw * 2, (int) (getParentWidth() * 0.7f));
|
||||
const int edgeGap = 10;
|
||||
const int labelHeight = 18;
|
||||
int iconSpace = 0;
|
||||
|
|
@ -397,24 +375,24 @@ void AlertWindow::updateLayout (const bool onlyIncreaseSize)
|
|||
w = jmax (350, (int) textLayout.getWidth() + iconSpace + edgeGap * 4);
|
||||
w = jmin (w, (int) (getParentWidth() * 0.7f));
|
||||
|
||||
const int textLayoutH = (int) textLayout.getHeight();
|
||||
const int textBottom = 16 + titleH + textLayoutH;
|
||||
auto textLayoutH = (int) textLayout.getHeight();
|
||||
auto textBottom = 16 + titleH + textLayoutH;
|
||||
int h = textBottom;
|
||||
|
||||
int buttonW = 40;
|
||||
for (int i = 0; i < buttons.size(); ++i)
|
||||
buttonW += 16 + buttons.getUnchecked (i)->getWidth();
|
||||
|
||||
for (auto* b : buttons)
|
||||
buttonW += 16 + b->getWidth();
|
||||
|
||||
w = jmax (buttonW, w);
|
||||
|
||||
h += (textBoxes.size() + comboBoxes.size() + progressBars.size()) * 50;
|
||||
|
||||
if (buttons.size() > 0)
|
||||
h += 20 + buttons.getUnchecked (0)->getHeight();
|
||||
if (auto* b = buttons[0])
|
||||
h += 20 + b->getHeight();
|
||||
|
||||
for (int i = customComps.size(); --i >= 0;)
|
||||
for (auto* c : customComps)
|
||||
{
|
||||
Component* c = customComps.getUnchecked (i);
|
||||
w = jmax (w, (c->getWidth() * 100) / 80);
|
||||
h += 10 + c->getHeight();
|
||||
|
||||
|
|
@ -422,17 +400,14 @@ void AlertWindow::updateLayout (const bool onlyIncreaseSize)
|
|||
h += labelHeight;
|
||||
}
|
||||
|
||||
for (int i = textBlocks.size(); --i >= 0;)
|
||||
{
|
||||
const AlertTextComp* const ac = static_cast<const AlertTextComp*> (textBlocks.getUnchecked(i));
|
||||
w = jmax (w, ac->getPreferredWidth());
|
||||
}
|
||||
for (auto* tb : textBlocks)
|
||||
w = jmax (w, static_cast<const AlertTextComp*> (tb)->bestWidth);
|
||||
|
||||
w = jmin (w, (int) (getParentWidth() * 0.7f));
|
||||
|
||||
for (int i = textBlocks.size(); --i >= 0;)
|
||||
for (auto* tb : textBlocks)
|
||||
{
|
||||
AlertTextComp* const ac = static_cast<AlertTextComp*> (textBlocks.getUnchecked(i));
|
||||
auto* ac = static_cast<AlertTextComp*> (tb);
|
||||
ac->updateLayout ((int) (w * 0.8f));
|
||||
h += ac->getHeight() + 10;
|
||||
}
|
||||
|
|
@ -455,15 +430,14 @@ void AlertWindow::updateLayout (const bool onlyIncreaseSize)
|
|||
const int spacer = 16;
|
||||
int totalWidth = -spacer;
|
||||
|
||||
for (int i = buttons.size(); --i >= 0;)
|
||||
totalWidth += buttons.getUnchecked(i)->getWidth() + spacer;
|
||||
for (auto* b : buttons)
|
||||
totalWidth += b->getWidth() + spacer;
|
||||
|
||||
int x = (w - totalWidth) / 2;
|
||||
int y = (int) (getHeight() * 0.95f);
|
||||
auto x = (w - totalWidth) / 2;
|
||||
auto y = (int) (getHeight() * 0.95f);
|
||||
|
||||
for (int i = 0; i < buttons.size(); ++i)
|
||||
for (auto* c : buttons)
|
||||
{
|
||||
TextButton* const c = buttons.getUnchecked(i);
|
||||
int ny = proportionOfHeight (0.95f) - c->getHeight();
|
||||
c->setTopLeftPosition (x, ny);
|
||||
if (ny < y)
|
||||
|
|
@ -476,9 +450,8 @@ void AlertWindow::updateLayout (const bool onlyIncreaseSize)
|
|||
|
||||
y = textBottom;
|
||||
|
||||
for (int i = 0; i < allComps.size(); ++i)
|
||||
for (auto* c : allComps)
|
||||
{
|
||||
Component* const c = allComps.getUnchecked(i);
|
||||
h = 22;
|
||||
|
||||
const int comboIndex = comboBoxes.indexOf (dynamic_cast<ComboBox*> (c));
|
||||
|
|
@ -531,10 +504,8 @@ void AlertWindow::mouseDrag (const MouseEvent& e)
|
|||
|
||||
bool AlertWindow::keyPressed (const KeyPress& key)
|
||||
{
|
||||
for (int i = buttons.size(); --i >= 0;)
|
||||
for (auto* b : buttons)
|
||||
{
|
||||
TextButton* const b = buttons.getUnchecked(i);
|
||||
|
||||
if (b->isRegisteredForShortcut (key))
|
||||
{
|
||||
b->triggerClick();
|
||||
|
|
@ -579,8 +550,7 @@ public:
|
|||
AlertWindow::AlertIconType icon, int numButts,
|
||||
ModalComponentManager::Callback* cb, bool runModally)
|
||||
: title (t), message (m), iconType (icon), numButtons (numButts),
|
||||
returnValue (0), associatedComponent (component),
|
||||
callback (cb), modal (runModally)
|
||||
associatedComponent (component), callback (cb), modal (runModally)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -594,15 +564,15 @@ public:
|
|||
|
||||
private:
|
||||
AlertWindow::AlertIconType iconType;
|
||||
int numButtons, returnValue;
|
||||
int numButtons, returnValue = 0;
|
||||
WeakReference<Component> associatedComponent;
|
||||
ModalComponentManager::Callback* callback;
|
||||
bool modal;
|
||||
|
||||
void show()
|
||||
{
|
||||
LookAndFeel& lf = associatedComponent != nullptr ? associatedComponent->getLookAndFeel()
|
||||
: LookAndFeel::getDefaultLookAndFeel();
|
||||
auto& lf = associatedComponent != nullptr ? associatedComponent->getLookAndFeel()
|
||||
: LookAndFeel::getDefaultLookAndFeel();
|
||||
|
||||
ScopedPointer<Component> alertBox (lf.createAlertWindow (title, message, button1, button2, button3,
|
||||
iconType, numButtons, associatedComponent));
|
||||
|
|
|
|||
|
|
@ -479,8 +479,8 @@ private:
|
|||
OwnedArray<Component> textBlocks;
|
||||
Array<Component*> allComps;
|
||||
StringArray textboxNames, comboBoxNames;
|
||||
Component* associatedComponent;
|
||||
bool escapeKeyCancels;
|
||||
Component* const associatedComponent;
|
||||
bool escapeKeyCancels = true;
|
||||
|
||||
void updateLayout (bool onlyIncreaseSize);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@
|
|||
namespace juce
|
||||
{
|
||||
|
||||
CallOutBox::CallOutBox (Component& c, const Rectangle<int>& area, Component* const parent)
|
||||
: arrowSize (16.0f), content (c), dismissalMouseClicksAreAlwaysConsumed (false)
|
||||
CallOutBox::CallOutBox (Component& c, Rectangle<int> area, Component* const parent)
|
||||
: content (c)
|
||||
{
|
||||
addAndMakeVisible (content);
|
||||
|
||||
|
|
@ -84,7 +84,7 @@ public:
|
|||
JUCE_DECLARE_NON_COPYABLE (CallOutBoxCallback)
|
||||
};
|
||||
|
||||
CallOutBox& CallOutBox::launchAsynchronously (Component* content, const Rectangle<int>& area, Component* parent)
|
||||
CallOutBox& CallOutBox::launchAsynchronously (Component* content, Rectangle<int> area, Component* parent)
|
||||
{
|
||||
jassert (content != nullptr); // must be a valid content component!
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ void CallOutBox::paint (Graphics& g)
|
|||
|
||||
void CallOutBox::resized()
|
||||
{
|
||||
const int borderSpace = getBorderSize();
|
||||
auto borderSpace = getBorderSize();
|
||||
content.setTopLeftPosition (borderSpace, borderSpace);
|
||||
refreshPath();
|
||||
}
|
||||
|
|
@ -143,7 +143,8 @@ void CallOutBox::inputAttemptWhenModal()
|
|||
// as Windows still sends touch events before the CallOutBox had a chance
|
||||
// to really open.
|
||||
|
||||
RelativeTime elapsed = Time::getCurrentTime() - creationTime;
|
||||
auto elapsed = Time::getCurrentTime() - creationTime;
|
||||
|
||||
if (elapsed.inMilliseconds() > 200)
|
||||
dismiss();
|
||||
}
|
||||
|
|
@ -193,29 +194,29 @@ void CallOutBox::updatePosition (const Rectangle<int>& newAreaToPointTo, const R
|
|||
targetArea = newAreaToPointTo;
|
||||
availableArea = newAreaToFitIn;
|
||||
|
||||
const int borderSpace = getBorderSize();
|
||||
auto borderSpace = getBorderSize();
|
||||
|
||||
Rectangle<int> newBounds (content.getWidth() + borderSpace * 2,
|
||||
content.getHeight() + borderSpace * 2);
|
||||
|
||||
const int hw = newBounds.getWidth() / 2;
|
||||
const int hh = newBounds.getHeight() / 2;
|
||||
const float hwReduced = (float) (hw - borderSpace * 2);
|
||||
const float hhReduced = (float) (hh - borderSpace * 2);
|
||||
const float arrowIndent = borderSpace - arrowSize;
|
||||
auto hw = newBounds.getWidth() / 2;
|
||||
auto hh = newBounds.getHeight() / 2;
|
||||
auto hwReduced = (float) (hw - borderSpace * 2);
|
||||
auto hhReduced = (float) (hh - borderSpace * 2);
|
||||
auto arrowIndent = borderSpace - arrowSize;
|
||||
|
||||
Point<float> targets[4] = { Point<float> ((float) targetArea.getCentreX(), (float) targetArea.getBottom()),
|
||||
Point<float> ((float) targetArea.getRight(), (float) targetArea.getCentreY()),
|
||||
Point<float> ((float) targetArea.getX(), (float) targetArea.getCentreY()),
|
||||
Point<float> ((float) targetArea.getCentreX(), (float) targetArea.getY()) };
|
||||
Point<float> targets[4] = { { (float) targetArea.getCentreX(), (float) targetArea.getBottom() },
|
||||
{ (float) targetArea.getRight(), (float) targetArea.getCentreY() },
|
||||
{ (float) targetArea.getX(), (float) targetArea.getCentreY() },
|
||||
{ (float) targetArea.getCentreX(), (float) targetArea.getY() } };
|
||||
|
||||
Line<float> lines[4] = { Line<float> (targets[0].translated (-hwReduced, hh - arrowIndent), targets[0].translated (hwReduced, hh - arrowIndent)),
|
||||
Line<float> (targets[1].translated (hw - arrowIndent, -hhReduced), targets[1].translated (hw - arrowIndent, hhReduced)),
|
||||
Line<float> (targets[2].translated (-(hw - arrowIndent), -hhReduced), targets[2].translated (-(hw - arrowIndent), hhReduced)),
|
||||
Line<float> (targets[3].translated (-hwReduced, -(hh - arrowIndent)), targets[3].translated (hwReduced, -(hh - arrowIndent))) };
|
||||
Line<float> lines[4] = { { targets[0].translated (-hwReduced, hh - arrowIndent), targets[0].translated (hwReduced, hh - arrowIndent) },
|
||||
{ targets[1].translated (hw - arrowIndent, -hhReduced), targets[1].translated (hw - arrowIndent, hhReduced) },
|
||||
{ targets[2].translated (-(hw - arrowIndent), -hhReduced), targets[2].translated (-(hw - arrowIndent), hhReduced) },
|
||||
{ targets[3].translated (-hwReduced, -(hh - arrowIndent)), targets[3].translated (hwReduced, -(hh - arrowIndent)) } };
|
||||
|
||||
const Rectangle<float> centrePointArea (newAreaToFitIn.reduced (hw, hh).toFloat());
|
||||
const Point<float> targetCentre (targetArea.getCentre().toFloat());
|
||||
auto centrePointArea = newAreaToFitIn.reduced (hw, hh).toFloat();
|
||||
auto targetCentre = targetArea.getCentre().toFloat();
|
||||
|
||||
float nearest = 1.0e9f;
|
||||
|
||||
|
|
@ -224,8 +225,8 @@ void CallOutBox::updatePosition (const Rectangle<int>& newAreaToPointTo, const R
|
|||
Line<float> constrainedLine (centrePointArea.getConstrainedPoint (lines[i].getStart()),
|
||||
centrePointArea.getConstrainedPoint (lines[i].getEnd()));
|
||||
|
||||
const Point<float> centre (constrainedLine.findNearestPointTo (targetCentre));
|
||||
float distanceFromCentre = centre.getDistanceFrom (targets[i]);
|
||||
auto centre = constrainedLine.findNearestPointTo (targetCentre);
|
||||
auto distanceFromCentre = centre.getDistanceFrom (targets[i]);
|
||||
|
||||
if (! centrePointArea.intersects (lines[i]))
|
||||
distanceFromCentre += 1000.0f;
|
||||
|
|
@ -233,8 +234,8 @@ void CallOutBox::updatePosition (const Rectangle<int>& newAreaToPointTo, const R
|
|||
if (distanceFromCentre < nearest)
|
||||
{
|
||||
nearest = distanceFromCentre;
|
||||
|
||||
targetPoint = targets[i];
|
||||
|
||||
newBounds.setPosition ((int) (centre.x - hw),
|
||||
(int) (centre.y - hh));
|
||||
}
|
||||
|
|
@ -246,7 +247,7 @@ void CallOutBox::updatePosition (const Rectangle<int>& newAreaToPointTo, const R
|
|||
void CallOutBox::refreshPath()
|
||||
{
|
||||
repaint();
|
||||
background = Image();
|
||||
background = {};
|
||||
outline.clear();
|
||||
|
||||
const float gap = 4.5f;
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ public:
|
|||
If this is a nullptr, the call-out will be added to the desktop.
|
||||
*/
|
||||
CallOutBox (Component& contentComponent,
|
||||
const Rectangle<int>& areaToPointTo,
|
||||
Rectangle<int> areaToPointTo,
|
||||
Component* parentComponent);
|
||||
|
||||
/** Destructor. */
|
||||
|
|
@ -117,7 +117,7 @@ public:
|
|||
If this is a nullptr, the call-out will be added to the desktop.
|
||||
*/
|
||||
static CallOutBox& launchAsynchronously (Component* contentComponent,
|
||||
const Rectangle<int>& areaToPointTo,
|
||||
Rectangle<int> areaToPointTo,
|
||||
Component* parentComponent);
|
||||
|
||||
/** Posts a message which will dismiss the callout box asynchronously.
|
||||
|
|
@ -167,13 +167,13 @@ public:
|
|||
|
||||
private:
|
||||
//==============================================================================
|
||||
float arrowSize;
|
||||
Component& content;
|
||||
Path outline;
|
||||
Point<float> targetPoint;
|
||||
Rectangle<int> availableArea, targetArea;
|
||||
Image background;
|
||||
bool dismissalMouseClicksAreAlwaysConsumed;
|
||||
float arrowSize = 16.0f;
|
||||
bool dismissalMouseClicksAreAlwaysConsumed = false;
|
||||
|
||||
Time creationTime;
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ void DialogWindow::resized()
|
|||
|
||||
if (escapeKeyTriggersCloseButton)
|
||||
{
|
||||
if (Button* const close = getCloseButton())
|
||||
if (auto* close = getCloseButton())
|
||||
{
|
||||
const KeyPress esc (KeyPress::escapeKey, 0, 0);
|
||||
|
||||
|
|
@ -102,15 +102,7 @@ private:
|
|||
JUCE_DECLARE_NON_COPYABLE (DefaultDialogWindow)
|
||||
};
|
||||
|
||||
DialogWindow::LaunchOptions::LaunchOptions() noexcept
|
||||
: dialogBackgroundColour (Colours::lightgrey),
|
||||
componentToCentreAround (nullptr),
|
||||
escapeKeyTriggersCloseButton (true),
|
||||
useNativeTitleBar (true),
|
||||
resizable (true),
|
||||
useBottomRightCornerResizer (false)
|
||||
{
|
||||
}
|
||||
DialogWindow::LaunchOptions::LaunchOptions() noexcept {}
|
||||
|
||||
DialogWindow* DialogWindow::LaunchOptions::create()
|
||||
{
|
||||
|
|
@ -121,7 +113,7 @@ DialogWindow* DialogWindow::LaunchOptions::create()
|
|||
|
||||
DialogWindow* DialogWindow::LaunchOptions::launchAsync()
|
||||
{
|
||||
DialogWindow* const d = create();
|
||||
auto* d = create();
|
||||
d->enterModalState (true, nullptr, true);
|
||||
return d;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ public:
|
|||
String dialogTitle;
|
||||
|
||||
/** The background colour for the window. */
|
||||
Colour dialogBackgroundColour;
|
||||
Colour dialogBackgroundColour = Colours::lightgrey;
|
||||
|
||||
/** The content component to show in the window. This must not be null!
|
||||
Using an OptionalScopedPointer to hold this pointer lets you indicate whether
|
||||
|
|
@ -100,16 +100,16 @@ public:
|
|||
dialog box in front of. See the DocumentWindow::centreAroundComponent() method for
|
||||
more info about this parameter.
|
||||
*/
|
||||
Component* componentToCentreAround;
|
||||
Component* componentToCentreAround = nullptr;
|
||||
|
||||
/** If true, then the escape key will trigger the dialog's close button. */
|
||||
bool escapeKeyTriggersCloseButton;
|
||||
bool escapeKeyTriggersCloseButton = true;
|
||||
/** If true, the dialog will use a native title bar. See TopLevelWindow::setUsingNativeTitleBar() */
|
||||
bool useNativeTitleBar;
|
||||
bool useNativeTitleBar = true;
|
||||
/** If true, the window will be resizable. See ResizableWindow::setResizable() */
|
||||
bool resizable;
|
||||
bool resizable = true;
|
||||
/** Indicates whether to use a border or corner resizer component. See ResizableWindow::setResizable() */
|
||||
bool useBottomRightCornerResizer;
|
||||
bool useBottomRightCornerResizer = false;
|
||||
|
||||
/** Launches a new modal dialog window.
|
||||
This will create a dialog based on the settings in this structure,
|
||||
|
|
|
|||
|
|
@ -51,16 +51,12 @@ DocumentWindow::DocumentWindow (const String& title,
|
|||
int requiredButtons_,
|
||||
bool addToDesktop_)
|
||||
: ResizableWindow (title, backgroundColour, addToDesktop_),
|
||||
titleBarHeight (26),
|
||||
menuBarHeight (24),
|
||||
requiredButtons (requiredButtons_),
|
||||
#if JUCE_MAC
|
||||
positionTitleBarButtonsOnLeft (true),
|
||||
positionTitleBarButtonsOnLeft (true)
|
||||
#else
|
||||
positionTitleBarButtonsOnLeft (false),
|
||||
positionTitleBarButtonsOnLeft (false)
|
||||
#endif
|
||||
drawTitleTextCentred (true),
|
||||
menuBarModel (nullptr)
|
||||
{
|
||||
setResizeLimits (128, 128, 32768, 32768);
|
||||
|
||||
|
|
@ -77,8 +73,8 @@ DocumentWindow::~DocumentWindow()
|
|||
jassert (titleBarButtons[1] == nullptr || getIndexOfChildComponent (titleBarButtons[1]) >= 0);
|
||||
jassert (titleBarButtons[2] == nullptr || getIndexOfChildComponent (titleBarButtons[2]) >= 0);
|
||||
|
||||
for (int i = numElementsInArray (titleBarButtons); --i >= 0;)
|
||||
titleBarButtons[i] = nullptr;
|
||||
for (auto& b : titleBarButtons)
|
||||
b = nullptr;
|
||||
|
||||
menuBar = nullptr;
|
||||
}
|
||||
|
|
@ -193,16 +189,16 @@ void DocumentWindow::paint (Graphics& g)
|
|||
{
|
||||
ResizableWindow::paint (g);
|
||||
|
||||
const Rectangle<int> titleBarArea (getTitleBarArea());
|
||||
auto titleBarArea = getTitleBarArea();
|
||||
g.reduceClipRegion (titleBarArea);
|
||||
g.setOrigin (titleBarArea.getPosition());
|
||||
|
||||
int titleSpaceX1 = 6;
|
||||
int titleSpaceX2 = titleBarArea.getWidth() - 6;
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
for (auto& b : titleBarButtons)
|
||||
{
|
||||
if (Button* const b = titleBarButtons[i])
|
||||
if (b != nullptr)
|
||||
{
|
||||
if (positionTitleBarButtonsOnLeft)
|
||||
titleSpaceX1 = jmax (titleSpaceX1, b->getRight() + (getWidth() - b->getRight()) / 8);
|
||||
|
|
@ -224,10 +220,10 @@ void DocumentWindow::resized()
|
|||
{
|
||||
ResizableWindow::resized();
|
||||
|
||||
if (Button* const b = getMaximiseButton())
|
||||
if (auto* b = getMaximiseButton())
|
||||
b->setToggleState (isFullScreen(), dontSendNotification);
|
||||
|
||||
const Rectangle<int> titleBarArea (getTitleBarArea());
|
||||
auto titleBarArea = getTitleBarArea();
|
||||
|
||||
getLookAndFeel()
|
||||
.positionDocumentWindowButtons (*this,
|
||||
|
|
@ -250,7 +246,7 @@ BorderSize<int> DocumentWindow::getBorderThickness()
|
|||
|
||||
BorderSize<int> DocumentWindow::getContentComponentBorder()
|
||||
{
|
||||
BorderSize<int> border (getBorderThickness());
|
||||
auto border = getBorderThickness();
|
||||
|
||||
if (! isKioskMode())
|
||||
border.setTop (border.getTop()
|
||||
|
|
@ -267,13 +263,11 @@ int DocumentWindow::getTitleBarHeight() const
|
|||
|
||||
Rectangle<int> DocumentWindow::getTitleBarArea()
|
||||
{
|
||||
const BorderSize<int> border (getBorderThickness());
|
||||
|
||||
if (isKioskMode())
|
||||
return Rectangle<int>();
|
||||
return {};
|
||||
|
||||
return Rectangle<int> (border.getLeft(), border.getTop(),
|
||||
getWidth() - border.getLeftAndRight(), getTitleBarHeight());
|
||||
auto border = getBorderThickness();
|
||||
return { border.getLeft(), border.getTop(), getWidth() - border.getLeftAndRight(), getTitleBarHeight() };
|
||||
}
|
||||
|
||||
Button* DocumentWindow::getCloseButton() const noexcept { return titleBarButtons[2]; }
|
||||
|
|
@ -282,7 +276,7 @@ Button* DocumentWindow::getMaximiseButton() const noexcept { return titleBarBut
|
|||
|
||||
int DocumentWindow::getDesktopWindowStyleFlags() const
|
||||
{
|
||||
int styleFlags = ResizableWindow::getDesktopWindowStyleFlags();
|
||||
auto styleFlags = ResizableWindow::getDesktopWindowStyleFlags();
|
||||
|
||||
if ((requiredButtons & minimiseButton) != 0) styleFlags |= ComponentPeer::windowHasMinimiseButton;
|
||||
if ((requiredButtons & maximiseButton) != 0) styleFlags |= ComponentPeer::windowHasMaximiseButton;
|
||||
|
|
@ -293,8 +287,8 @@ int DocumentWindow::getDesktopWindowStyleFlags() const
|
|||
|
||||
void DocumentWindow::lookAndFeelChanged()
|
||||
{
|
||||
for (int i = numElementsInArray (titleBarButtons); --i >= 0;)
|
||||
titleBarButtons[i] = nullptr;
|
||||
for (auto& b : titleBarButtons)
|
||||
b = nullptr;
|
||||
|
||||
if (! isUsingNativeTitleBar())
|
||||
{
|
||||
|
|
@ -304,9 +298,9 @@ void DocumentWindow::lookAndFeelChanged()
|
|||
if ((requiredButtons & maximiseButton) != 0) titleBarButtons[1] = lf.createDocumentWindowButton (maximiseButton);
|
||||
if ((requiredButtons & closeButton) != 0) titleBarButtons[2] = lf.createDocumentWindowButton (closeButton);
|
||||
|
||||
for (int i = 0; i < 3; ++i)
|
||||
for (auto& b : titleBarButtons)
|
||||
{
|
||||
if (Button* const b = titleBarButtons[i])
|
||||
if (b != nullptr)
|
||||
{
|
||||
if (buttonListener == nullptr)
|
||||
buttonListener = new ButtonListenerProxy (*this);
|
||||
|
|
@ -319,7 +313,7 @@ void DocumentWindow::lookAndFeelChanged()
|
|||
}
|
||||
}
|
||||
|
||||
if (Button* const b = getCloseButton())
|
||||
if (auto* b = getCloseButton())
|
||||
{
|
||||
#if JUCE_MAC
|
||||
b->addShortcut (KeyPress ('w', ModifierKeys::commandModifier, 0));
|
||||
|
|
@ -342,21 +336,21 @@ void DocumentWindow::parentHierarchyChanged()
|
|||
void DocumentWindow::activeWindowStatusChanged()
|
||||
{
|
||||
ResizableWindow::activeWindowStatusChanged();
|
||||
bool isActive = isActiveWindow();
|
||||
|
||||
for (int i = numElementsInArray (titleBarButtons); --i >= 0;)
|
||||
if (Button* const b = titleBarButtons[i])
|
||||
b->setEnabled (isActiveWindow());
|
||||
for (auto& b : titleBarButtons)
|
||||
if (b != nullptr)
|
||||
b->setEnabled (isActive);
|
||||
|
||||
if (menuBar != nullptr)
|
||||
menuBar->setEnabled (isActiveWindow());
|
||||
menuBar->setEnabled (isActive);
|
||||
}
|
||||
|
||||
void DocumentWindow::mouseDoubleClick (const MouseEvent& e)
|
||||
{
|
||||
Button* const maximise = getMaximiseButton();
|
||||
|
||||
if (maximise != nullptr && getTitleBarArea().contains (e.x, e.y))
|
||||
maximise->triggerClick();
|
||||
if (getTitleBarArea().contains (e.x, e.y))
|
||||
if (auto* maximise = getMaximiseButton())
|
||||
maximise->triggerClick();
|
||||
}
|
||||
|
||||
void DocumentWindow::userTriedToCloseWindow()
|
||||
|
|
|
|||
|
|
@ -276,12 +276,12 @@ public:
|
|||
|
||||
private:
|
||||
//==============================================================================
|
||||
int titleBarHeight, menuBarHeight, requiredButtons;
|
||||
bool positionTitleBarButtonsOnLeft, drawTitleTextCentred;
|
||||
int titleBarHeight = 26, menuBarHeight = 24, requiredButtons;
|
||||
bool positionTitleBarButtonsOnLeft, drawTitleTextCentred = true;
|
||||
ScopedPointer<Button> titleBarButtons [3];
|
||||
Image titleBarIcon;
|
||||
ScopedPointer<Component> menuBar;
|
||||
MenuBarModel* menuBarModel;
|
||||
MenuBarModel* menuBarModel = nullptr;
|
||||
|
||||
class ButtonListenerProxy;
|
||||
friend struct ContainerDeletePolicy<ButtonListenerProxy>;
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ ResizableWindow::ResizableWindow (const String& name, Colour bkgnd, bool shouldA
|
|||
: TopLevelWindow (name, shouldAddToDesktop)
|
||||
{
|
||||
setBackgroundColour (bkgnd);
|
||||
|
||||
initialise (shouldAddToDesktop);
|
||||
}
|
||||
|
||||
|
|
@ -168,7 +167,7 @@ void ResizableWindow::setContentComponentSize (int width, int height)
|
|||
{
|
||||
jassert (width > 0 && height > 0); // not a great idea to give it a zero size..
|
||||
|
||||
const BorderSize<int> border (getContentComponentBorder());
|
||||
auto border = getContentComponentBorder();
|
||||
|
||||
setSize (width + border.getLeftAndRight(),
|
||||
height + border.getTopAndBottom());
|
||||
|
|
@ -177,7 +176,7 @@ void ResizableWindow::setContentComponentSize (int width, int height)
|
|||
BorderSize<int> ResizableWindow::getBorderThickness()
|
||||
{
|
||||
if (isUsingNativeTitleBar() || isKioskMode())
|
||||
return BorderSize<int>();
|
||||
return {};
|
||||
|
||||
return BorderSize<int> ((resizableBorder != nullptr && ! isFullScreen()) ? 4 : 1);
|
||||
}
|
||||
|
|
@ -195,7 +194,6 @@ void ResizableWindow::moved()
|
|||
void ResizableWindow::visibilityChanged()
|
||||
{
|
||||
TopLevelWindow::visibilityChanged();
|
||||
|
||||
updateLastPosIfShowing();
|
||||
}
|
||||
|
||||
|
|
@ -256,9 +254,9 @@ void ResizableWindow::childBoundsChanged (Component* child)
|
|||
//==============================================================================
|
||||
void ResizableWindow::activeWindowStatusChanged()
|
||||
{
|
||||
const BorderSize<int> border (getContentComponentBorder());
|
||||
auto border = getContentComponentBorder();
|
||||
auto area = getLocalBounds();
|
||||
|
||||
Rectangle<int> area (getLocalBounds());
|
||||
repaint (area.removeFromTop (border.getTop()));
|
||||
repaint (area.removeFromLeft (border.getLeft()));
|
||||
repaint (area.removeFromRight (border.getRight()));
|
||||
|
|
@ -308,10 +306,10 @@ bool ResizableWindow::isResizable() const noexcept
|
|||
|| resizableBorder != nullptr;
|
||||
}
|
||||
|
||||
void ResizableWindow::setResizeLimits (const int newMinimumWidth,
|
||||
const int newMinimumHeight,
|
||||
const int newMaximumWidth,
|
||||
const int newMaximumHeight) noexcept
|
||||
void ResizableWindow::setResizeLimits (int newMinimumWidth,
|
||||
int newMinimumHeight,
|
||||
int newMaximumWidth,
|
||||
int newMaximumHeight) noexcept
|
||||
{
|
||||
// if you've set up a custom constrainer then these settings won't have any effect..
|
||||
jassert (constrainer == &defaultConstrainer || constrainer == nullptr);
|
||||
|
|
@ -336,8 +334,8 @@ void ResizableWindow::setConstrainer (ComponentBoundsConstrainer* newConstrainer
|
|||
{
|
||||
constrainer = newConstrainer;
|
||||
|
||||
const bool useBottomRightCornerResizer = resizableCorner != nullptr;
|
||||
const bool shouldBeResizable = useBottomRightCornerResizer || resizableBorder != nullptr;
|
||||
bool useBottomRightCornerResizer = resizableCorner != nullptr;
|
||||
bool shouldBeResizable = useBottomRightCornerResizer || resizableBorder != nullptr;
|
||||
|
||||
resizableCorner = nullptr;
|
||||
resizableBorder = nullptr;
|
||||
|
|
@ -358,7 +356,7 @@ void ResizableWindow::setBoundsConstrained (const Rectangle<int>& newBounds)
|
|||
//==============================================================================
|
||||
void ResizableWindow::paint (Graphics& g)
|
||||
{
|
||||
LookAndFeel& lf = getLookAndFeel();
|
||||
auto& lf = getLookAndFeel();
|
||||
|
||||
lf.fillResizableWindowBackground (g, getWidth(), getHeight(),
|
||||
getBorderThickness(), *this);
|
||||
|
|
@ -401,13 +399,12 @@ Colour ResizableWindow::getBackgroundColour() const noexcept
|
|||
|
||||
void ResizableWindow::setBackgroundColour (Colour newColour)
|
||||
{
|
||||
Colour backgroundColour (newColour);
|
||||
auto backgroundColour = newColour;
|
||||
|
||||
if (! Desktop::canUseSemiTransparentWindows())
|
||||
backgroundColour = newColour.withAlpha (1.0f);
|
||||
|
||||
setColour (backgroundColourId, backgroundColour);
|
||||
|
||||
setOpaque (backgroundColour.isOpaque());
|
||||
repaint();
|
||||
}
|
||||
|
|
@ -417,7 +414,7 @@ bool ResizableWindow::isFullScreen() const
|
|||
{
|
||||
if (isOnDesktop())
|
||||
{
|
||||
ComponentPeer* const peer = getPeer();
|
||||
auto* peer = getPeer();
|
||||
return peer != nullptr && peer->isFullScreen();
|
||||
}
|
||||
|
||||
|
|
@ -433,10 +430,10 @@ void ResizableWindow::setFullScreen (const bool shouldBeFullScreen)
|
|||
|
||||
if (isOnDesktop())
|
||||
{
|
||||
if (ComponentPeer* const peer = getPeer())
|
||||
if (auto* peer = getPeer())
|
||||
{
|
||||
// keep a copy of this intact in case the real one gets messed-up while we're un-maximising
|
||||
const Rectangle<int> lastPos (lastNonFullScreenPos);
|
||||
auto lastPos = lastNonFullScreenPos;
|
||||
|
||||
peer->setFullScreen (shouldBeFullScreen);
|
||||
|
||||
|
|
@ -462,7 +459,7 @@ void ResizableWindow::setFullScreen (const bool shouldBeFullScreen)
|
|||
|
||||
bool ResizableWindow::isMinimised() const
|
||||
{
|
||||
if (ComponentPeer* const peer = getPeer())
|
||||
if (auto* peer = getPeer())
|
||||
return peer->isMinimised();
|
||||
|
||||
return false;
|
||||
|
|
@ -472,7 +469,7 @@ void ResizableWindow::setMinimised (const bool shouldMinimise)
|
|||
{
|
||||
if (shouldMinimise != isMinimised())
|
||||
{
|
||||
if (ComponentPeer* const peer = getPeer())
|
||||
if (auto* peer = getPeer())
|
||||
{
|
||||
updateLastPosIfShowing();
|
||||
peer->setMinimised (shouldMinimise);
|
||||
|
|
@ -487,7 +484,7 @@ void ResizableWindow::setMinimised (const bool shouldMinimise)
|
|||
bool ResizableWindow::isKioskMode() const
|
||||
{
|
||||
if (isOnDesktop())
|
||||
if (ComponentPeer* peer = getPeer())
|
||||
if (auto* peer = getPeer())
|
||||
return peer->isKioskMode();
|
||||
|
||||
return Desktop::getInstance().getKioskModeComponent() == this;
|
||||
|
|
@ -511,7 +508,7 @@ void ResizableWindow::updateLastPosIfNotFullScreen()
|
|||
void ResizableWindow::updatePeerConstrainer()
|
||||
{
|
||||
if (isOnDesktop())
|
||||
if (ComponentPeer* const peer = getPeer())
|
||||
if (auto* peer = getPeer())
|
||||
peer->setConstrainer (constrainer);
|
||||
}
|
||||
|
||||
|
|
@ -549,19 +546,20 @@ bool ResizableWindow::restoreWindowStateFromString (const String& s)
|
|||
if (newPos.isEmpty())
|
||||
return false;
|
||||
|
||||
ComponentPeer* const peer = isOnDesktop() ? getPeer() : nullptr;
|
||||
auto* peer = isOnDesktop() ? getPeer() : nullptr;
|
||||
|
||||
if (peer != nullptr)
|
||||
peer->getFrameSize().addTo (newPos);
|
||||
|
||||
{
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
RectangleList<int> allMonitors (desktop.getDisplays().getRectangleList (true));
|
||||
auto& desktop = Desktop::getInstance();
|
||||
auto allMonitors = desktop.getDisplays().getRectangleList (true);
|
||||
allMonitors.clipTo (newPos);
|
||||
const Rectangle<int> onScreenArea (allMonitors.getBounds());
|
||||
auto onScreenArea = allMonitors.getBounds();
|
||||
|
||||
if (onScreenArea.getWidth() * onScreenArea.getHeight() < 32 * 32)
|
||||
{
|
||||
const Rectangle<int> screen (desktop.getDisplays().getDisplayContaining (newPos.getCentre()).userArea);
|
||||
auto screen = desktop.getDisplays().getDisplayContaining (newPos.getCentre()).userArea;
|
||||
|
||||
newPos.setSize (jmin (newPos.getWidth(), screen.getWidth()),
|
||||
jmin (newPos.getHeight(), screen.getHeight()));
|
||||
|
|
|
|||
|
|
@ -32,14 +32,8 @@ class TopLevelWindowManager : private Timer,
|
|||
private DeletedAtShutdown
|
||||
{
|
||||
public:
|
||||
TopLevelWindowManager() : currentActive (nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
~TopLevelWindowManager()
|
||||
{
|
||||
clearSingletonInstance();
|
||||
}
|
||||
TopLevelWindowManager() {}
|
||||
~TopLevelWindowManager() { clearSingletonInstance(); }
|
||||
|
||||
juce_DeclareSingleton_SingleThreaded_Minimal (TopLevelWindowManager)
|
||||
|
||||
|
|
@ -52,14 +46,14 @@ public:
|
|||
{
|
||||
startTimer (jmin (1731, getTimerInterval() * 2));
|
||||
|
||||
TopLevelWindow* newActive = findCurrentlyActiveWindow();
|
||||
auto* newActive = findCurrentlyActiveWindow();
|
||||
|
||||
if (newActive != currentActive)
|
||||
{
|
||||
currentActive = newActive;
|
||||
|
||||
for (int i = windows.size(); --i >= 0;)
|
||||
if (TopLevelWindow* tlw = windows[i])
|
||||
if (auto* tlw = windows[i])
|
||||
tlw->setWindowActive (isWindowActive (tlw));
|
||||
|
||||
Desktop::getInstance().triggerFocusCallback();
|
||||
|
|
@ -83,14 +77,14 @@ public:
|
|||
|
||||
windows.removeFirstMatchingValue (w);
|
||||
|
||||
if (windows.size() == 0)
|
||||
if (windows.isEmpty())
|
||||
deleteInstance();
|
||||
}
|
||||
|
||||
Array<TopLevelWindow*> windows;
|
||||
|
||||
private:
|
||||
TopLevelWindow* currentActive;
|
||||
TopLevelWindow* currentActive = nullptr;
|
||||
|
||||
void timerCallback() override
|
||||
{
|
||||
|
|
@ -109,8 +103,8 @@ private:
|
|||
{
|
||||
if (Process::isForegroundProcess())
|
||||
{
|
||||
Component* const focusedComp = Component::getCurrentlyFocusedComponent();
|
||||
TopLevelWindow* w = dynamic_cast<TopLevelWindow*> (focusedComp);
|
||||
auto* focusedComp = Component::getCurrentlyFocusedComponent();
|
||||
auto* w = dynamic_cast<TopLevelWindow*> (focusedComp);
|
||||
|
||||
if (w == nullptr && focusedComp != nullptr)
|
||||
w = focusedComp->findParentComponentOfClass<TopLevelWindow>();
|
||||
|
|
@ -133,16 +127,13 @@ juce_ImplementSingleton_SingleThreaded (TopLevelWindowManager)
|
|||
void juce_checkCurrentlyFocusedTopLevelWindow();
|
||||
void juce_checkCurrentlyFocusedTopLevelWindow()
|
||||
{
|
||||
if (TopLevelWindowManager* const wm = TopLevelWindowManager::getInstanceWithoutCreating())
|
||||
if (auto* wm = TopLevelWindowManager::getInstanceWithoutCreating())
|
||||
wm->checkFocusAsync();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
TopLevelWindow::TopLevelWindow (const String& name, const bool shouldAddToDesktop)
|
||||
: Component (name),
|
||||
useDropShadow (true),
|
||||
useNativeTitleBar (false),
|
||||
isCurrentlyActive (false)
|
||||
: Component (name)
|
||||
{
|
||||
setOpaque (true);
|
||||
|
||||
|
|
@ -165,7 +156,7 @@ TopLevelWindow::~TopLevelWindow()
|
|||
//==============================================================================
|
||||
void TopLevelWindow::focusOfChildComponentChanged (FocusChangeType)
|
||||
{
|
||||
TopLevelWindowManager* const wm = TopLevelWindowManager::getInstance();
|
||||
auto* wm = TopLevelWindowManager::getInstance();
|
||||
|
||||
if (hasKeyboardFocus (true))
|
||||
wm->checkFocus();
|
||||
|
|
@ -194,7 +185,7 @@ bool TopLevelWindow::isUsingNativeTitleBar() const noexcept
|
|||
void TopLevelWindow::visibilityChanged()
|
||||
{
|
||||
if (isShowing())
|
||||
if (ComponentPeer* p = getPeer())
|
||||
if (auto* p = getPeer())
|
||||
if ((p->getStyleFlags() & (ComponentPeer::windowIsTemporary
|
||||
| ComponentPeer::windowIgnoresKeyPresses)) == 0)
|
||||
toFront (true);
|
||||
|
|
@ -302,10 +293,10 @@ void TopLevelWindow::centreAroundComponent (Component* c, const int width, const
|
|||
}
|
||||
else
|
||||
{
|
||||
Point<int> targetCentre (c->localPointToGlobal (c->getLocalBounds().getCentre()));
|
||||
Rectangle<int> parentArea (c->getParentMonitorArea());
|
||||
auto targetCentre = c->localPointToGlobal (c->getLocalBounds().getCentre());
|
||||
auto parentArea = c->getParentMonitorArea();
|
||||
|
||||
if (Component* const parent = getParentComponent())
|
||||
if (auto* parent = getParentComponent())
|
||||
{
|
||||
targetCentre = parent->getLocalPoint (nullptr, targetCentre);
|
||||
parentArea = parent->getLocalBounds();
|
||||
|
|
@ -336,13 +327,13 @@ TopLevelWindow* TopLevelWindow::getActiveTopLevelWindow() noexcept
|
|||
|
||||
for (int i = TopLevelWindow::getNumTopLevelWindows(); --i >= 0;)
|
||||
{
|
||||
TopLevelWindow* const tlw = TopLevelWindow::getTopLevelWindow (i);
|
||||
auto* tlw = TopLevelWindow::getTopLevelWindow (i);
|
||||
|
||||
if (tlw->isActiveWindow())
|
||||
{
|
||||
int numTWLParents = 0;
|
||||
|
||||
for (const Component* c = tlw->getParentComponent(); c != nullptr; c = c->getParentComponent())
|
||||
for (auto* c = tlw->getParentComponent(); c != nullptr; c = c->getParentComponent())
|
||||
if (dynamic_cast<const TopLevelWindow*> (c) != nullptr)
|
||||
++numTWLParents;
|
||||
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ protected:
|
|||
private:
|
||||
friend class TopLevelWindowManager;
|
||||
friend class ResizableWindow;
|
||||
bool useDropShadow, useNativeTitleBar, isCurrentlyActive;
|
||||
bool useDropShadow = true, useNativeTitleBar = false, isCurrentlyActive = false;
|
||||
ScopedPointer<DropShadower> shadower;
|
||||
|
||||
void setWindowActive (bool);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue