@@ -77614,26 +77614,28 @@ void ComponentPeer::handleFileDragDrop (const StringArray& files, const Point<in | |||||
class AsyncFileDropMessage : public CallbackMessage | class AsyncFileDropMessage : public CallbackMessage | ||||
{ | { | ||||
public: | public: | ||||
AsyncFileDropMessage (Component* target_, const Point<int>& position_, const StringArray& files_) | |||||
: target (target_), position (position_), files (files_) | |||||
AsyncFileDropMessage (Component* target_, FileDragAndDropTarget* dropTarget_, | |||||
const Point<int>& position_, const StringArray& files_) | |||||
: target (target_), dropTarget (dropTarget_), position (position_), files (files_) | |||||
{ | { | ||||
} | } | ||||
void messageCallback() | void messageCallback() | ||||
{ | { | ||||
if (target != 0) | if (target != 0) | ||||
target->filesDropped (files, position.getX(), position.getY()); | |||||
dropTarget->filesDropped (files, position.getX(), position.getY()); | |||||
} | } | ||||
private: | private: | ||||
Component::SafePointer<Component> target; | Component::SafePointer<Component> target; | ||||
FileDragAndDropTarget* dropTarget; | |||||
Point<int> position; | Point<int> position; | ||||
StringArray files; | StringArray files; | ||||
// (NB: don't make this non-copyable, which messes up in VC) | // (NB: don't make this non-copyable, which messes up in VC) | ||||
}; | }; | ||||
(new AsyncFileDropMessage (targetComp, targetComp->getLocalPoint (component, position), files))->post(); | |||||
(new AsyncFileDropMessage (targetComp, target, targetComp->getLocalPoint (component, position), files))->post(); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -94853,10 +94855,6 @@ public: | |||||
imageData = imageDataAllocated; | imageData = imageDataAllocated; | ||||
} | } | ||||
~SoftwareSharedImage() | |||||
{ | |||||
} | |||||
Image::ImageType getType() const | Image::ImageType getType() const | ||||
{ | { | ||||
return Image::SoftwareImage; | return Image::SoftwareImage; | ||||
@@ -94876,6 +94874,8 @@ public: | |||||
private: | private: | ||||
HeapBlock<uint8> imageDataAllocated; | HeapBlock<uint8> imageDataAllocated; | ||||
JUCE_LEAK_DETECTOR (SoftwareSharedImage); | |||||
}; | }; | ||||
Image::SharedImage* Image::SharedImage::createSoftwareImage (Image::PixelFormat format, int width, int height, bool clearImage) | Image::SharedImage* Image::SharedImage::createSoftwareImage (Image::PixelFormat format, int width, int height, bool clearImage) | ||||
@@ -266330,6 +266330,8 @@ private: | |||||
return format == Image::ARGB ? (kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little) : kCGBitmapByteOrderDefault; | return format == Image::ARGB ? (kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little) : kCGBitmapByteOrderDefault; | ||||
#endif | #endif | ||||
} | } | ||||
JUCE_LEAK_DETECTOR (CoreGraphicsImage); | |||||
}; | }; | ||||
Image::SharedImage* Image::SharedImage::createNativeImage (PixelFormat format, int width, int height, bool clearImage) | Image::SharedImage* Image::SharedImage::createNativeImage (PixelFormat format, int width, int height, bool clearImage) | ||||
@@ -266844,10 +266846,6 @@ private: | |||||
{ | { | ||||
} | } | ||||
~SavedState() | |||||
{ | |||||
} | |||||
FillType fillType; | FillType fillType; | ||||
Font font; | Font font; | ||||
CGFontRef fontRef; | CGFontRef fontRef; | ||||
@@ -266982,7 +266980,7 @@ private: | |||||
CGContextConcatCTM (context, t); | CGContextConcatCTM (context, t); | ||||
} | } | ||||
JUCE_DECLARE_NON_COPYABLE (CoreGraphicsContext); | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreGraphicsContext); | |||||
}; | }; | ||||
LowLevelGraphicsContext* CoreGraphicsImage::createLowLevelContext() | LowLevelGraphicsContext* CoreGraphicsImage::createLowLevelContext() | ||||
@@ -271062,6 +271060,8 @@ private: | |||||
return format == Image::ARGB ? (kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little) : kCGBitmapByteOrderDefault; | return format == Image::ARGB ? (kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little) : kCGBitmapByteOrderDefault; | ||||
#endif | #endif | ||||
} | } | ||||
JUCE_LEAK_DETECTOR (CoreGraphicsImage); | |||||
}; | }; | ||||
Image::SharedImage* Image::SharedImage::createNativeImage (PixelFormat format, int width, int height, bool clearImage) | Image::SharedImage* Image::SharedImage::createNativeImage (PixelFormat format, int width, int height, bool clearImage) | ||||
@@ -271576,10 +271576,6 @@ private: | |||||
{ | { | ||||
} | } | ||||
~SavedState() | |||||
{ | |||||
} | |||||
FillType fillType; | FillType fillType; | ||||
Font font; | Font font; | ||||
CGFontRef fontRef; | CGFontRef fontRef; | ||||
@@ -271714,7 +271710,7 @@ private: | |||||
CGContextConcatCTM (context, t); | CGContextConcatCTM (context, t); | ||||
} | } | ||||
JUCE_DECLARE_NON_COPYABLE (CoreGraphicsContext); | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreGraphicsContext); | |||||
}; | }; | ||||
LowLevelGraphicsContext* CoreGraphicsImage::createLowLevelContext() | LowLevelGraphicsContext* CoreGraphicsImage::createLowLevelContext() | ||||
@@ -273411,28 +273407,29 @@ void juce_setKioskComponent (Component* kioskModeComponent, bool enableOrDisable | |||||
} | } | ||||
} | } | ||||
class AsyncRepaintMessage : public CallbackMessage | |||||
{ | |||||
public: | |||||
NSViewComponentPeer* const peer; | |||||
const Rectangle<int> rect; | |||||
AsyncRepaintMessage (NSViewComponentPeer* const peer_, const Rectangle<int>& rect_) | |||||
: peer (peer_), rect (rect_) | |||||
{ | |||||
} | |||||
void messageCallback() | |||||
{ | |||||
if (ComponentPeer::isValidPeer (peer)) | |||||
peer->repaint (rect); | |||||
} | |||||
}; | |||||
void NSViewComponentPeer::repaint (const Rectangle<int>& area) | void NSViewComponentPeer::repaint (const Rectangle<int>& area) | ||||
{ | { | ||||
if (insideDrawRect) | if (insideDrawRect) | ||||
{ | { | ||||
class AsyncRepaintMessage : public CallbackMessage | |||||
{ | |||||
public: | |||||
AsyncRepaintMessage (NSViewComponentPeer* const peer_, const Rectangle<int>& rect_) | |||||
: peer (peer_), rect (rect_) | |||||
{ | |||||
} | |||||
void messageCallback() | |||||
{ | |||||
if (ComponentPeer::isValidPeer (peer)) | |||||
peer->repaint (rect); | |||||
} | |||||
private: | |||||
NSViewComponentPeer* const peer; | |||||
const Rectangle<int> rect; | |||||
}; | |||||
(new AsyncRepaintMessage (this, area))->post(); | (new AsyncRepaintMessage (this, area))->post(); | ||||
} | } | ||||
else | else | ||||
@@ -675,6 +675,16 @@ | |||||
JUCE_DECLARE_NON_COPYABLE(className)\ | JUCE_DECLARE_NON_COPYABLE(className)\ | ||||
JUCE_LEAK_DETECTOR(className) | JUCE_LEAK_DETECTOR(className) | ||||
#if ! DOXYGEN | |||||
#define JUCE_JOIN_MACRO_HELPER(a, b) a ## b | |||||
#endif | |||||
/** Good old C macro concatenation helper. | |||||
This combines two items (which may themselves be macros) into a single string, | |||||
avoiding the pitfalls of the ## macro operator. | |||||
*/ | |||||
#define JUCE_JOIN_MACRO(a, b) JUCE_JOIN_MACRO_HELPER (a, b) | |||||
#if JUCE_CATCH_UNHANDLED_EXCEPTIONS | #if JUCE_CATCH_UNHANDLED_EXCEPTIONS | ||||
#define JUCE_TRY try | #define JUCE_TRY try | ||||
@@ -3201,7 +3211,7 @@ private: | |||||
@see JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR, LeakedObjectDetector | @see JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR, LeakedObjectDetector | ||||
*/ | */ | ||||
#define JUCE_LEAK_DETECTOR(OwnerClass) LeakedObjectDetector<OwnerClass> leakDetector ## __LINE__; | |||||
#define JUCE_LEAK_DETECTOR(OwnerClass) LeakedObjectDetector<OwnerClass> JUCE_JOIN_MACRO (leakDetector, __LINE__); | |||||
#else | #else | ||||
#define JUCE_LEAK_DETECTOR(OwnerClass) | #define JUCE_LEAK_DETECTOR(OwnerClass) | ||||
#endif | #endif | ||||
@@ -126,7 +126,7 @@ private: | |||||
@see JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR, LeakedObjectDetector | @see JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR, LeakedObjectDetector | ||||
*/ | */ | ||||
#define JUCE_LEAK_DETECTOR(OwnerClass) LeakedObjectDetector<OwnerClass> leakDetector ## __LINE__; | |||||
#define JUCE_LEAK_DETECTOR(OwnerClass) LeakedObjectDetector<OwnerClass> JUCE_JOIN_MACRO (leakDetector, __LINE__); | |||||
#else | #else | ||||
#define JUCE_LEAK_DETECTOR(OwnerClass) | #define JUCE_LEAK_DETECTOR(OwnerClass) | ||||
#endif | #endif | ||||
@@ -191,6 +191,18 @@ | |||||
JUCE_DECLARE_NON_COPYABLE(className)\ | JUCE_DECLARE_NON_COPYABLE(className)\ | ||||
JUCE_LEAK_DETECTOR(className) | JUCE_LEAK_DETECTOR(className) | ||||
//============================================================================== | |||||
#if ! DOXYGEN | |||||
#define JUCE_JOIN_MACRO_HELPER(a, b) a ## b | |||||
#endif | |||||
/** Good old C macro concatenation helper. | |||||
This combines two items (which may themselves be macros) into a single string, | |||||
avoiding the pitfalls of the ## macro operator. | |||||
*/ | |||||
#define JUCE_JOIN_MACRO(a, b) JUCE_JOIN_MACRO_HELPER (a, b) | |||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_CATCH_UNHANDLED_EXCEPTIONS | #if JUCE_CATCH_UNHANDLED_EXCEPTIONS | ||||
@@ -512,26 +512,28 @@ void ComponentPeer::handleFileDragDrop (const StringArray& files, const Point<in | |||||
class AsyncFileDropMessage : public CallbackMessage | class AsyncFileDropMessage : public CallbackMessage | ||||
{ | { | ||||
public: | public: | ||||
AsyncFileDropMessage (Component* target_, const Point<int>& position_, const StringArray& files_) | |||||
: target (target_), position (position_), files (files_) | |||||
AsyncFileDropMessage (Component* target_, FileDragAndDropTarget* dropTarget_, | |||||
const Point<int>& position_, const StringArray& files_) | |||||
: target (target_), dropTarget (dropTarget_), position (position_), files (files_) | |||||
{ | { | ||||
} | } | ||||
void messageCallback() | void messageCallback() | ||||
{ | { | ||||
if (target != 0) | if (target != 0) | ||||
target->filesDropped (files, position.getX(), position.getY()); | |||||
dropTarget->filesDropped (files, position.getX(), position.getY()); | |||||
} | } | ||||
private: | private: | ||||
Component::SafePointer<Component> target; | Component::SafePointer<Component> target; | ||||
FileDragAndDropTarget* dropTarget; | |||||
Point<int> position; | Point<int> position; | ||||
StringArray files; | StringArray files; | ||||
// (NB: don't make this non-copyable, which messes up in VC) | // (NB: don't make this non-copyable, which messes up in VC) | ||||
}; | }; | ||||
(new AsyncFileDropMessage (targetComp, targetComp->getLocalPoint (component, position), files))->post(); | |||||
(new AsyncFileDropMessage (targetComp, target, targetComp->getLocalPoint (component, position), files))->post(); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -65,10 +65,6 @@ public: | |||||
imageData = imageDataAllocated; | imageData = imageDataAllocated; | ||||
} | } | ||||
~SoftwareSharedImage() | |||||
{ | |||||
} | |||||
Image::ImageType getType() const | Image::ImageType getType() const | ||||
{ | { | ||||
return Image::SoftwareImage; | return Image::SoftwareImage; | ||||
@@ -88,6 +84,8 @@ public: | |||||
private: | private: | ||||
HeapBlock<uint8> imageDataAllocated; | HeapBlock<uint8> imageDataAllocated; | ||||
JUCE_LEAK_DETECTOR (SoftwareSharedImage); | |||||
}; | }; | ||||
Image::SharedImage* Image::SharedImage::createSoftwareImage (Image::PixelFormat format, int width, int height, bool clearImage) | Image::SharedImage* Image::SharedImage::createSoftwareImage (Image::PixelFormat format, int width, int height, bool clearImage) | ||||
@@ -126,6 +126,8 @@ private: | |||||
return format == Image::ARGB ? (kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little) : kCGBitmapByteOrderDefault; | return format == Image::ARGB ? (kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little) : kCGBitmapByteOrderDefault; | ||||
#endif | #endif | ||||
} | } | ||||
JUCE_LEAK_DETECTOR (CoreGraphicsImage); | |||||
}; | }; | ||||
Image::SharedImage* Image::SharedImage::createNativeImage (PixelFormat format, int width, int height, bool clearImage) | Image::SharedImage* Image::SharedImage::createNativeImage (PixelFormat format, int width, int height, bool clearImage) | ||||
@@ -646,10 +648,6 @@ private: | |||||
{ | { | ||||
} | } | ||||
~SavedState() | |||||
{ | |||||
} | |||||
FillType fillType; | FillType fillType; | ||||
Font font; | Font font; | ||||
CGFontRef fontRef; | CGFontRef fontRef; | ||||
@@ -784,7 +782,7 @@ private: | |||||
CGContextConcatCTM (context, t); | CGContextConcatCTM (context, t); | ||||
} | } | ||||
JUCE_DECLARE_NON_COPYABLE (CoreGraphicsContext); | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreGraphicsContext); | |||||
}; | }; | ||||
LowLevelGraphicsContext* CoreGraphicsImage::createLowLevelContext() | LowLevelGraphicsContext* CoreGraphicsImage::createLowLevelContext() | ||||
@@ -1674,28 +1674,29 @@ void juce_setKioskComponent (Component* kioskModeComponent, bool enableOrDisable | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
class AsyncRepaintMessage : public CallbackMessage | |||||
{ | |||||
public: | |||||
NSViewComponentPeer* const peer; | |||||
const Rectangle<int> rect; | |||||
AsyncRepaintMessage (NSViewComponentPeer* const peer_, const Rectangle<int>& rect_) | |||||
: peer (peer_), rect (rect_) | |||||
{ | |||||
} | |||||
void messageCallback() | |||||
{ | |||||
if (ComponentPeer::isValidPeer (peer)) | |||||
peer->repaint (rect); | |||||
} | |||||
}; | |||||
void NSViewComponentPeer::repaint (const Rectangle<int>& area) | void NSViewComponentPeer::repaint (const Rectangle<int>& area) | ||||
{ | { | ||||
if (insideDrawRect) | if (insideDrawRect) | ||||
{ | { | ||||
class AsyncRepaintMessage : public CallbackMessage | |||||
{ | |||||
public: | |||||
AsyncRepaintMessage (NSViewComponentPeer* const peer_, const Rectangle<int>& rect_) | |||||
: peer (peer_), rect (rect_) | |||||
{ | |||||
} | |||||
void messageCallback() | |||||
{ | |||||
if (ComponentPeer::isValidPeer (peer)) | |||||
peer->repaint (rect); | |||||
} | |||||
private: | |||||
NSViewComponentPeer* const peer; | |||||
const Rectangle<int> rect; | |||||
}; | |||||
(new AsyncRepaintMessage (this, area))->post(); | (new AsyncRepaintMessage (this, area))->post(); | ||||
} | } | ||||
else | else | ||||