Browse Source

DrawableImage: Remove a message thread dependency

v6.1.6
Tom Poole 3 years ago
parent
commit
8ce68447bb
4 changed files with 31 additions and 24 deletions
  1. +0
    -5
      extras/Projucer/Source/Project/jucer_Project.cpp
  2. +5
    -13
      modules/juce_gui_basics/drawables/juce_Drawable.cpp
  3. +20
    -6
      modules/juce_gui_basics/drawables/juce_DrawableImage.cpp
  4. +6
    -0
      modules/juce_gui_basics/drawables/juce_DrawableImage.h

+ 0
- 5
extras/Projucer/Source/Project/jucer_Project.cpp View File

@@ -1514,11 +1514,6 @@ void Project::Item::setID (const String& newID) { state.setProperty (Ids::ID,
std::unique_ptr<Drawable> Project::Item::loadAsImageFile() const
{
const MessageManagerLock mml (ThreadPoolJob::getCurrentThreadPoolJob());
if (! mml.lockWasGained())
return nullptr;
if (isValid())
return Drawable::createFromImageFile (getFile());


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

@@ -167,23 +167,15 @@ void Drawable::setTransformToFit (const Rectangle<float>& area, RectanglePlaceme
//==============================================================================
std::unique_ptr<Drawable> Drawable::createFromImageData (const void* data, const size_t numBytes)
{
std::unique_ptr<Drawable> result;
auto image = ImageFileFormat::loadFrom (data, numBytes);
if (image.isValid())
{
auto* di = new DrawableImage();
di->setImage (image);
result.reset (di);
}
else
{
if (auto svg = parseXMLIfTagMatches (String::createStringFromData (data, (int) numBytes), "svg"))
result = Drawable::createFromSVG (*svg);
}
return std::make_unique<DrawableImage> (image);
if (auto svg = parseXMLIfTagMatches (String::createStringFromData (data, (int) numBytes), "svg"))
return Drawable::createFromSVG (*svg);
return result;
return {};
}
std::unique_ptr<Drawable> Drawable::createFromImageDataStream (InputStream& dataSource)


+ 20
- 6
modules/juce_gui_basics/drawables/juce_DrawableImage.cpp View File

@@ -40,6 +40,11 @@ DrawableImage::DrawableImage (const DrawableImage& other)
setBounds (other.getBounds());
}
DrawableImage::DrawableImage (const Image& imageToUse)
{
setImageInternal (imageToUse);
}
DrawableImage::~DrawableImage()
{
}
@@ -52,13 +57,8 @@ std::unique_ptr<Drawable> DrawableImage::createCopy() const
//==============================================================================
void DrawableImage::setImage (const Image& imageToUse)
{
if (image != imageToUse)
{
image = imageToUse;
setBounds (image.getBounds());
setBoundingBox (image.getBounds().toFloat());
if (setImageInternal (imageToUse))
repaint();
}
}
void DrawableImage::setOpacity (const float newOpacity)
@@ -133,6 +133,20 @@ Path DrawableImage::getOutlineAsPath() const
return {}; // not applicable for images
}
//==============================================================================
bool DrawableImage::setImageInternal (const Image& imageToUse)
{
if (image != imageToUse)
{
image = imageToUse;
setBounds (image.getBounds());
setBoundingBox (image.getBounds().toFloat());
return true;
}
return false;
}
//==============================================================================
std::unique_ptr<AccessibilityHandler> DrawableImage::createAccessibilityHandler()
{


+ 6
- 0
modules/juce_gui_basics/drawables/juce_DrawableImage.h View File

@@ -41,6 +41,9 @@ public:
DrawableImage();
DrawableImage (const DrawableImage&);
/** Sets the image that this drawable will render. */
explicit DrawableImage (const Image& imageToUse);
/** Destructor. */
~DrawableImage() override;
@@ -98,6 +101,9 @@ public:
std::unique_ptr<AccessibilityHandler> createAccessibilityHandler() override;
private:
//==============================================================================
bool setImageInternal (const Image&);
//==============================================================================
Image image;
float opacity = 1.0f;


Loading…
Cancel
Save