| @@ -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; | |||
| }; | |||
| //============================================================================== | |||
| @@ -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 | |||
| @@ -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); | |||
| @@ -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); | |||
| } | |||
| @@ -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(); | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| @@ -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); | |||
| @@ -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; | |||
| @@ -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; | |||
| @@ -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); | |||
| } | |||
| @@ -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; | |||
| @@ -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 | |||
| @@ -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); | |||
| @@ -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); | |||
| } | |||
| //============================================================================== | |||
| @@ -91,7 +91,7 @@ public: | |||
| //============================================================================== | |||
| /** @internal */ | |||
| Drawable* createCopy() const override; | |||
| std::unique_ptr<Drawable> createCopy() const override; | |||
| /** @internal */ | |||
| Rectangle<float> getDrawableBounds() const override; | |||
| /** @internal */ | |||
| @@ -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); | |||
| } | |||
| //============================================================================== | |||
| @@ -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 */ | |||
| @@ -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) | |||
| @@ -67,7 +67,7 @@ public: | |||
| //============================================================================== | |||
| /** @internal */ | |||
| Drawable* createCopy() const override; | |||
| std::unique_ptr<Drawable> createCopy() const override; | |||
| private: | |||
| //============================================================================== | |||
| @@ -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); | |||
| } | |||
| //============================================================================== | |||
| @@ -62,7 +62,7 @@ public: | |||
| //============================================================================== | |||
| /** @internal */ | |||
| Drawable* createCopy() const override; | |||
| std::unique_ptr<Drawable> createCopy() const override; | |||
| private: | |||
| Parallelogram<float> bounds; | |||
| @@ -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); | |||
| } | |||
| //============================================================================== | |||
| @@ -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 */ | |||
| @@ -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) | |||
| @@ -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(); | |||
| } | |||
| @@ -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); | |||
| } | |||
| @@ -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); | |||