diff --git a/juce_amalgamated.cpp b/juce_amalgamated.cpp index 9617bfa2c6..358c122a33 100644 --- a/juce_amalgamated.cpp +++ b/juce_amalgamated.cpp @@ -506,8 +506,16 @@ #define WIN32_LEAN_AND_MEAN 1 #if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable : 4100 4201 4514 4312 4995) + #ifndef _CPPRTTI + #error "You're compiling without RTTI enabled! This is needed for a lot of JUCE classes, please update your compiler settings!" + #endif + + #ifndef _CPPUNWIND + #error "You're compiling without exceptions enabled! This is needed for a lot of JUCE classes, please update your compiler settings!" + #endif + + #pragma warning (push) + #pragma warning (disable : 4100 4201 4514 4312 4995) #endif #define _WIN32_WINNT 0x0500 @@ -33480,14 +33488,7 @@ public: events.realloc (size, 1); for (int i = numEventsAllocated; i < numEventsNeeded; ++i) - { - VstMidiEvent* const e = (VstMidiEvent*) juce_calloc (jmax ((int) sizeof (VstMidiEvent), - (int) sizeof (VstMidiSysexEvent))); - e->type = kVstMidiType; - e->byteSize = sizeof (VstMidiEvent); - - events->events[i] = (VstEvent*) e; - } + events->events[i] = allocateVSTEvent(); numEventsAllocated = numEventsNeeded; } @@ -33498,14 +33499,7 @@ public: if (events != nullptr) { for (int i = numEventsAllocated; --i >= 0;) - { - VstMidiEvent* const e = (VstMidiEvent*) (events->events[i]); - - if (e->type == kVstSysExType) - delete[] (((VstMidiSysexEvent*) e)->sysexDump); - - juce_free (e); - } + freeVSTEvent (events->events[i]); events.free(); numEventsUsed = 0; @@ -33517,6 +33511,23 @@ public: private: int numEventsUsed, numEventsAllocated; + + static VstEvent* allocateVSTEvent() + { + VstEvent* const e = (VstEvent*) ::calloc (1, sizeof (VstMidiEvent) > sizeof (VstMidiSysexEvent) ? sizeof (VstMidiEvent) + : sizeof (VstMidiSysexEvent)); + e->type = kVstMidiType; + e->byteSize = sizeof (VstMidiEvent); + return e; + } + + static void freeVSTEvent (VstEvent* e) + { + if (e->type == kVstSysExType) + delete[] (((VstMidiSysexEvent*) e)->sysexDump); + + ::free (e); + } }; #endif // __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ @@ -246256,23 +246267,6 @@ void MessageManager::broadcastMessage (const String& value) void MessageManager::doPlatformSpecificInitialisation() { - #if JUCE_DEBUG - try // This section is just a safety-net for catching builds without RTTI enabled.. - { - MemoryOutputStream mo; - OutputStream* o = &mo; - - // Got an exception here? Then TURN ON RTTI in your compiler settings!! - o = dynamic_cast (o); - jassert (o != nullptr); - } - catch (...) - { - // Ended up here? If so, TURN ON RTTI in your compiler settings!! - jassertfalse; - } - #endif - OleInitialize (0); // this name has to be different for each app/dll instance because otherwise @@ -263674,10 +263668,10 @@ namespace Visuals if (desiredDepth == 32) { -#if JUCE_USE_XSHM + #if JUCE_USE_XSHM if (XSHMHelpers::isShmAvailable()) { -#if JUCE_USE_XRENDER + #if JUCE_USE_XRENDER if (XRender::isAvailable()) { XRenderPictFormat* pictFormat = XRender::findPictureFormat(); @@ -263713,7 +263707,7 @@ namespace Visuals } } } -#endif + #endif if (visual == 0) { visual = findVisualWithDepth (32); @@ -263721,7 +263715,7 @@ namespace Visuals matchedDepth = 32; } } -#endif + #endif } if (visual == 0 && desiredDepth >= 24) @@ -263759,7 +263753,7 @@ public: ScopedXLock xlock; -#if JUCE_USE_XSHM + #if JUCE_USE_XSHM usingXShm = false; if ((imageDepth > 16) && XSHMHelpers::isShmAvailable()) @@ -263804,12 +263798,12 @@ public: } if (! usingXShm) -#endif + #endif { imageDataAllocated.allocate (lineStride * h, format_ == Image::ARGB && clearImage); imageData = imageDataAllocated; - xImage = (XImage*) juce_calloc (sizeof (XImage)); + xImage = (XImage*) ::calloc (1, sizeof (XImage)); xImage->width = w; xImage->height = h; @@ -263855,7 +263849,7 @@ public: if (gc != None) XFreeGC (display, gc); -#if JUCE_USE_XSHM + #if JUCE_USE_XSHM if (usingXShm) { XShmDetach (display, &segmentInfo); @@ -263867,7 +263861,7 @@ public: shmctl (segmentInfo.shmid, IPC_RMID, 0); } else -#endif + #endif { xImage->data = nullptr; XDestroyImage (xImage); @@ -264387,9 +264381,9 @@ public: void toBehind (ComponentPeer* other) { LinuxComponentPeer* const otherPeer = dynamic_cast (other); - jassert (otherPeer != 0); // wrong type of window? + jassert (otherPeer != nullptr); // wrong type of window? - if (otherPeer != 0) + if (otherPeer != nullptr) { setMinimised (false); @@ -265025,7 +265019,7 @@ private: : peer (peer_), lastTimeImageUsed (0) { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM shmCompletedDrawing = true; useARGBImagesForRendering = XSHMHelpers::isShmAvailable(); @@ -265042,15 +265036,15 @@ private: useARGBImagesForRendering = (testImage->bits_per_pixel == 32); XDestroyImage (testImage); } - #endif + #endif } void timerCallback() { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM if (! shmCompletedDrawing) return; - #endif + #endif if (! regionsNeedingRepaint.isEmpty()) { stopTimer(); @@ -265073,13 +265067,13 @@ private: void performAnyPendingRepaintsNow() { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM if (! shmCompletedDrawing) { startTimer (repaintTimerPeriod); return; } - #endif + #endif peer->clearMaskedRegion(); @@ -265092,12 +265086,12 @@ private: if (image.isNull() || image.getWidth() < totalArea.getWidth() || image.getHeight() < totalArea.getHeight()) { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM image = Image (new XBitmapImage (useARGBImagesForRendering ? Image::ARGB : Image::RGB, - #else + #else image = Image (new XBitmapImage (Image::RGB, - #endif + #endif (totalArea.getWidth() + 31) & ~31, (totalArea.getHeight() + 31) & ~31, false, peer->depth, peer->visual)); @@ -265124,9 +265118,9 @@ private: for (RectangleList::Iterator i (originalRepaintRegion); i.next();) { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM shmCompletedDrawing = false; - #endif + #endif const Rectangle& r = *i.getRectangle(); static_cast (image.getSharedImage()) @@ -265140,9 +265134,9 @@ private: startTimer (repaintTimerPeriod); } - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM void notifyPaintCompleted() { shmCompletedDrawing = true; } - #endif + #endif private: enum { repaintTimerPeriod = 1000 / 100 }; @@ -265152,9 +265146,9 @@ private: uint32 lastTimeImageUsed; RectangleList regionsNeedingRepaint; - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM bool useARGBImagesForRendering, shmCompletedDrawing; - #endif + #endif JUCE_DECLARE_NON_COPYABLE (LinuxRepaintManager); }; @@ -265193,9 +265187,9 @@ private: { int keyMods = 0; - if (status & ShiftMask) keyMods |= ModifierKeys::shiftModifier; - if (status & ControlMask) keyMods |= ModifierKeys::ctrlModifier; - if (status & Keys::AltMask) keyMods |= ModifierKeys::altModifier; + if ((status & ShiftMask) != 0) keyMods |= ModifierKeys::shiftModifier; + if ((status & ControlMask) != 0) keyMods |= ModifierKeys::ctrlModifier; + if ((status & Keys::AltMask) != 0) keyMods |= ModifierKeys::altModifier; currentModifiers = currentModifiers.withOnlyMouseButtons().withFlags (keyMods); diff --git a/juce_amalgamated.h b/juce_amalgamated.h index 26e656aa5d..709e2d8177 100644 --- a/juce_amalgamated.h +++ b/juce_amalgamated.h @@ -73,7 +73,7 @@ namespace JuceDummyNamespace {} */ #define JUCE_MAJOR_VERSION 1 #define JUCE_MINOR_VERSION 53 -#define JUCE_BUILDNUMBER 86 +#define JUCE_BUILDNUMBER 87 /** Current Juce version number. @@ -46201,14 +46201,7 @@ public: events.realloc (size, 1); for (int i = numEventsAllocated; i < numEventsNeeded; ++i) - { - VstMidiEvent* const e = (VstMidiEvent*) juce_calloc (jmax ((int) sizeof (VstMidiEvent), - (int) sizeof (VstMidiSysexEvent))); - e->type = kVstMidiType; - e->byteSize = sizeof (VstMidiEvent); - - events->events[i] = (VstEvent*) e; - } + events->events[i] = allocateVSTEvent(); numEventsAllocated = numEventsNeeded; } @@ -46219,14 +46212,7 @@ public: if (events != nullptr) { for (int i = numEventsAllocated; --i >= 0;) - { - VstMidiEvent* const e = (VstMidiEvent*) (events->events[i]); - - if (e->type == kVstSysExType) - delete[] (((VstMidiSysexEvent*) e)->sysexDump); - - juce_free (e); - } + freeVSTEvent (events->events[i]); events.free(); numEventsUsed = 0; @@ -46238,6 +46224,23 @@ public: private: int numEventsUsed, numEventsAllocated; + + static VstEvent* allocateVSTEvent() + { + VstEvent* const e = (VstEvent*) ::calloc (1, sizeof (VstMidiEvent) > sizeof (VstMidiSysexEvent) ? sizeof (VstMidiEvent) + : sizeof (VstMidiSysexEvent)); + e->type = kVstMidiType; + e->byteSize = sizeof (VstMidiEvent); + return e; + } + + static void freeVSTEvent (VstEvent* e) + { + if (e->type == kVstSysExType) + delete[] (((VstMidiSysexEvent*) e)->sysexDump); + + ::free (e); + } }; #endif // __JUCE_VSTMIDIEVENTLIST_JUCEHEADER__ diff --git a/src/audio/plugin_host/formats/juce_VSTMidiEventList.h b/src/audio/plugin_host/formats/juce_VSTMidiEventList.h index 23265c1396..ef09a4b301 100644 --- a/src/audio/plugin_host/formats/juce_VSTMidiEventList.h +++ b/src/audio/plugin_host/formats/juce_VSTMidiEventList.h @@ -142,14 +142,7 @@ public: events.realloc (size, 1); for (int i = numEventsAllocated; i < numEventsNeeded; ++i) - { - VstMidiEvent* const e = (VstMidiEvent*) juce_calloc (jmax ((int) sizeof (VstMidiEvent), - (int) sizeof (VstMidiSysexEvent))); - e->type = kVstMidiType; - e->byteSize = sizeof (VstMidiEvent); - - events->events[i] = (VstEvent*) e; - } + events->events[i] = allocateVSTEvent(); numEventsAllocated = numEventsNeeded; } @@ -160,14 +153,7 @@ public: if (events != nullptr) { for (int i = numEventsAllocated; --i >= 0;) - { - VstMidiEvent* const e = (VstMidiEvent*) (events->events[i]); - - if (e->type == kVstSysExType) - delete[] (((VstMidiSysexEvent*) e)->sysexDump); - - juce_free (e); - } + freeVSTEvent (events->events[i]); events.free(); numEventsUsed = 0; @@ -180,6 +166,23 @@ public: private: int numEventsUsed, numEventsAllocated; + + static VstEvent* allocateVSTEvent() + { + VstEvent* const e = (VstEvent*) ::calloc (1, sizeof (VstMidiEvent) > sizeof (VstMidiSysexEvent) ? sizeof (VstMidiEvent) + : sizeof (VstMidiSysexEvent)); + e->type = kVstMidiType; + e->byteSize = sizeof (VstMidiEvent); + return e; + } + + static void freeVSTEvent (VstEvent* e) + { + if (e->type == kVstSysExType) + delete[] (((VstMidiSysexEvent*) e)->sysexDump); + + ::free (e); + } }; diff --git a/src/core/juce_StandardHeader.h b/src/core/juce_StandardHeader.h index ad8e76a9d3..00d8c83329 100644 --- a/src/core/juce_StandardHeader.h +++ b/src/core/juce_StandardHeader.h @@ -33,7 +33,7 @@ */ #define JUCE_MAJOR_VERSION 1 #define JUCE_MINOR_VERSION 53 -#define JUCE_BUILDNUMBER 86 +#define JUCE_BUILDNUMBER 87 /** Current Juce version number. diff --git a/src/native/linux/juce_linux_Windowing.cpp b/src/native/linux/juce_linux_Windowing.cpp index 5dc978ae61..6797470959 100644 --- a/src/native/linux/juce_linux_Windowing.cpp +++ b/src/native/linux/juce_linux_Windowing.cpp @@ -373,10 +373,10 @@ namespace Visuals if (desiredDepth == 32) { -#if JUCE_USE_XSHM + #if JUCE_USE_XSHM if (XSHMHelpers::isShmAvailable()) { -#if JUCE_USE_XRENDER + #if JUCE_USE_XRENDER if (XRender::isAvailable()) { XRenderPictFormat* pictFormat = XRender::findPictureFormat(); @@ -412,7 +412,7 @@ namespace Visuals } } } -#endif + #endif if (visual == 0) { visual = findVisualWithDepth (32); @@ -420,7 +420,7 @@ namespace Visuals matchedDepth = 32; } } -#endif + #endif } if (visual == 0 && desiredDepth >= 24) @@ -459,7 +459,7 @@ public: ScopedXLock xlock; -#if JUCE_USE_XSHM + #if JUCE_USE_XSHM usingXShm = false; if ((imageDepth > 16) && XSHMHelpers::isShmAvailable()) @@ -504,12 +504,12 @@ public: } if (! usingXShm) -#endif + #endif { imageDataAllocated.allocate (lineStride * h, format_ == Image::ARGB && clearImage); imageData = imageDataAllocated; - xImage = (XImage*) juce_calloc (sizeof (XImage)); + xImage = (XImage*) ::calloc (1, sizeof (XImage)); xImage->width = w; xImage->height = h; @@ -555,7 +555,7 @@ public: if (gc != None) XFreeGC (display, gc); -#if JUCE_USE_XSHM + #if JUCE_USE_XSHM if (usingXShm) { XShmDetach (display, &segmentInfo); @@ -567,7 +567,7 @@ public: shmctl (segmentInfo.shmid, IPC_RMID, 0); } else -#endif + #endif { xImage->data = nullptr; XDestroyImage (xImage); @@ -1091,9 +1091,9 @@ public: void toBehind (ComponentPeer* other) { LinuxComponentPeer* const otherPeer = dynamic_cast (other); - jassert (otherPeer != 0); // wrong type of window? + jassert (otherPeer != nullptr); // wrong type of window? - if (otherPeer != 0) + if (otherPeer != nullptr) { setMinimised (false); @@ -1733,7 +1733,7 @@ private: : peer (peer_), lastTimeImageUsed (0) { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM shmCompletedDrawing = true; useARGBImagesForRendering = XSHMHelpers::isShmAvailable(); @@ -1750,15 +1750,15 @@ private: useARGBImagesForRendering = (testImage->bits_per_pixel == 32); XDestroyImage (testImage); } - #endif + #endif } void timerCallback() { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM if (! shmCompletedDrawing) return; - #endif + #endif if (! regionsNeedingRepaint.isEmpty()) { stopTimer(); @@ -1781,13 +1781,13 @@ private: void performAnyPendingRepaintsNow() { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM if (! shmCompletedDrawing) { startTimer (repaintTimerPeriod); return; } - #endif + #endif peer->clearMaskedRegion(); @@ -1800,12 +1800,12 @@ private: if (image.isNull() || image.getWidth() < totalArea.getWidth() || image.getHeight() < totalArea.getHeight()) { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM image = Image (new XBitmapImage (useARGBImagesForRendering ? Image::ARGB : Image::RGB, - #else + #else image = Image (new XBitmapImage (Image::RGB, - #endif + #endif (totalArea.getWidth() + 31) & ~31, (totalArea.getHeight() + 31) & ~31, false, peer->depth, peer->visual)); @@ -1832,9 +1832,9 @@ private: for (RectangleList::Iterator i (originalRepaintRegion); i.next();) { - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM shmCompletedDrawing = false; - #endif + #endif const Rectangle& r = *i.getRectangle(); static_cast (image.getSharedImage()) @@ -1848,9 +1848,9 @@ private: startTimer (repaintTimerPeriod); } - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM void notifyPaintCompleted() { shmCompletedDrawing = true; } - #endif + #endif private: enum { repaintTimerPeriod = 1000 / 100 }; @@ -1860,9 +1860,9 @@ private: uint32 lastTimeImageUsed; RectangleList regionsNeedingRepaint; - #if JUCE_USE_XSHM + #if JUCE_USE_XSHM bool useARGBImagesForRendering, shmCompletedDrawing; - #endif + #endif JUCE_DECLARE_NON_COPYABLE (LinuxRepaintManager); }; @@ -1901,9 +1901,9 @@ private: { int keyMods = 0; - if (status & ShiftMask) keyMods |= ModifierKeys::shiftModifier; - if (status & ControlMask) keyMods |= ModifierKeys::ctrlModifier; - if (status & Keys::AltMask) keyMods |= ModifierKeys::altModifier; + if ((status & ShiftMask) != 0) keyMods |= ModifierKeys::shiftModifier; + if ((status & ControlMask) != 0) keyMods |= ModifierKeys::ctrlModifier; + if ((status & Keys::AltMask) != 0) keyMods |= ModifierKeys::altModifier; currentModifiers = currentModifiers.withOnlyMouseButtons().withFlags (keyMods); diff --git a/src/native/windows/juce_win32_Messaging.cpp b/src/native/windows/juce_win32_Messaging.cpp index e843409aa5..dd228df2db 100644 --- a/src/native/windows/juce_win32_Messaging.cpp +++ b/src/native/windows/juce_win32_Messaging.cpp @@ -257,23 +257,6 @@ void MessageManager::broadcastMessage (const String& value) //============================================================================== void MessageManager::doPlatformSpecificInitialisation() { - #if JUCE_DEBUG - try // This section is just a safety-net for catching builds without RTTI enabled.. - { - MemoryOutputStream mo; - OutputStream* o = &mo; - - // Got an exception here? Then TURN ON RTTI in your compiler settings!! - o = dynamic_cast (o); - jassert (o != nullptr); - } - catch (...) - { - // Ended up here? If so, TURN ON RTTI in your compiler settings!! - jassertfalse; - } - #endif - OleInitialize (0); // this name has to be different for each app/dll instance because otherwise diff --git a/src/native/windows/juce_win32_NativeIncludes.h b/src/native/windows/juce_win32_NativeIncludes.h index 4e27833089..520c4823f7 100644 --- a/src/native/windows/juce_win32_NativeIncludes.h +++ b/src/native/windows/juce_win32_NativeIncludes.h @@ -39,8 +39,16 @@ #define WIN32_LEAN_AND_MEAN 1 #if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable : 4100 4201 4514 4312 4995) + #ifndef _CPPRTTI + #error "You're compiling without RTTI enabled! This is needed for a lot of JUCE classes, please update your compiler settings!" + #endif + + #ifndef _CPPUNWIND + #error "You're compiling without exceptions enabled! This is needed for a lot of JUCE classes, please update your compiler settings!" + #endif + + #pragma warning (push) + #pragma warning (disable : 4100 4201 4514 4312 4995) #endif #define _WIN32_WINNT 0x0500