Browse Source

More std::unique_ptr modernisation - changed functions that used to return raw Drawable* pointers to use it

tags/2021-05-28
jules 6 years ago
parent
commit
a97c4a9139
28 changed files with 118 additions and 116 deletions
  1. +6
    -4
      examples/GUI/GraphicsDemo.h
  2. +6
    -4
      examples/GUI/WidgetsDemo.h
  3. +2
    -2
      extras/Projucer/Source/Application/jucer_AutoUpdater.cpp
  4. +1
    -1
      extras/Projucer/Source/CodeEditor/jucer_ItemPreviewComponent.h
  5. +2
    -2
      extras/Projucer/Source/ComponentEditor/jucer_BinaryResources.cpp
  6. +1
    -1
      extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp
  7. +2
    -2
      extras/Projucer/Source/Wizards/jucer_TemplateThumbnailsComponent.h
  8. +0
    -5
      modules/juce_core/containers/juce_ReferenceCountedArray.cpp
  9. +13
    -10
      modules/juce_gui_basics/buttons/juce_DrawableButton.cpp
  10. +1
    -1
      modules/juce_gui_basics/buttons/juce_DrawableButton.h
  11. +4
    -4
      modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp
  12. +3
    -3
      modules/juce_gui_basics/buttons/juce_ToolbarButton.h
  13. +13
    -14
      modules/juce_gui_basics/drawables/juce_Drawable.cpp
  14. +8
    -8
      modules/juce_gui_basics/drawables/juce_Drawable.h
  15. +3
    -3
      modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp
  16. +1
    -1
      modules/juce_gui_basics/drawables/juce_DrawableComposite.h
  17. +2
    -2
      modules/juce_gui_basics/drawables/juce_DrawableImage.cpp
  18. +1
    -1
      modules/juce_gui_basics/drawables/juce_DrawableImage.h
  19. +2
    -2
      modules/juce_gui_basics/drawables/juce_DrawablePath.cpp
  20. +1
    -1
      modules/juce_gui_basics/drawables/juce_DrawablePath.h
  21. +2
    -2
      modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp
  22. +1
    -1
      modules/juce_gui_basics/drawables/juce_DrawableRectangle.h
  23. +2
    -2
      modules/juce_gui_basics/drawables/juce_DrawableText.cpp
  24. +1
    -1
      modules/juce_gui_basics/drawables/juce_DrawableText.h
  25. +13
    -13
      modules/juce_gui_basics/drawables/juce_SVGParser.cpp
  26. +9
    -9
      modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp
  27. +14
    -13
      modules/juce_gui_basics/menus/juce_PopupMenu.cpp
  28. +4
    -4
      modules/juce_gui_basics/menus/juce_PopupMenu.h

+ 6
- 4
examples/GUI/GraphicsDemo.h View File

@@ -496,18 +496,20 @@ public:
if (svgFileStream.get() != nullptr)
{
svgDrawable.reset (dynamic_cast<DrawableComposite*> (Drawable::createFromImageDataStream (*svgFileStream)));
svgDrawable = Drawable::createFromImageDataStream (*svgFileStream);
if (svgDrawable.get() != nullptr)
if (svgDrawable != nullptr)
{
// to make our icon the right size, we'll set its bounding box to the size and position that we want.
svgDrawable->setBoundingBox ({ -100.0f, -100.0f, 200.0f, 200.0f });
if (auto comp = dynamic_cast<DrawableComposite*> (svgDrawable.get()))
comp->setBoundingBox ({ -100.0f, -100.0f, 200.0f, 200.0f });
}
}
}
Time lastSVGLoadTime;
std::unique_ptr<DrawableComposite> svgDrawable;
std::unique_ptr<Drawable> svgDrawable;
};
//==============================================================================


+ 6
- 4
examples/GUI/WidgetsDemo.h View File

@@ -632,12 +632,14 @@ private:
case edit_copy: return createButtonFromZipFileSVG (itemId, "copy", "edit-copy.svg");
case edit_cut: return createButtonFromZipFileSVG (itemId, "cut", "edit-cut.svg");
case edit_paste: return createButtonFromZipFileSVG (itemId, "paste", "edit-paste.svg");
case juceLogoButton:
{
auto* drawable = new DrawableImage();
auto drawable = std::make_unique<DrawableImage>();
drawable->setImage (getImageFromAssets ("juce_icon.png"));
return new ToolbarButton (itemId, "juce!", drawable, nullptr);
return new ToolbarButton (itemId, "juce!", std::move (drawable), {});
}
case customComboBox: return new CustomToolbarComboBox (itemId);
default: break;
}
@@ -670,8 +672,8 @@ private:
}
}
auto* image = iconsFromZipFile[iconNames.indexOf (filename)]->createCopy();
return new ToolbarButton (itemId, text, image, nullptr);
auto* image = iconsFromZipFile[iconNames.indexOf (filename)];
return new ToolbarButton (itemId, text, image->createCopy(), {});
}
// Demonstrates how to put a custom component into a toolbar - this one contains


+ 2
- 2
extras/Projucer/Source/Application/jucer_AutoUpdater.cpp View File

@@ -210,8 +210,8 @@ public:
dontAskAgainButton.setToggleState (getGlobalProperties().getValue (Ids::dontQueryForUpdate, {}).isNotEmpty(), dontSendNotification);
addAndMakeVisible (dontAskAgainButton);
juceIcon.reset (Drawable::createFromImageData (BinaryData::juce_icon_png, BinaryData::juce_icon_pngSize));
juceIcon = Drawable::createFromImageData (BinaryData::juce_icon_png,
BinaryData::juce_icon_pngSize);
lookAndFeelChanged();
setSize (500, 280);


+ 1
- 1
extras/Projucer/Source/CodeEditor/jucer_ItemPreviewComponent.h View File

@@ -109,7 +109,7 @@ private:
if (drawable == nullptr)
if (auto svg = parseXML (file))
drawable.reset (Drawable::createFromSVG (*svg));
drawable = Drawable::createFromSVG (*svg);
facts.removeEmptyStrings (true);
}


+ 2
- 2
extras/Projucer/Source/ComponentEditor/jucer_BinaryResources.cpp View File

@@ -188,8 +188,8 @@ const Drawable* BinaryResources::getDrawable (const String& name) const
if (auto* res = const_cast<BinaryResources::BinaryResource*> (getResource (name)))
{
if (res->drawable == nullptr && res->data.getSize() > 0)
res->drawable.reset (Drawable::createFromImageData (res->data.getData(),
res->data.getSize()));
res->drawable = Drawable::createFromImageData (res->data.getData(),
res->data.getSize());
return res->drawable.get();
}


+ 1
- 1
extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp View File

@@ -40,7 +40,7 @@ struct LogoComponent : public Component
LogoComponent()
{
if (auto svg = parseXML (BinaryData::background_logo_svg))
logo.reset (Drawable::createFromSVG (*svg));
logo = Drawable::createFromSVG (*svg);
else
jassertfalse;
}


+ 2
- 2
extras/Projucer/Source/Wizards/jucer_TemplateThumbnailsComponent.h View File

@@ -41,12 +41,12 @@ public:
// svg for thumbnail icon
auto svg = parseXML (thumbSvg);
jassert (svg != nullptr);
thumb.reset (Drawable::createFromSVG (*svg));
thumb = Drawable::createFromSVG (*svg);
// svg for thumbnail background highlight
auto backSvg = parseXML (BinaryData::wizard_Highlight_svg);
jassert (backSvg != nullptr);
hoverBackground.reset (Drawable::createFromSVG (*backSvg));
hoverBackground = Drawable::createFromSVG (*backSvg);
name = buttonName;


+ 0
- 5
modules/juce_core/containers/juce_ReferenceCountedArray.cpp View File

@@ -84,12 +84,7 @@ public:
expectEquals (derivedObject->getReferenceCount(), 1);
baseArray.add (baseObjectPtr);
#if JUCE_STRICT_REFCOUNTEDPOINTER
baseArray.add (derivedObjectPtr);
#else
baseArray.add (derivedObjectPtr.get());
#endif
for (auto o : baseArray)
expectEquals (o->getReferenceCount(), 2);


+ 13
- 10
modules/juce_gui_basics/buttons/juce_DrawableButton.cpp View File

@@ -37,9 +37,12 @@ DrawableButton::~DrawableButton()
}
//==============================================================================
static Drawable* copyDrawableIfNotNull (const Drawable* const d)
static std::unique_ptr<Drawable> copyDrawableIfNotNull (const Drawable* const d)
{
return d != nullptr ? d->createCopy() : nullptr;
if (d != nullptr)
return d->createCopy();
return {};
}
void DrawableButton::setImages (const Drawable* normal,
@@ -53,14 +56,14 @@ void DrawableButton::setImages (const Drawable* normal,
{
jassert (normal != nullptr); // you really need to give it at least a normal image..
normalImage .reset (copyDrawableIfNotNull (normal));
overImage .reset (copyDrawableIfNotNull (over));
downImage .reset (copyDrawableIfNotNull (down));
disabledImage .reset (copyDrawableIfNotNull (disabled));
normalImageOn .reset (copyDrawableIfNotNull (normalOn));
overImageOn .reset (copyDrawableIfNotNull (overOn));
downImageOn .reset (copyDrawableIfNotNull (downOn));
disabledImageOn .reset (copyDrawableIfNotNull (disabledOn));
normalImage = copyDrawableIfNotNull (normal);
overImage = copyDrawableIfNotNull (over);
downImage = copyDrawableIfNotNull (down);
disabledImage = copyDrawableIfNotNull (disabled);
normalImageOn = copyDrawableIfNotNull (normalOn);
overImageOn = copyDrawableIfNotNull (overOn);
downImageOn = copyDrawableIfNotNull (downOn);
disabledImageOn = copyDrawableIfNotNull (disabledOn);
currentImage = nullptr;


+ 1
- 1
modules/juce_gui_basics/buttons/juce_DrawableButton.h View File

@@ -183,7 +183,7 @@ private:
//==============================================================================
ButtonStyle style;
std::unique_ptr<Drawable> normalImage, overImage, downImage, disabledImage,
normalImageOn, overImageOn, downImageOn, disabledImageOn;
normalImageOn, overImageOn, downImageOn, disabledImageOn;
Drawable* currentImage = nullptr;
int edgeIndent = 3;


+ 4
- 4
modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp View File

@@ -28,11 +28,11 @@ namespace juce
{
ToolbarButton::ToolbarButton (const int iid, const String& buttonText,
Drawable* const normalIm, Drawable* const toggledOnIm)
std::unique_ptr<Drawable> normalIm,
std::unique_ptr<Drawable> toggledOnIm)
: ToolbarItemComponent (iid, buttonText, true),
normalImage (normalIm),
toggledOnImage (toggledOnIm),
currentImage (nullptr)
normalImage (std::move (normalIm)),
toggledOnImage (std::move (toggledOnIm))
{
jassert (normalImage != nullptr);
}


+ 3
- 3
modules/juce_gui_basics/buttons/juce_ToolbarButton.h View File

@@ -62,8 +62,8 @@ public:
*/
ToolbarButton (int itemId,
const String& labelText,
Drawable* normalImage,
Drawable* toggledOnImage);
std::unique_ptr<Drawable> normalImage,
std::unique_ptr<Drawable> toggledOnImage);
/** Destructor. */
~ToolbarButton() override;
@@ -87,7 +87,7 @@ public:
private:
//==============================================================================
std::unique_ptr<Drawable> normalImage, toggledOnImage;
Drawable* currentImage;
Drawable* currentImage = nullptr;
void updateDrawable();
Drawable* getImageToUse() const;


+ 13
- 14
modules/juce_gui_basics/drawables/juce_Drawable.cpp View File

@@ -110,11 +110,11 @@ DrawableComposite* Drawable::getParent() const
return dynamic_cast<DrawableComposite*> (getParentComponent());
}
void Drawable::setClipPath (Drawable* clipPath)
void Drawable::setClipPath (std::unique_ptr<Drawable> clipPath)
{
if (drawableClipPath.get() != clipPath)
if (drawableClipPath != clipPath)
{
drawableClipPath.reset (clipPath);
drawableClipPath = std::move (clipPath);
repaint();
}
}
@@ -166,9 +166,9 @@ void Drawable::setTransformToFit (const Rectangle<float>& area, RectanglePlaceme
}
//==============================================================================
Drawable* Drawable::createFromImageData (const void* data, const size_t numBytes)
std::unique_ptr<Drawable> Drawable::createFromImageData (const void* data, const size_t numBytes)
{
Drawable* result = nullptr;
std::unique_ptr<Drawable> result;
auto image = ImageFileFormat::loadFrom (data, numBytes);
@@ -176,7 +176,7 @@ Drawable* Drawable::createFromImageData (const void* data, const size_t numBytes
{
auto* di = new DrawableImage();
di->setImage (image);
result = di;
result.reset (di);
}
else
{
@@ -186,18 +186,14 @@ Drawable* Drawable::createFromImageData (const void* data, const size_t numBytes
std::unique_ptr<XmlElement> outer (doc.getDocumentElement (true));
if (outer != nullptr && outer->hasTagName ("svg"))
{
std::unique_ptr<XmlElement> svg (doc.getDocumentElement());
if (svg != nullptr)
if (auto svg = doc.getDocumentElement())
result = Drawable::createFromSVG (*svg);
}
}
return result;
}
Drawable* Drawable::createFromImageDataStream (InputStream& dataSource)
std::unique_ptr<Drawable> Drawable::createFromImageDataStream (InputStream& dataSource)
{
MemoryOutputStream mo;
mo << dataSource;
@@ -205,11 +201,14 @@ Drawable* Drawable::createFromImageDataStream (InputStream& dataSource)
return createFromImageData (mo.getData(), mo.getDataSize());
}
Drawable* Drawable::createFromImageFile (const File& file)
std::unique_ptr<Drawable> Drawable::createFromImageFile (const File& file)
{
FileInputStream fin (file);
return fin.openedOk() ? createFromImageDataStream (fin) : nullptr;
if (fin.openedOk())
return createFromImageDataStream (fin);
return {};
}
} // namespace juce

+ 8
- 8
modules/juce_gui_basics/drawables/juce_Drawable.h View File

@@ -54,7 +54,7 @@ public:
Use this to create a new copy of this and any sub-objects in the tree.
*/
virtual Drawable* createCopy() const = 0;
virtual std::unique_ptr<Drawable> createCopy() const = 0;
/** Creates a path that describes the outline of this drawable. */
virtual Path getOutlineAsPath() const = 0;
@@ -123,9 +123,9 @@ public:
DrawableComposite* getParent() const;
/** Sets a the clipping region of this drawable using another drawable.
The drawbale passed in ill be deleted when no longer needed.
The drawbale passed in will be deleted when no longer needed.
*/
void setClipPath (Drawable* drawableClipPath);
void setClipPath (std::unique_ptr<Drawable> drawableClipPath);
//==============================================================================
/** Tries to turn some kind of image file into a drawable.
@@ -133,21 +133,21 @@ public:
The data could be an image that the ImageFileFormat class understands, or it
could be SVG.
*/
static Drawable* createFromImageData (const void* data, size_t numBytes);
static std::unique_ptr<Drawable> createFromImageData (const void* data, size_t numBytes);
/** Tries to turn a stream containing some kind of image data into a drawable.
The data could be an image that the ImageFileFormat class understands, or it
could be SVG.
*/
static Drawable* createFromImageDataStream (InputStream& dataSource);
static std::unique_ptr<Drawable> createFromImageDataStream (InputStream& dataSource);
/** Tries to turn a file containing some kind of image data into a drawable.
The data could be an image that the ImageFileFormat class understands, or it
could be SVG.
*/
static Drawable* createFromImageFile (const File& file);
static std::unique_ptr<Drawable> createFromImageFile (const File& file);
/** Attempts to parse an SVG (Scalable Vector Graphics) document, and to turn this
into a Drawable tree.
@@ -158,7 +158,7 @@ public:
SVG is a pretty large and complex spec, and this doesn't aim to be a full
implementation, but it can return the basic vector objects.
*/
static Drawable* createFromSVG (const XmlElement& svgDocument);
static std::unique_ptr<Drawable> createFromSVG (const XmlElement& svgDocument);
/** Attempts to parse an SVG (Scalable Vector Graphics) document from a file,
and to turn this into a Drawable tree.
@@ -172,7 +172,7 @@ public:
Any references to references to external image files will be relative to
the parent directory of the file passed.
*/
static Drawable* createFromSVGFile (const File& svgFile);
static std::unique_ptr<Drawable> createFromSVGFile (const File& svgFile);
/** Parses an SVG path string and returns it. */
static Path parseSVGPath (const String& svgPath);


+ 3
- 3
modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp View File

@@ -40,7 +40,7 @@ DrawableComposite::DrawableComposite (const DrawableComposite& other)
{
for (auto* c : other.getChildren())
if (auto* d = dynamic_cast<const Drawable*> (c))
addAndMakeVisible (d->createCopy());
addAndMakeVisible (d->createCopy().release());
}
DrawableComposite::~DrawableComposite()
@@ -48,9 +48,9 @@ DrawableComposite::~DrawableComposite()
deleteAllChildren();
}
Drawable* DrawableComposite::createCopy() const
std::unique_ptr<Drawable> DrawableComposite::createCopy() const
{
return new DrawableComposite (*this);
return std::make_unique<DrawableComposite> (*this);
}
//==============================================================================


+ 1
- 1
modules/juce_gui_basics/drawables/juce_DrawableComposite.h View File

@@ -91,7 +91,7 @@ public:
//==============================================================================
/** @internal */
Drawable* createCopy() const override;
std::unique_ptr<Drawable> createCopy() const override;
/** @internal */
Rectangle<float> getDrawableBounds() const override;
/** @internal */


+ 2
- 2
modules/juce_gui_basics/drawables/juce_DrawableImage.cpp View File

@@ -45,9 +45,9 @@ DrawableImage::~DrawableImage()
{
}
Drawable* DrawableImage::createCopy() const
std::unique_ptr<Drawable> DrawableImage::createCopy() const
{
return new DrawableImage (*this);
return std::make_unique<DrawableImage> (*this);
}
//==============================================================================


+ 1
- 1
modules/juce_gui_basics/drawables/juce_DrawableImage.h View File

@@ -90,7 +90,7 @@ public:
/** @internal */
bool hitTest (int x, int y) override;
/** @internal */
Drawable* createCopy() const override;
std::unique_ptr<Drawable> createCopy() const override;
/** @internal */
Rectangle<float> getDrawableBounds() const override;
/** @internal */


+ 2
- 2
modules/juce_gui_basics/drawables/juce_DrawablePath.cpp View File

@@ -35,9 +35,9 @@ DrawablePath::DrawablePath (const DrawablePath& other) : DrawableShape (other)
setPath (other.path);
}
Drawable* DrawablePath::createCopy() const
std::unique_ptr<Drawable> DrawablePath::createCopy() const
{
return new DrawablePath (*this);
return std::make_unique<DrawablePath> (*this);
}
void DrawablePath::setPath (const Path& newPath)


+ 1
- 1
modules/juce_gui_basics/drawables/juce_DrawablePath.h View File

@@ -67,7 +67,7 @@ public:
//==============================================================================
/** @internal */
Drawable* createCopy() const override;
std::unique_ptr<Drawable> createCopy() const override;
private:
//==============================================================================


+ 2
- 2
modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp View File

@@ -38,9 +38,9 @@ DrawableRectangle::DrawableRectangle (const DrawableRectangle& other)
rebuildPath();
}
Drawable* DrawableRectangle::createCopy() const
std::unique_ptr<Drawable> DrawableRectangle::createCopy() const
{
return new DrawableRectangle (*this);
return std::make_unique<DrawableRectangle> (*this);
}
//==============================================================================


+ 1
- 1
modules/juce_gui_basics/drawables/juce_DrawableRectangle.h View File

@@ -62,7 +62,7 @@ public:
//==============================================================================
/** @internal */
Drawable* createCopy() const override;
std::unique_ptr<Drawable> createCopy() const override;
private:
Parallelogram<float> bounds;


+ 2
- 2
modules/juce_gui_basics/drawables/juce_DrawableText.cpp View File

@@ -52,9 +52,9 @@ DrawableText::~DrawableText()
{
}
Drawable* DrawableText::createCopy() const
std::unique_ptr<Drawable> DrawableText::createCopy() const
{
return new DrawableText (*this);
return std::make_unique<DrawableText> (*this);
}
//==============================================================================


+ 1
- 1
modules/juce_gui_basics/drawables/juce_DrawableText.h View File

@@ -92,7 +92,7 @@ public:
/** @internal */
void paint (Graphics&) override;
/** @internal */
Drawable* createCopy() const override;
std::unique_ptr<Drawable> createCopy() const override;
/** @internal */
Rectangle<float> getDrawableBounds() const override;
/** @internal */


+ 13
- 13
modules/juce_gui_basics/drawables/juce_SVGParser.cpp View File

@@ -809,7 +809,7 @@ private:
if (drawableClipPath->getNumChildComponents() > 0)
{
setCommonAttributes (*drawableClipPath, xmlPath);
target.setClipPath (drawableClipPath.release());
target.setClipPath (std::move (drawableClipPath));
return true;
}
}
@@ -1696,32 +1696,32 @@ private:
//==============================================================================
Drawable* Drawable::createFromSVG (const XmlElement& svgDocument)
std::unique_ptr<Drawable> Drawable::createFromSVG (const XmlElement& svgDocument)
{
if (! svgDocument.hasTagNameIgnoringNamespace ("svg"))
return nullptr;
return {};
SVGState state (&svgDocument);
return state.parseSVGElement (SVGState::XmlPath (&svgDocument, nullptr));
return std::unique_ptr<Drawable> (state.parseSVGElement (SVGState::XmlPath (&svgDocument, nullptr)));
}
Drawable* Drawable::createFromSVGFile (const File& svgFile)
std::unique_ptr<Drawable> Drawable::createFromSVGFile (const File& svgFile)
{
XmlDocument doc (svgFile);
std::unique_ptr<XmlElement> outer (doc.getDocumentElement (true));
if (outer != nullptr && outer->hasTagName ("svg"))
if (auto outer = doc.getDocumentElement (true))
{
std::unique_ptr<XmlElement> svgDocument (doc.getDocumentElement());
if (svgDocument != nullptr)
if (outer->hasTagName ("svg"))
{
SVGState state (svgDocument.get(), svgFile);
return state.parseSVGElement (SVGState::XmlPath (svgDocument.get(), nullptr));
if (auto svgDocument = doc.getDocumentElement())
{
SVGState state (svgDocument.get(), svgFile);
return std::unique_ptr<Drawable> (state.parseSVGElement (SVGState::XmlPath (svgDocument.get(), nullptr)));
}
}
}
return nullptr;
return {};
}
Path Drawable::parseSVGPath (const String& svgPath)


+ 9
- 9
modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp View File

@@ -2315,14 +2315,14 @@ Button* LookAndFeel_V2::createTabBarExtrasButton()
dp.setFill (Colour (0x59000000));
DrawableComposite normalImage;
normalImage.addAndMakeVisible (ellipse.createCopy());
normalImage.addAndMakeVisible (dp.createCopy());
normalImage.addAndMakeVisible (ellipse.createCopy().release());
normalImage.addAndMakeVisible (dp.createCopy().release());
dp.setFill (Colour (0xcc000000));
DrawableComposite overImage;
overImage.addAndMakeVisible (ellipse.createCopy());
overImage.addAndMakeVisible (dp.createCopy());
overImage.addAndMakeVisible (ellipse.createCopy().release());
overImage.addAndMakeVisible (dp.createCopy().release());
auto db = new DrawableButton ("tabs", DrawableButton::ImageFitted);
db->setImages (&normalImage, &overImage, nullptr);
@@ -2653,7 +2653,7 @@ void LookAndFeel_V2::layoutFileBrowserComponent (FileBrowserComponent& browserCo
}
//==============================================================================
static Drawable* createDrawableFromSVG (const char* data)
static std::unique_ptr<Drawable> createDrawableFromSVG (const char* data)
{
auto xml = parseXML (data);
jassert (xml != nullptr);
@@ -2663,7 +2663,7 @@ static Drawable* createDrawableFromSVG (const char* data)
const Drawable* LookAndFeel_V2::getDefaultFolderImage()
{
if (folderImage == nullptr)
folderImage.reset (createDrawableFromSVG (R"svgdata(
folderImage = createDrawableFromSVG (R"svgdata(
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="706" height="532">
<defs>
<linearGradient id="a">
@@ -2678,7 +2678,7 @@ const Drawable* LookAndFeel_V2::getDefaultFolderImage()
<path d="M608.6 136.8L235.2 208a22.7 22.7 0 0 0-16 19l-40.8 241c1.7 8.4 9.6 14.5 17.8 12.3l380-104c8-2.2 10.7-10.2 12.3-18.4l38-210.1c.4-15.4-10.4-11.8-18-11.1z" display="block" fill="url(#c)" opacity=".8" stroke="#446c98" stroke-width="7"/>
</g>
</svg>
)svgdata"));
)svgdata");
return folderImage.get();
}
@@ -2686,12 +2686,12 @@ const Drawable* LookAndFeel_V2::getDefaultFolderImage()
const Drawable* LookAndFeel_V2::getDefaultDocumentFileImage()
{
if (documentImage == nullptr)
documentImage.reset (createDrawableFromSVG (R"svgdata(
documentImage = createDrawableFromSVG (R"svgdata(
<svg version="1" viewBox="-10 -10 450 600" xmlns="http://www.w3.org/2000/svg">
<path d="M17 0h290l120 132v426c0 10-8 19-17 19H17c-9 0-17-9-17-19V19C0 8 8 0 17 0z" fill="#e5e5e5" stroke="#888888" stroke-width="7"/>
<path d="M427 132H324c-9 0-17-9-17-19V0l120 132z" fill="#ccc"/>
</svg>
)svgdata"));
)svgdata");
return documentImage.get();
}


+ 14
- 13
modules/juce_gui_basics/menus/juce_PopupMenu.cpp View File

@@ -1331,7 +1331,7 @@ PopupMenu::Item& PopupMenu::Item::operator= (const Item& other)
text = other.text;
itemID = other.itemID;
subMenu.reset (createCopyIfNotNull (other.subMenu.get()));
image.reset (other.image != nullptr ? other.image->createCopy() : nullptr);
image = other.image != nullptr ? other.image->createCopy() : std::unique_ptr<Drawable>();
customComponent = other.customComponent;
customCallback = other.customCallback;
commandManager = other.commandManager;
@@ -1365,16 +1365,16 @@ void PopupMenu::addItem (int itemResultID, const String& itemText, bool isActive
addItem (i);
}
static Drawable* createDrawableFromImage (const Image& im)
static std::unique_ptr<Drawable> createDrawableFromImage (const Image& im)
{
if (im.isValid())
{
auto d = new DrawableImage();
d->setImage (im);
return d;
return std::unique_ptr<Drawable> (d);
}
return nullptr;
return {};
}
void PopupMenu::addItem (int itemResultID, const String& itemText, bool isActive, bool isTicked, const Image& iconToUse)
@@ -1382,21 +1382,22 @@ void PopupMenu::addItem (int itemResultID, const String& itemText, bool isActive
addItem (itemResultID, itemText, isActive, isTicked, createDrawableFromImage (iconToUse));
}
void PopupMenu::addItem (int itemResultID, const String& itemText, bool isActive, bool isTicked, Drawable* iconToUse)
void PopupMenu::addItem (int itemResultID, const String& itemText, bool isActive,
bool isTicked, std::unique_ptr<Drawable> iconToUse)
{
Item i;
i.text = itemText;
i.itemID = itemResultID;
i.isEnabled = isActive;
i.isTicked = isTicked;
i.image.reset (iconToUse);
i.image = std::move (iconToUse);
addItem (i);
}
void PopupMenu::addCommandItem (ApplicationCommandManager* commandManager,
const CommandID commandID,
const String& displayName,
Drawable* iconToUse)
std::unique_ptr<Drawable> iconToUse)
{
jassert (commandManager != nullptr && commandID != 0);
@@ -1411,13 +1412,13 @@ void PopupMenu::addCommandItem (ApplicationCommandManager* commandManager,
i.commandManager = commandManager;
i.isEnabled = target != nullptr && (info.flags & ApplicationCommandInfo::isDisabled) == 0;
i.isTicked = (info.flags & ApplicationCommandInfo::isTicked) != 0;
i.image.reset (iconToUse);
i.image = std::move (iconToUse);
addItem (i);
}
}
void PopupMenu::addColouredItem (int itemResultID, const String& itemText, Colour itemTextColour,
bool isActive, bool isTicked, Drawable* iconToUse)
bool isActive, bool isTicked, std::unique_ptr<Drawable> iconToUse)
{
Item i;
i.text = itemText;
@@ -1425,7 +1426,7 @@ void PopupMenu::addColouredItem (int itemResultID, const String& itemText, Colou
i.colour = itemTextColour;
i.isEnabled = isActive;
i.isTicked = isTicked;
i.image.reset (iconToUse);
i.image = std::move (iconToUse);
addItem (i);
}
@@ -1438,7 +1439,7 @@ void PopupMenu::addColouredItem (int itemResultID, const String& itemText, Colou
i.colour = itemTextColour;
i.isEnabled = isActive;
i.isTicked = isTicked;
i.image.reset (createDrawableFromImage (iconToUse));
i.image = createDrawableFromImage (iconToUse);
addItem (i);
}
@@ -1472,7 +1473,7 @@ void PopupMenu::addSubMenu (const String& subMenuName, const PopupMenu& subMenu,
}
void PopupMenu::addSubMenu (const String& subMenuName, const PopupMenu& subMenu, bool isActive,
Drawable* iconToUse, bool isTicked, int itemResultID)
std::unique_ptr<Drawable> iconToUse, bool isTicked, int itemResultID)
{
Item i;
i.text = subMenuName;
@@ -1480,7 +1481,7 @@ void PopupMenu::addSubMenu (const String& subMenuName, const PopupMenu& subMenu,
i.subMenu.reset (new PopupMenu (subMenu));
i.isEnabled = isActive && (itemResultID != 0 || subMenu.getNumItems() > 0);
i.isTicked = isTicked;
i.image.reset (iconToUse);
i.image = std::move (iconToUse);
addItem (i);
}


+ 4
- 4
modules/juce_gui_basics/menus/juce_PopupMenu.h View File

@@ -231,7 +231,7 @@ public:
const String& itemText,
bool isEnabled,
bool isTicked,
Drawable* iconToUse);
std::unique_ptr<Drawable> iconToUse);
/** Adds an item that represents one of the commands in a command manager object.
@@ -247,7 +247,7 @@ public:
void addCommandItem (ApplicationCommandManager* commandManager,
CommandID commandID,
const String& displayName = String(),
Drawable* iconToUse = nullptr);
std::unique_ptr<Drawable> iconToUse = {});
/** Appends a text item with a special colour.
@@ -273,7 +273,7 @@ public:
Colour itemTextColour,
bool isEnabled,
bool isTicked,
Drawable* iconToUse);
std::unique_ptr<Drawable> iconToUse);
/** Appends a custom menu item.
@@ -344,7 +344,7 @@ public:
void addSubMenu (const String& subMenuName,
const PopupMenu& subMenu,
bool isEnabled,
Drawable* iconToUse,
std::unique_ptr<Drawable> iconToUse,
bool isTicked = false,
int itemResultID = 0);


Loading…
Cancel
Save