1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

DrawableImage: Remove a message thread dependency

This commit is contained in:
Tom Poole 2021-06-21 15:53:58 +01:00
parent efd0373525
commit 8ce68447bb
4 changed files with 31 additions and 24 deletions

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());

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);
return result;
if (auto svg = parseXMLIfTagMatches (String::createStringFromData (data, (int) numBytes), "svg"))
return Drawable::createFromSVG (*svg);
return {};
}
std::unique_ptr<Drawable> Drawable::createFromImageDataStream (InputStream& dataSource)

View file

@ -40,6 +40,11 @@ DrawableImage::DrawableImage (const DrawableImage& other)
setBounds (other.getBounds());
}
DrawableImage::DrawableImage (const Image& imageToUse)
{
setImageInternal (imageToUse);
}
DrawableImage::~DrawableImage()
{
}
@ -52,14 +57,9 @@ 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()
{

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;