Browse Source

Workaround for OSX tiled image rendering bug. Mingw atomics fix. Fix for compiling atomics on 10.4. Added a 'new folder' button to the directory chooser on Mac.

tags/2021-05-28
Julian Storer 16 years ago
parent
commit
91eeebda2f
7 changed files with 40 additions and 17 deletions
  1. +8
    -0
      build/macosx/Juce.xcodeproj/project.pbxproj
  2. +13
    -3
      juce_amalgamated.cpp
  3. +6
    -6
      juce_amalgamated.h
  4. +6
    -6
      src/core/juce_Atomic.h
  5. +3
    -1
      src/native/mac/juce_mac_CoreGraphicsContext.mm
  6. +3
    -0
      src/native/mac/juce_mac_FileChooser.mm
  7. +1
    -1
      src/native/windows/juce_win32_Threads.cpp

+ 8
- 0
build/macosx/Juce.xcodeproj/project.pbxproj View File

@@ -21,6 +21,10 @@
8414DE8511122A8D00DAF75A /* juce_DynamicObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8414DE8311122A8D00DAF75A /* juce_DynamicObject.h */; };
843D4A3B10D3C54500624BA6 /* juce_ValueTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843D4A3910D3C54500624BA6 /* juce_ValueTree.cpp */; };
843D4A3C10D3C54500624BA6 /* juce_ValueTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 843D4A3A10D3C54500624BA6 /* juce_ValueTree.h */; };
843E5C6F1113949F006F959F /* juce_NamedValueSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8414DE76111229B300DAF75A /* juce_NamedValueSet.cpp */; };
843E5C701113949F006F959F /* juce_NamedValueSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 8414DE77111229B300DAF75A /* juce_NamedValueSet.h */; };
843E5C71111394A2006F959F /* juce_DynamicObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8414DE8211122A8D00DAF75A /* juce_DynamicObject.cpp */; };
843E5C72111394A3006F959F /* juce_DynamicObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8414DE8311122A8D00DAF75A /* juce_DynamicObject.h */; };
844BB95B10C5578800DF5536 /* juce_TargetPlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 8481730E10832513008FEC33 /* juce_TargetPlatform.h */; };
844BB95C10C5579A00DF5536 /* juce_FillType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F29A9D10C2EFA5005014DF /* juce_FillType.cpp */; };
844BB95D10C5579B00DF5536 /* juce_FillType.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F29A9E10C2EFA5005014DF /* juce_FillType.h */; };
@@ -3244,6 +3248,8 @@
84AF419B10F0008E0035D74F /* juce_ScopedPointer.h in Headers */,
84842F9610F6559400490977 /* juce_Value.h in Headers */,
84CAC0C1110478D50088D64D /* juce_TemporaryFile.h in Headers */,
843E5C701113949F006F959F /* juce_NamedValueSet.h in Headers */,
843E5C72111394A3006F959F /* juce_DynamicObject.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3923,6 +3929,8 @@
84B2053F10D535EC008B4A79 /* juce_ValueTree.cpp in Sources */,
84842F9510F6559300490977 /* juce_Value.cpp in Sources */,
84CAC0C0110478D50088D64D /* juce_TemporaryFile.cpp in Sources */,
843E5C6F1113949F006F959F /* juce_NamedValueSet.cpp in Sources */,
843E5C71111394A2006F959F /* juce_DynamicObject.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};


+ 13
- 3
juce_amalgamated.cpp View File

@@ -212367,7 +212367,7 @@ int SystemStats::getPageSize() throw()
extern HWND juce_messageWindowHandle;
#endif

#if ! (JUCE_USE_INTRINSICS || JUCE_GCC)
#if ! JUCE_USE_INTRINSICS
// In newer compilers, the inline versions of these are used (in juce_Atomic.h), but in
// older ones we have to actually call the ops as win32 functions..
void Atomic::increment (int32& variable) { InterlockedIncrement (reinterpret_cast <volatile long*> (&variable)); }
@@ -240472,7 +240472,9 @@ public:
CGContextDrawTiledImage (context, imageRect, image);
#else
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
if (CGContextDrawTiledImage != 0)
// There's a bug in CGContextDrawTiledImage that makes it incredibly slow
// if it's doing a transformation - it's quicker to just draw lots of images manually
if (CGContextDrawTiledImage != 0 && transform.isOnlyTranslation())
CGContextDrawTiledImage (context, imageRect, image);
else
#endif
@@ -241996,6 +241998,9 @@ void FileChooser::showPlatformDialog (Array<File>& results,

[panel setDelegate: delegate];

if (isSaveDialogue || selectsDirectory)
[panel setCanCreateDirectories: YES];

String directory, filename;

if (currentFileOrDirectory.isDirectory())
@@ -244894,7 +244899,9 @@ public:
CGContextDrawTiledImage (context, imageRect, image);
#else
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
if (CGContextDrawTiledImage != 0)
// There's a bug in CGContextDrawTiledImage that makes it incredibly slow
// if it's doing a transformation - it's quicker to just draw lots of images manually
if (CGContextDrawTiledImage != 0 && transform.isOnlyTranslation())
CGContextDrawTiledImage (context, imageRect, image);
else
#endif
@@ -248196,6 +248203,9 @@ void FileChooser::showPlatformDialog (Array<File>& results,

[panel setDelegate: delegate];

if (isSaveDialogue || selectsDirectory)
[panel setCanCreateDirectories: YES];

String directory, filename;

if (currentFileOrDirectory.isDirectory())


+ 6
- 6
juce_amalgamated.h View File

@@ -3100,14 +3100,14 @@ public:

#if (JUCE_MAC || JUCE_IPHONE) // Mac and iPhone...

inline void Atomic::increment (int32& variable) { OSAtomicIncrement32 ((volatile int32_t*) &variable); }
inline int32 Atomic::incrementAndReturn (int32& variable) { return OSAtomicIncrement32 ((volatile int32_t*) &variable); }
inline void Atomic::decrement (int32& variable) { OSAtomicDecrement32 ((volatile int32_t*) &variable); }
inline int32 Atomic::decrementAndReturn (int32& variable) { return OSAtomicDecrement32 ((volatile int32_t*) &variable); }
inline void Atomic::increment (int32& variable) { OSAtomicIncrement32 ((int32_t*) &variable); }
inline int32 Atomic::incrementAndReturn (int32& variable) { return OSAtomicIncrement32 ((int32_t*) &variable); }
inline void Atomic::decrement (int32& variable) { OSAtomicDecrement32 ((int32_t*) &variable); }
inline int32 Atomic::decrementAndReturn (int32& variable) { return OSAtomicDecrement32 ((int32_t*) &variable); }
inline int32 Atomic::compareAndExchange (int32& destination, int32 newValue, int32 oldValue)
{ return OSAtomicCompareAndSwap32Barrier (oldValue, newValue, (volatile int32_t*) &destination); }
{ return OSAtomicCompareAndSwap32Barrier (oldValue, newValue, (int32_t*) &destination); }

#elif JUCE_GCC // Linux...
#elif JUCE_LINUX // Linux...

inline void Atomic::increment (int32& variable) { __sync_add_and_fetch (&variable, 1); }
inline int32 Atomic::incrementAndReturn (int32& variable) { return __sync_add_and_fetch (&variable, 1); }


+ 6
- 6
src/core/juce_Atomic.h View File

@@ -56,14 +56,14 @@ public:
//==============================================================================
#if (JUCE_MAC || JUCE_IPHONE) // Mac and iPhone...
inline void Atomic::increment (int32& variable) { OSAtomicIncrement32 ((volatile int32_t*) &variable); }
inline int32 Atomic::incrementAndReturn (int32& variable) { return OSAtomicIncrement32 ((volatile int32_t*) &variable); }
inline void Atomic::decrement (int32& variable) { OSAtomicDecrement32 ((volatile int32_t*) &variable); }
inline int32 Atomic::decrementAndReturn (int32& variable) { return OSAtomicDecrement32 ((volatile int32_t*) &variable); }
inline void Atomic::increment (int32& variable) { OSAtomicIncrement32 ((int32_t*) &variable); }
inline int32 Atomic::incrementAndReturn (int32& variable) { return OSAtomicIncrement32 ((int32_t*) &variable); }
inline void Atomic::decrement (int32& variable) { OSAtomicDecrement32 ((int32_t*) &variable); }
inline int32 Atomic::decrementAndReturn (int32& variable) { return OSAtomicDecrement32 ((int32_t*) &variable); }
inline int32 Atomic::compareAndExchange (int32& destination, int32 newValue, int32 oldValue)
{ return OSAtomicCompareAndSwap32Barrier (oldValue, newValue, (volatile int32_t*) &destination); }
{ return OSAtomicCompareAndSwap32Barrier (oldValue, newValue, (int32_t*) &destination); }
#elif JUCE_GCC // Linux...
#elif JUCE_LINUX // Linux...
//==============================================================================
inline void Atomic::increment (int32& variable) { __sync_add_and_fetch (&variable, 1); }


+ 3
- 1
src/native/mac/juce_mac_CoreGraphicsContext.mm View File

@@ -402,7 +402,9 @@ public:
CGContextDrawTiledImage (context, imageRect, image);
#else
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
if (CGContextDrawTiledImage != 0)
// There's a bug in CGContextDrawTiledImage that makes it incredibly slow
// if it's doing a transformation - it's quicker to just draw lots of images manually
if (CGContextDrawTiledImage != 0 && transform.isOnlyTranslation())
CGContextDrawTiledImage (context, imageRect, image);
else
#endif


+ 3
- 0
src/native/mac/juce_mac_FileChooser.mm View File

@@ -115,6 +115,9 @@ void FileChooser::showPlatformDialog (Array<File>& results,
[panel setDelegate: delegate];
if (isSaveDialogue || selectsDirectory)
[panel setCanCreateDirectories: YES];
String directory, filename;
if (currentFileOrDirectory.isDirectory())


+ 1
- 1
src/native/windows/juce_win32_Threads.cpp View File

@@ -32,7 +32,7 @@
#endif
//==============================================================================
#if ! (JUCE_USE_INTRINSICS || JUCE_GCC)
#if ! JUCE_USE_INTRINSICS
// In newer compilers, the inline versions of these are used (in juce_Atomic.h), but in
// older ones we have to actually call the ops as win32 functions..
void Atomic::increment (int32& variable) { InterlockedIncrement (reinterpret_cast <volatile long*> (&variable)); }


Loading…
Cancel
Save