Browse Source

Tweaks to VST for building on linux; improved linux code for detecting the executable's file path; small changes to linux window hinting; change on the Mac to fix app shutdown when the app isn't currently active; added Mac support for 3rd mouse button; fix to AudioDeviceManager thread safety when changing midi output devices; fix to DrawableButton text; made ComponentAnimator a change broadcaster to send messages when animations stop and start; small fix to DatagramSocket.

tags/2021-05-28
jules 16 years ago
parent
commit
749c2be6cb
30 changed files with 2360 additions and 2232 deletions
  1. +10
    -0
      build/linux/platform_specific_code/juce_linux_Files.cpp
  2. +5
    -7
      build/linux/platform_specific_code/juce_linux_Windowing.cpp
  3. +463
    -462
      build/macosx/platform_specific_code/juce_mac_MessageManager.mm
  4. +18
    -0
      build/macosx/platform_specific_code/juce_mac_NSViewComponentPeer.mm
  5. +1
    -1
      build/win32/platform_specific_code/juce_win32_FileChooser.cpp
  6. +3
    -8
      build/win32/platform_specific_code/juce_win32_Files.cpp
  7. +42
    -0
      build/win32/platform_specific_code/juce_win32_NativeIncludes.h
  8. +0
    -69
      build/win32/platform_specific_code/win32_headers.h
  9. +0
    -4
      build/win32/vc8/JUCE.vcproj
  10. +1547
    -1531
      extras/audio plugins/wrapper/VST/juce_VST_Wrapper.cpp
  11. +4
    -0
      extras/example projects/example_project_for_Mac/juce_application.xcodeproj/project.pbxproj
  12. +1
    -8
      extras/juce demo/build/win32_vc8/jucedemo.vcproj
  13. +157
    -72
      juce_amalgamated.cpp
  14. +15
    -7
      juce_amalgamated.h
  15. +2
    -2
      src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.cpp
  16. +17
    -4
      src/juce_appframework/audio/devices/juce_AudioDeviceManager.cpp
  17. +1
    -1
      src/juce_appframework/gui/components/buttons/juce_DrawableButton.cpp
  18. +2
    -2
      src/juce_appframework/gui/components/buttons/juce_ImageButton.cpp
  19. +2
    -2
      src/juce_appframework/gui/components/buttons/juce_ToolbarButton.cpp
  20. +2
    -2
      src/juce_appframework/gui/components/controls/juce_TableListBox.cpp
  21. +2
    -1
      src/juce_appframework/gui/components/juce_Component.cpp
  22. +9
    -0
      src/juce_appframework/gui/components/layout/juce_ComponentAnimator.cpp
  23. +9
    -1
      src/juce_appframework/gui/components/layout/juce_ComponentAnimator.h
  24. +4
    -4
      src/juce_appframework/gui/components/layout/juce_MultiDocumentPanel.cpp
  25. +2
    -2
      src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp
  26. +35
    -35
      src/juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.cpp
  27. +2
    -2
      src/juce_core/containers/juce_Array.h
  28. +2
    -2
      src/juce_core/containers/juce_OwnedArray.h
  29. +2
    -2
      src/juce_core/containers/juce_SortedSet.h
  30. +1
    -1
      src/juce_core/io/network/juce_Socket.cpp

+ 10
- 0
build/linux/platform_specific_code/juce_linux_Files.cpp View File

@@ -42,6 +42,7 @@
#include <utime.h>
#include <pwd.h>
#include <fcntl.h>
#include <dlfcn.h>
#define U_ISOFS_SUPER_MAGIC (short) 0x9660 // linux/iso_fs.h
#define U_MSDOS_SUPER_MAGIC (short) 0x4d44 // linux/msdos_fs.h
@@ -261,6 +262,15 @@ const File File::getSpecialLocation (const SpecialLocationType type)
case currentExecutableFile:
case currentApplicationFile:
if (! executableFile.exists())
{
Dl_info executableInfo;
dladdr ((const void*) juce_getFileTimes, &executableInfo);
if (executableInfo.dli_fname != 0)
executableFile = File (String (executableInfo.dli_fname));
}
// if this fails, it's probably because juce_setCurrentExecutableFileName()
// was never called to set the filename - this should be done by the juce
// main() function, so maybe you've hacked it to use your own custom main()?


+ 5
- 7
build/linux/platform_specific_code/juce_linux_Windowing.cpp View File

@@ -660,8 +660,6 @@ public:
int ls, ps;
const uint8* const pixels = lockPixelDataReadOnly (0, 0, getWidth(), getHeight(), ls, ps);
jassert (! isARGB())
for (int y = sy; y < sy + dh; ++y)
{
const uint8* p = pixels + y * ls + sx * ps;
@@ -1961,16 +1959,16 @@ private:
{
int netHints [2];
int numHints = 0;
netHints[numHints] = XInternAtom (display, "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", True);
if (netHints [numHints] != 0)
++numHints;
if ((styleFlags & windowIsTemporary) != 0)
netHints [numHints] = XInternAtom (display, "_NET_WM_WINDOW_TYPE_MENU", True);
else
netHints [numHints] = XInternAtom (display, "_NET_WM_WINDOW_TYPE_NORMAL", True);
if (netHints [numHints] != 0)
++numHints;
netHints[numHints] = XInternAtom (display, "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", True);
if (netHints [numHints] != 0)
++numHints;


+ 463
- 462
build/macosx/platform_specific_code/juce_mac_MessageManager.mm View File

@@ -1,462 +1,463 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
// (This file gets included by juce_mac_NativeCode.mm, rather than being
// compiled on its own).
#ifdef JUCE_INCLUDED_FILE
struct CallbackMessagePayload
{
MessageCallbackFunction* function;
void* parameter;
void* volatile result;
bool volatile hasBeenExecuted;
};
/* When you use multiple DLLs which share similarly-named obj-c classes - like
for example having more than one juce plugin loaded into a host, then when a
method is called, the actual code that runs might actually be in a different module
than the one you expect... So any calls to library functions or statics that are
made inside obj-c methods will probably end up getting executed in a different DLL's
memory space. Not a great thing to happen - this obviously leads to bizarre crashes.
To work around this insanity, I'm only allowing obj-c methods to make calls to
virtual methods of an object that's known to live inside the right module's space.
*/
class AppDelegateRedirector
{
public:
AppDelegateRedirector() {}
virtual ~AppDelegateRedirector() {}
virtual NSApplicationTerminateReply shouldTerminate()
{
if (JUCEApplication::getInstance() != 0)
{
JUCEApplication::getInstance()->systemRequestedQuit();
return NSTerminateCancel;
}
return NSTerminateNow;
}
virtual BOOL openFile (const NSString* filename)
{
if (JUCEApplication::getInstance() != 0)
{
JUCEApplication::getInstance()->anotherInstanceStarted (nsStringToJuce (filename));
return YES;
}
return NO;
}
virtual void openFiles (NSArray* filenames)
{
StringArray files;
for (unsigned int i = 0; i < [filenames count]; ++i)
files.add (nsStringToJuce ((NSString*) [filenames objectAtIndex: i]));
if (files.size() > 0 && JUCEApplication::getInstance() != 0)
{
JUCEApplication::getInstance()->anotherInstanceStarted (files.joinIntoString (T(" ")));
}
}
virtual void focusChanged()
{
juce_HandleProcessFocusChange();
}
virtual void deliverMessage (void* message)
{
// no need for an mm lock here - deliverMessage locks it
MessageManager::getInstance()->deliverMessage (message);
}
virtual void performCallback (CallbackMessagePayload* pl)
{
pl->result = (*pl->function) (pl->parameter);
pl->hasBeenExecuted = true;
}
virtual void deleteSelf()
{
delete this;
}
};
END_JUCE_NAMESPACE
using namespace JUCE_NAMESPACE;
#define JuceAppDelegate MakeObjCClassName(JuceAppDelegate)
static int numPendingMessages = 0;
static bool flushingMessages = false;
@interface JuceAppDelegate : NSObject
{
@private
id oldDelegate;
AppDelegateRedirector* redirector;
}
- (JuceAppDelegate*) init;
- (void) dealloc;
- (BOOL) application: (NSApplication*) theApplication openFile: (NSString*) filename;
- (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames;
- (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app;
- (void) applicationDidBecomeActive: (NSNotification*) aNotification;
- (void) applicationDidResignActive: (NSNotification*) aNotification;
- (void) applicationWillUnhide: (NSNotification*) aNotification;
- (void) customEvent: (id) data;
- (void) performCallback: (id) info;
- (void) dummyMethod;
@end
@implementation JuceAppDelegate
- (JuceAppDelegate*) init
{
[super init];
redirector = new AppDelegateRedirector();
numPendingMessages = 0;
flushingMessages = false;
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
if (JUCEApplication::getInstance() != 0)
{
oldDelegate = [NSApp delegate];
[NSApp setDelegate: self];
}
else
{
oldDelegate = 0;
[center addObserver: self selector: @selector (applicationDidResignActive:)
name: NSApplicationDidResignActiveNotification object: NSApp];
[center addObserver: self selector: @selector (applicationDidBecomeActive:)
name: NSApplicationDidBecomeActiveNotification object: NSApp];
[center addObserver: self selector: @selector (applicationWillUnhide:)
name: NSApplicationWillUnhideNotification object: NSApp];
}
return self;
}
- (void) dealloc
{
if (oldDelegate != 0)
[NSApp setDelegate: oldDelegate];
redirector->deleteSelf();
[super dealloc];
}
- (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app
{
return redirector->shouldTerminate();
}
- (BOOL) application: (NSApplication*) app openFile: (NSString*) filename
{
return redirector->openFile (filename);
}
- (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames
{
return redirector->openFiles (filenames);
}
- (void) applicationDidBecomeActive: (NSNotification*) aNotification
{
redirector->focusChanged();
}
- (void) applicationDidResignActive: (NSNotification*) aNotification
{
redirector->focusChanged();
}
- (void) applicationWillUnhide: (NSNotification*) aNotification
{
redirector->focusChanged();
}
- (void) customEvent: (id) n
{
atomicDecrement (numPendingMessages);
NSData* data = (NSData*) n;
void* message = 0;
[data getBytes: &message length: sizeof (message)];
if (message != 0 && ! flushingMessages)
redirector->deliverMessage (message);
[data release];
}
- (void) performCallback: (id) info
{
if ([info isKindOfClass: [NSData class]])
{
CallbackMessagePayload* pl = (CallbackMessagePayload*) [((NSData*) info) bytes];
if (pl != 0)
redirector->performCallback (pl);
}
else
{
jassertfalse // should never get here!
}
}
- (void) dummyMethod {} // (used as a way of running a dummy thread)
@end
BEGIN_JUCE_NAMESPACE
static JuceAppDelegate* juceAppDelegate = 0;
void MessageManager::runDispatchLoop()
{
if (! quitMessagePosted) // check that the quit message wasn't already posted..
{
const ScopedAutoReleasePool pool;
// must only be called by the message thread!
jassert (isThisTheMessageThread());
[NSApp run];
}
}
void MessageManager::stopDispatchLoop()
{
quitMessagePosted = true;
[NSApp stop: nil];
}
static bool isEventBlockedByModalComps (NSEvent* e)
{
if (Component::getNumCurrentlyModalComponents() == 0)
return false;
NSWindow* const w = [e window];
if (w == 0 || [w worksWhenModal])
return false;
bool isKey = false, isInputAttempt = false;
switch ([e type])
{
case NSKeyDown:
case NSKeyUp:
isKey = isInputAttempt = true;
break;
case NSLeftMouseDown:
case NSRightMouseDown:
case NSOtherMouseDown:
isInputAttempt = true;
break;
case NSLeftMouseDragged:
case NSRightMouseDragged:
case NSLeftMouseUp:
case NSRightMouseUp:
case NSOtherMouseUp:
case NSOtherMouseDragged:
if (Component::getComponentUnderMouse() != 0)
return false;
break;
case NSMouseMoved:
case NSMouseEntered:
case NSMouseExited:
case NSCursorUpdate:
case NSScrollWheel:
case NSTabletPoint:
case NSTabletProximity:
break;
default:
return false;
}
for (int i = ComponentPeer::getNumPeers(); --i >= 0;)
{
ComponentPeer* const peer = ComponentPeer::getPeer (i);
NSView* const compView = (NSView*) peer->getNativeHandle();
if ([compView window] == w)
{
if (isKey)
{
if (compView == [w firstResponder])
return false;
}
else
{
if (NSPointInRect ([compView convertPoint: [e locationInWindow] fromView: nil],
[compView bounds]))
return false;
}
}
}
if (isInputAttempt)
{
if (! [NSApp isActive])
[NSApp activateIgnoringOtherApps: YES];
Component* const modal = Component::getCurrentlyModalComponent (0);
if (modal != 0)
modal->inputAttemptWhenModal();
}
return true;
}
bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor)
{
const ScopedAutoReleasePool pool;
jassert (isThisTheMessageThread()); // must only be called by the message thread
uint32 endTime = Time::getMillisecondCounter() + millisecondsToRunFor;
NSDate* endDate = [NSDate dateWithTimeIntervalSinceNow: millisecondsToRunFor * 0.001];
while (Time::getMillisecondCounter() < endTime && ! quitMessagePosted)
{
const ScopedAutoReleasePool pool;
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode
beforeDate: endDate];
NSEvent* e = [NSApp nextEventMatchingMask: NSAnyEventMask
untilDate: endDate
inMode: NSDefaultRunLoopMode
dequeue: YES];
if (e != 0 && ! isEventBlockedByModalComps (e))
[NSApp sendEvent: e];
}
return ! quitMessagePosted;
}
//==============================================================================
void MessageManager::doPlatformSpecificInitialisation()
{
if (juceAppDelegate == 0)
juceAppDelegate = [[JuceAppDelegate alloc] init];
// This launches a dummy thread, which forces Cocoa to initialise NSThreads
// correctly (needed prior to 10.5)
if (! [NSThread isMultiThreaded])
[NSThread detachNewThreadSelector: @selector (dummyMethod)
toTarget: juceAppDelegate
withObject: nil];
initialiseMainMenu();
}
void MessageManager::doPlatformSpecificShutdown()
{
[[NSRunLoop currentRunLoop] cancelPerformSelectorsWithTarget: juceAppDelegate];
[[NSNotificationCenter defaultCenter] removeObserver: juceAppDelegate];
// Annoyingly, cancelPerformSelectorsWithTarget can't actually cancel the messages
// sent by performSelectorOnMainThread, so need to manually flush these before quitting..
for (int i = 100; --i >= 0 && numPendingMessages > 0;)
{
flushingMessages = true;
getInstance()->runDispatchLoopUntil (10);
}
[juceAppDelegate release];
juceAppDelegate = 0;
}
bool juce_postMessageToSystemQueue (void* message)
{
atomicIncrement (numPendingMessages);
[juceAppDelegate performSelectorOnMainThread: @selector (customEvent:)
withObject: (id) [[NSData alloc] initWithBytes: &message
length: (int) sizeof (message)]
waitUntilDone: NO];
return true;
}
void MessageManager::broadcastMessage (const String& value) throw()
{
}
void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* callback,
void* data)
{
if (isThisTheMessageThread())
{
return (*callback) (data);
}
else
{
// If a thread has a MessageManagerLock and then tries to call this method, it'll
// deadlock because the message manager is blocked from running, so can never
// call your function..
jassert (! MessageManager::getInstance()->currentThreadHasLockedMessageManager());
const ScopedAutoReleasePool pool;
CallbackMessagePayload cmp;
cmp.function = callback;
cmp.parameter = data;
cmp.result = 0;
cmp.hasBeenExecuted = false;
[juceAppDelegate performSelectorOnMainThread: @selector (performCallback:)
withObject: [NSData dataWithBytesNoCopy: &cmp
length: sizeof (cmp)
freeWhenDone: NO]
waitUntilDone: YES];
return cmp.result;
}
}
#endif
/*
==============================================================================

This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.

------------------------------------------------------------------------------

JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.

JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA

------------------------------------------------------------------------------

If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.

==============================================================================
*/

// (This file gets included by juce_mac_NativeCode.mm, rather than being
// compiled on its own).
#ifdef JUCE_INCLUDED_FILE

struct CallbackMessagePayload
{
MessageCallbackFunction* function;
void* parameter;
void* volatile result;
bool volatile hasBeenExecuted;
};

/* When you use multiple DLLs which share similarly-named obj-c classes - like
for example having more than one juce plugin loaded into a host, then when a
method is called, the actual code that runs might actually be in a different module
than the one you expect... So any calls to library functions or statics that are
made inside obj-c methods will probably end up getting executed in a different DLL's
memory space. Not a great thing to happen - this obviously leads to bizarre crashes.

To work around this insanity, I'm only allowing obj-c methods to make calls to
virtual methods of an object that's known to live inside the right module's space.
*/
class AppDelegateRedirector
{
public:
AppDelegateRedirector() {}
virtual ~AppDelegateRedirector() {}

virtual NSApplicationTerminateReply shouldTerminate()
{
if (JUCEApplication::getInstance() != 0)
{
JUCEApplication::getInstance()->systemRequestedQuit();
return NSTerminateCancel;
}

return NSTerminateNow;
}

virtual BOOL openFile (const NSString* filename)
{
if (JUCEApplication::getInstance() != 0)
{
JUCEApplication::getInstance()->anotherInstanceStarted (nsStringToJuce (filename));
return YES;
}

return NO;
}

virtual void openFiles (NSArray* filenames)
{
StringArray files;
for (unsigned int i = 0; i < [filenames count]; ++i)
files.add (nsStringToJuce ((NSString*) [filenames objectAtIndex: i]));

if (files.size() > 0 && JUCEApplication::getInstance() != 0)
{
JUCEApplication::getInstance()->anotherInstanceStarted (files.joinIntoString (T(" ")));
}
}

virtual void focusChanged()
{
juce_HandleProcessFocusChange();
}

virtual void deliverMessage (void* message)
{
// no need for an mm lock here - deliverMessage locks it
MessageManager::getInstance()->deliverMessage (message);
}

virtual void performCallback (CallbackMessagePayload* pl)
{
pl->result = (*pl->function) (pl->parameter);
pl->hasBeenExecuted = true;
}

virtual void deleteSelf()
{
delete this;
}
};

END_JUCE_NAMESPACE
using namespace JUCE_NAMESPACE;

#define JuceAppDelegate MakeObjCClassName(JuceAppDelegate)

static int numPendingMessages = 0;
static bool flushingMessages = false;

@interface JuceAppDelegate : NSObject
{
@private
id oldDelegate;
AppDelegateRedirector* redirector;
}

- (JuceAppDelegate*) init;
- (void) dealloc;
- (BOOL) application: (NSApplication*) theApplication openFile: (NSString*) filename;
- (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames;
- (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app;
- (void) applicationDidBecomeActive: (NSNotification*) aNotification;
- (void) applicationDidResignActive: (NSNotification*) aNotification;
- (void) applicationWillUnhide: (NSNotification*) aNotification;
- (void) customEvent: (id) data;
- (void) performCallback: (id) info;
- (void) dummyMethod;
@end

@implementation JuceAppDelegate

- (JuceAppDelegate*) init
{
[super init];

redirector = new AppDelegateRedirector();
numPendingMessages = 0;
flushingMessages = false;

NSNotificationCenter* center = [NSNotificationCenter defaultCenter];

if (JUCEApplication::getInstance() != 0)
{
oldDelegate = [NSApp delegate];
[NSApp setDelegate: self];
}
else
{
oldDelegate = 0;
[center addObserver: self selector: @selector (applicationDidResignActive:)
name: NSApplicationDidResignActiveNotification object: NSApp];

[center addObserver: self selector: @selector (applicationDidBecomeActive:)
name: NSApplicationDidBecomeActiveNotification object: NSApp];

[center addObserver: self selector: @selector (applicationWillUnhide:)
name: NSApplicationWillUnhideNotification object: NSApp];

}

return self;
}

- (void) dealloc
{
if (oldDelegate != 0)
[NSApp setDelegate: oldDelegate];

redirector->deleteSelf();
[super dealloc];
}

- (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app
{
return redirector->shouldTerminate();
}

- (BOOL) application: (NSApplication*) app openFile: (NSString*) filename
{
return redirector->openFile (filename);
}

- (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames
{
return redirector->openFiles (filenames);
}

- (void) applicationDidBecomeActive: (NSNotification*) aNotification
{
redirector->focusChanged();
}

- (void) applicationDidResignActive: (NSNotification*) aNotification
{
redirector->focusChanged();
}

- (void) applicationWillUnhide: (NSNotification*) aNotification
{
redirector->focusChanged();
}

- (void) customEvent: (id) n
{
atomicDecrement (numPendingMessages);

NSData* data = (NSData*) n;
void* message = 0;
[data getBytes: &message length: sizeof (message)];

if (message != 0 && ! flushingMessages)
redirector->deliverMessage (message);

[data release];
}

- (void) performCallback: (id) info
{
if ([info isKindOfClass: [NSData class]])
{
CallbackMessagePayload* pl = (CallbackMessagePayload*) [((NSData*) info) bytes];

if (pl != 0)
redirector->performCallback (pl);
}
else
{
jassertfalse // should never get here!
}
}

- (void) dummyMethod {} // (used as a way of running a dummy thread)

@end

BEGIN_JUCE_NAMESPACE

static JuceAppDelegate* juceAppDelegate = 0;

void MessageManager::runDispatchLoop()
{
if (! quitMessagePosted) // check that the quit message wasn't already posted..
{
const ScopedAutoReleasePool pool;

// must only be called by the message thread!
jassert (isThisTheMessageThread());

[NSApp run];
}
}

void MessageManager::stopDispatchLoop()
{
quitMessagePosted = true;
[NSApp stop: nil];
[NSApp activateIgnoringOtherApps: YES]; // (if the app is inactive, it sits there and ignores the quit request until the next time it gets activated)
}

static bool isEventBlockedByModalComps (NSEvent* e)
{
if (Component::getNumCurrentlyModalComponents() == 0)
return false;

NSWindow* const w = [e window];
if (w == 0 || [w worksWhenModal])
return false;

bool isKey = false, isInputAttempt = false;

switch ([e type])
{
case NSKeyDown:
case NSKeyUp:
isKey = isInputAttempt = true;
break;

case NSLeftMouseDown:
case NSRightMouseDown:
case NSOtherMouseDown:
isInputAttempt = true;
break;

case NSLeftMouseDragged:
case NSRightMouseDragged:
case NSLeftMouseUp:
case NSRightMouseUp:
case NSOtherMouseUp:
case NSOtherMouseDragged:
if (Component::getComponentUnderMouse() != 0)
return false;
break;

case NSMouseMoved:
case NSMouseEntered:
case NSMouseExited:
case NSCursorUpdate:
case NSScrollWheel:
case NSTabletPoint:
case NSTabletProximity:
break;

default:
return false;
}

for (int i = ComponentPeer::getNumPeers(); --i >= 0;)
{
ComponentPeer* const peer = ComponentPeer::getPeer (i);
NSView* const compView = (NSView*) peer->getNativeHandle();

if ([compView window] == w)
{
if (isKey)
{
if (compView == [w firstResponder])
return false;
}
else
{
if (NSPointInRect ([compView convertPoint: [e locationInWindow] fromView: nil],
[compView bounds]))
return false;
}
}
}

if (isInputAttempt)
{
if (! [NSApp isActive])
[NSApp activateIgnoringOtherApps: YES];

Component* const modal = Component::getCurrentlyModalComponent (0);
if (modal != 0)
modal->inputAttemptWhenModal();
}

return true;
}

bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor)
{
const ScopedAutoReleasePool pool;
jassert (isThisTheMessageThread()); // must only be called by the message thread

uint32 endTime = Time::getMillisecondCounter() + millisecondsToRunFor;
NSDate* endDate = [NSDate dateWithTimeIntervalSinceNow: millisecondsToRunFor * 0.001];

while (Time::getMillisecondCounter() < endTime && ! quitMessagePosted)
{
const ScopedAutoReleasePool pool;

[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode
beforeDate: endDate];

NSEvent* e = [NSApp nextEventMatchingMask: NSAnyEventMask
untilDate: endDate
inMode: NSDefaultRunLoopMode
dequeue: YES];

if (e != 0 && ! isEventBlockedByModalComps (e))
[NSApp sendEvent: e];
}

return ! quitMessagePosted;
}

//==============================================================================
void MessageManager::doPlatformSpecificInitialisation()
{
if (juceAppDelegate == 0)
juceAppDelegate = [[JuceAppDelegate alloc] init];

// This launches a dummy thread, which forces Cocoa to initialise NSThreads
// correctly (needed prior to 10.5)
if (! [NSThread isMultiThreaded])
[NSThread detachNewThreadSelector: @selector (dummyMethod)
toTarget: juceAppDelegate
withObject: nil];

initialiseMainMenu();
}

void MessageManager::doPlatformSpecificShutdown()
{
[[NSRunLoop currentRunLoop] cancelPerformSelectorsWithTarget: juceAppDelegate];
[[NSNotificationCenter defaultCenter] removeObserver: juceAppDelegate];

// Annoyingly, cancelPerformSelectorsWithTarget can't actually cancel the messages
// sent by performSelectorOnMainThread, so need to manually flush these before quitting..
for (int i = 100; --i >= 0 && numPendingMessages > 0;)
{
flushingMessages = true;
getInstance()->runDispatchLoopUntil (10);
}

[juceAppDelegate release];
juceAppDelegate = 0;
}

bool juce_postMessageToSystemQueue (void* message)
{
atomicIncrement (numPendingMessages);

[juceAppDelegate performSelectorOnMainThread: @selector (customEvent:)
withObject: (id) [[NSData alloc] initWithBytes: &message
length: (int) sizeof (message)]
waitUntilDone: NO];
return true;
}

void MessageManager::broadcastMessage (const String& value) throw()
{
}

void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* callback,
void* data)
{
if (isThisTheMessageThread())
{
return (*callback) (data);
}
else
{
// If a thread has a MessageManagerLock and then tries to call this method, it'll
// deadlock because the message manager is blocked from running, so can never
// call your function..
jassert (! MessageManager::getInstance()->currentThreadHasLockedMessageManager());

const ScopedAutoReleasePool pool;

CallbackMessagePayload cmp;
cmp.function = callback;
cmp.parameter = data;
cmp.result = 0;
cmp.hasBeenExecuted = false;

[juceAppDelegate performSelectorOnMainThread: @selector (performCallback:)
withObject: [NSData dataWithBytesNoCopy: &cmp
length: sizeof (cmp)
freeWhenDone: NO]
waitUntilDone: YES];

return cmp.result;
}
}

#endif

+ 18
- 0
build/macosx/platform_specific_code/juce_mac_NSViewComponentPeer.mm View File

@@ -64,6 +64,9 @@ END_JUCE_NAMESPACE
- (void) rightMouseDown: (NSEvent*) ev;
- (void) rightMouseDragged: (NSEvent*) ev;
- (void) rightMouseUp: (NSEvent*) ev;
- (void) otherMouseDown: (NSEvent*) ev;
- (void) otherMouseDragged: (NSEvent*) ev;
- (void) otherMouseUp: (NSEvent*) ev;
- (void) scrollWheel: (NSEvent*) ev;
- (BOOL) acceptsFirstMouse: (NSEvent*) ev;
- (void) frameChanged: (NSNotification*) n;
@@ -331,6 +334,21 @@ END_JUCE_NAMESPACE
[self mouseUp: ev];
}
- (void) otherMouseDown: (NSEvent*) ev
{
[self mouseDown: ev];
}
- (void) otherMouseDragged: (NSEvent*) ev
{
[self mouseDragged: ev];
}
- (void) otherMouseUp: (NSEvent*) ev
{
[self mouseUp: ev];
}
- (void) scrollWheel: (NSEvent*) ev
{
if (owner != 0)


+ 1
- 1
build/win32/platform_specific_code/juce_win32_FileChooser.cpp View File

@@ -70,7 +70,7 @@ static int CALLBACK browseCallbackProc (HWND hWnd, UINT msg, LPARAM lParam, LPAR
return 0;
}
void juce_setWindowStyleBit (HWND h, int styleType, int feature, bool bitIsSet) throw();
void juce_setWindowStyleBit (HWND h, const int styleType, const int feature, const bool bitIsSet) throw();
static UINT_PTR CALLBACK openCallback (HWND hdlg, UINT uiMsg, WPARAM /*wParam*/, LPARAM lParam)
{


+ 3
- 8
build/win32/platform_specific_code/juce_win32_Files.cpp View File

@@ -564,11 +564,10 @@ const File File::getLinkedTarget() const throw()
else if (getFileExtension() != T(".lnk"))
return result;
IShellLink* shellLink = 0;
if (SUCCEEDED (CoCreateInstance (CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER,
IID_IShellLink, (LPVOID*) &shellLink)))
ComSmartPtr <IShellLink> shellLink;
if (SUCCEEDED (shellLink.CoCreateInstance (CLSID_ShellLink, CLSCTX_INPROC_SERVER)))
{
IPersistFile* persistFile;
ComSmartPtr <IPersistFile> persistFile;
if (SUCCEEDED (shellLink->QueryInterface (IID_IPersistFile, (LPVOID*) &persistFile)))
{
if (SUCCEEDED (persistFile->Load ((const WCHAR*) p, STGM_READ))
@@ -580,11 +579,7 @@ const File File::getLinkedTarget() const throw()
if (SUCCEEDED (shellLink->GetPath (resolvedPath, MAX_PATH, &winFindData, SLGP_UNCPRIORITY)))
result = File (resolvedPath);
}
persistFile->Release();
}
shellLink->Release();
}
return result;


+ 42
- 0
build/win32/platform_specific_code/juce_win32_NativeIncludes.h View File

@@ -153,4 +153,46 @@
#pragma warning (pop)
#endif
//==============================================================================
/** A simple COM smart pointer.
Avoids having to include ATL just to get one of these.
*/
template <class T>
class ComSmartPtr
{
public:
ComSmartPtr() throw() : p (0) {}
ComSmartPtr (T* const p_) : p (p_) { if (p_ != 0) p_->AddRef(); }
ComSmartPtr (const ComSmartPtr<T>& p_) : p (p_.p) { if (p != 0) p->AddRef(); }
~ComSmartPtr() { if (p != 0) p->Release(); }
operator T*() const throw() { return p; }
T& operator*() const throw() { return *p; }
T** operator&() throw() { return &p; }
T* operator->() const throw() { return p; }
T* operator= (T* const newP)
{
if (newP != 0)
newP->AddRef();
if (p != 0)
p->Release();
p = newP;
return newP;
}
T* operator= (const ComSmartPtr<T>& newP) { return operator= (newP.p); }
HRESULT CoCreateInstance (REFCLSID rclsid, DWORD dwClsContext)
{
operator= (0);
return ::CoCreateInstance (rclsid, 0, dwClsContext, __uuidof(T), (void**) &p);
}
T* p;
};
#endif // __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__

+ 0
- 69
build/win32/platform_specific_code/win32_headers.h View File

@@ -1,69 +0,0 @@
/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-7 by Raw Material Software ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the
GNU General Public License, as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
JUCE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with JUCE; if not, visit www.gnu.org/licenses or write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
------------------------------------------------------------------------------
If you'd like to release a closed-source product which uses JUCE, commercial
licenses are also available: visit www.rawmaterialsoftware.com/juce for
more information.
==============================================================================
*/
#ifndef __WIN32_HEADERS_JUCEHEADER__
#define __WIN32_HEADERS_JUCEHEADER__
#include "../../../juce_Config.h"
#ifndef STRICT
#define STRICT 1
#endif
#define WIN32_LEAN_AND_MEAN
// don't want to get told about microsoft's mistakes..
#ifdef _MSC_VER
#pragma warning (push)
#pragma warning (disable : 4100 4201)
#endif
// use Platform SDK as win2000 unless this is disabled
#ifndef DISABLE_TRANSPARENT_WINDOWS
#define _WIN32_WINNT 0x0500
#endif
#define _UNICODE 1
#define UNICODE 1
#include <windows.h>
#include <commdlg.h>
#include <shellapi.h>
#include <mmsystem.h>
#include <vfw.h>
#include <tchar.h>
#undef PACKED
#ifdef _MSC_VER
#pragma warning (pop)
#endif
#endif // __WIN32_HEADERS_JUCEHEADER__

+ 0
- 4
build/win32/vc8/JUCE.vcproj View File

@@ -5762,10 +5762,6 @@
RelativePath="..\platform_specific_code\juce_win32_Windowing.cpp"
>
</File>
<File
RelativePath="..\platform_specific_code\win32_headers.h"
>
</File>
</Filter>
</Filter>
</Files>


+ 1547
- 1531
extras/audio plugins/wrapper/VST/juce_VST_Wrapper.cpp
File diff suppressed because it is too large
View File


+ 4
- 0
extras/example projects/example_project_for_Mac/juce_application.xcodeproj/project.pbxproj View File

@@ -11,6 +11,7 @@
841083D50DB36EA400AB8583 /* MainComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841083D30DB36EA400AB8583 /* MainComponent.cpp */; };
841084880DB374E700AB8583 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 841084870DB374E700AB8583 /* juce.xcconfig */; };
841136A00D0480DE0054B790 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8411369F0D0480DE0054B790 /* OpenGL.framework */; };
84204DA50FDEFA3800FA4ABC /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84204DA40FDEFA3800FA4ABC /* Carbon.framework */; };
846EC7870EB607050080CCFF /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846EC7860EB607050080CCFF /* QTKit.framework */; };
84F30CD108FEAAA20087E26C /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F30CD008FEAAA20087E26C /* Main.cpp */; };
84F30CED08FEAD7A0087E26C /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F30CEC08FEAD7A0087E26C /* CoreAudio.framework */; };
@@ -34,6 +35,7 @@
841083D40DB36EA400AB8583 /* MainComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../common/MainComponent.h; sourceTree = SOURCE_ROOT; };
841084870DB374E700AB8583 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; };
8411369F0D0480DE0054B790 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
84204DA40FDEFA3800FA4ABC /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
846EC7860EB607050080CCFF /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; };
84F30CD008FEAAA20087E26C /* Main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../common/Main.cpp; sourceTree = SOURCE_ROOT; };
84F30CEC08FEAD7A0087E26C /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
@@ -64,6 +66,7 @@
84FBB8880E06CCE900B52196 /* AudioUnit.framework in Frameworks */,
84FBB88D0E06CD0100B52196 /* WebKit.framework in Frameworks */,
846EC7870EB607050080CCFF /* QTKit.framework in Frameworks */,
84204DA50FDEFA3800FA4ABC /* Carbon.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -115,6 +118,7 @@
20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
isa = PBXGroup;
children = (
84204DA40FDEFA3800FA4ABC /* Carbon.framework */,
84FBB8870E06CCE900B52196 /* AudioUnit.framework */,
84FBB8720E06CC5D00B52196 /* Cocoa.framework */,
4A9504CAFFE6A41611CA0CBA /* CoreServices.framework */,


+ 1
- 8
extras/juce demo/build/win32_vc8/jucedemo.vcproj View File

@@ -107,9 +107,6 @@
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
@@ -148,7 +145,7 @@
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
MinimalRebuild="false"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
BufferSecurityCheck="true"
@@ -176,7 +173,6 @@
<Tool
Name="VCLinkerTool"
OutputFile=".\Debug/jucedemo.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="../../../juce/bin"
IgnoreDefaultLibraryNames="libcmt.lib, msvcrt.lib"
@@ -205,9 +201,6 @@
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>


+ 157
- 72
juce_amalgamated.cpp View File

@@ -568,6 +568,46 @@
#pragma warning (pop)
#endif

/** A simple COM smart pointer.
Avoids having to include ATL just to get one of these.
*/
template <class T>
class ComSmartPtr
{
public:
ComSmartPtr() throw() : p (0) {}
ComSmartPtr (T* const p_) : p (p_) { if (p_ != 0) p_->AddRef(); }
ComSmartPtr (const ComSmartPtr<T>& p_) : p (p_.p) { if (p != 0) p->AddRef(); }
~ComSmartPtr() { if (p != 0) p->Release(); }

operator T*() const throw() { return p; }
T& operator*() const throw() { return *p; }
T** operator&() throw() { return &p; }
T* operator->() const throw() { return p; }

T* operator= (T* const newP)
{
if (newP != 0)
newP->AddRef();

if (p != 0)
p->Release();

p = newP;
return newP;
}

T* operator= (const ComSmartPtr<T>& newP) { return operator= (newP.p); }

HRESULT CoCreateInstance (REFCLSID rclsid, DWORD dwClsContext)
{
operator= (0);
return ::CoCreateInstance (rclsid, 0, dwClsContext, __uuidof(T), (void**) &p);
}

T* p;
};

#endif // __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__
/********* End of inlined file: juce_win32_NativeIncludes.h *********/

@@ -7655,7 +7695,7 @@ bool StreamingSocket::isLocal() const throw()
DatagramSocket::DatagramSocket (const int localPortNumber)
: portNumber (0),
handle (-1),
connected (false),
connected (true),
serverAddress (0)
{
#if JUCE_WIN32
@@ -17803,12 +17843,12 @@ class AiffAudioFormatWriter : public AudioFormatWriter
public:

AiffAudioFormatWriter (OutputStream* out,
const double sampleRate,
const double sampleRate_,
const unsigned int chans,
const int bits)
: AudioFormatWriter (out,
aiffFormatName,
sampleRate,
sampleRate_,
chans,
bits),
lengthInSamples (0),
@@ -23300,9 +23340,17 @@ void AudioDeviceManager::setDefaultMidiOutput (const String& deviceName)
{
if (defaultMidiOutputName != deviceName)
{
SortedSet <AudioIODeviceCallback*> oldCallbacks;

{
const ScopedLock sl (audioCallbackLock);
oldCallbacks = callbacks;
callbacks.clear();
}

if (currentAudioDevice != 0)
for (int i = callbacks.size(); --i >= 0;)
callbacks.getUnchecked(i)->audioDeviceStopped();
for (int i = oldCallbacks.size(); --i >= 0;)
oldCallbacks.getUnchecked(i)->audioDeviceStopped();

deleteAndZero (defaultMidiOutput);
defaultMidiOutputName = deviceName;
@@ -23311,8 +23359,13 @@ void AudioDeviceManager::setDefaultMidiOutput (const String& deviceName)
defaultMidiOutput = MidiOutput::openDevice (MidiOutput::getDevices().indexOf (deviceName));

if (currentAudioDevice != 0)
for (int i = callbacks.size(); --i >= 0;)
callbacks.getUnchecked(i)->audioDeviceAboutToStart (currentAudioDevice);
for (int i = oldCallbacks.size(); --i >= 0;)
oldCallbacks.getUnchecked(i)->audioDeviceAboutToStart (currentAudioDevice);

{
const ScopedLock sl (audioCallbackLock);
callbacks = oldCallbacks;
}

updateXml();
sendChangeMessage (this);
@@ -39550,7 +39603,7 @@ void Component::updateMouseCursor() const throw()
sendFakeMouseMove();
}

void Component::internalUpdateMouseCursor (const bool forcedUpdate) throw()
void Component::internalUpdateMouseCursor (bool forcedUpdate) throw()
{
ComponentPeer* const peer = getPeer();

@@ -39563,6 +39616,7 @@ void Component::internalUpdateMouseCursor (const bool forcedUpdate) throw()
|| ! isCursorVisibleUntilOffscreen))
{
mc = MouseCursor::NoCursor;
forcedUpdate = true;
}

static void* currentCursorHandle = 0;
@@ -42841,7 +42895,7 @@ void DrawableButton::paintButton (Graphics& g,
g.setFont ((float) textH);

g.setColour (Colours::black.withAlpha (isEnabled() ? 1.0f : 0.4f));
g.drawFittedText (getName(),
g.drawFittedText (getButtonText(),
2, getHeight() - textH - 1,
getWidth() - 4, textH,
Justification::centred, 1);
@@ -43046,8 +43100,8 @@ END_JUCE_NAMESPACE

BEGIN_JUCE_NAMESPACE

ImageButton::ImageButton (const String& text)
: Button (text),
ImageButton::ImageButton (const String& text_)
: Button (text_),
scaleImageToFit (true),
preserveProportions (true),
alphaThreshold (0),
@@ -43446,11 +43500,11 @@ END_JUCE_NAMESPACE

BEGIN_JUCE_NAMESPACE

ToolbarButton::ToolbarButton (const int itemId,
ToolbarButton::ToolbarButton (const int itemId_,
const String& buttonText,
Drawable* const normalImage_,
Drawable* const toggledOnImage_)
: ToolbarItemComponent (itemId, buttonText, true),
: ToolbarItemComponent (itemId_, buttonText, true),
normalImage (normalImage_),
toggledOnImage (toggledOnImage_)
{
@@ -48160,12 +48214,12 @@ void TableListBox::paintListBoxItem (int, Graphics&, int, int, bool)
{
}

Component* TableListBox::refreshComponentForRow (int rowNumber, bool isRowSelected, Component* existingComponentToUpdate)
Component* TableListBox::refreshComponentForRow (int rowNumber, bool isRowSelected_, Component* existingComponentToUpdate)
{
if (existingComponentToUpdate == 0)
existingComponentToUpdate = new TableListRowComp (*this);

((TableListRowComp*) existingComponentToUpdate)->update (rowNumber, isRowSelected);
((TableListRowComp*) existingComponentToUpdate)->update (rowNumber, isRowSelected_);

return existingComponentToUpdate;
}
@@ -57148,6 +57202,7 @@ void ComponentAnimator::animateComponent (Component* const component,
{
at = new AnimationTask (component);
tasks.add (at);
sendChangeMessage (this);
}

at->msElapsed = 0;
@@ -57187,6 +57242,7 @@ void ComponentAnimator::cancelAllAnimations (const bool moveComponentsToTheirFin

delete at;
tasks.remove (i);
sendChangeMessage (this);
}
}

@@ -57202,6 +57258,7 @@ void ComponentAnimator::cancelAnimation (Component* const component,

tasks.removeValue (at);
delete at;
sendChangeMessage (this);
}
}

@@ -57217,6 +57274,11 @@ const Rectangle ComponentAnimator::getComponentDestination (Component* const com
return Rectangle();
}

bool ComponentAnimator::isAnimating (Component* component) const
{
return findTaskFor (component) != 0;
}

void ComponentAnimator::timerCallback()
{
const uint32 timeNow = Time::getMillisecondCounter();
@@ -57234,6 +57296,7 @@ void ComponentAnimator::timerCallback()
{
tasks.remove (i);
delete at;
sendChangeMessage (this);
}
}

@@ -57888,7 +57951,7 @@ void MultiDocumentPanel::addWindow (Component* component)
}

bool MultiDocumentPanel::addDocument (Component* const component,
const Colour& backgroundColour,
const Colour& docColour,
const bool deleteWhenRemoved)
{
// If you try passing a full DocumentWindow or ResizableWindow in here, you'll end up
@@ -57900,7 +57963,7 @@ bool MultiDocumentPanel::addDocument (Component* const component,

components.add (component);
component->setComponentProperty (T("mdiDocumentDelete_"), deleteWhenRemoved);
component->setComponentProperty (T("mdiDocumentBkg_"), backgroundColour);
component->setComponentProperty (T("mdiDocumentBkg_"), docColour);
component->addComponentListener (this);

if (mode == FloatingWindows)
@@ -57933,14 +57996,14 @@ bool MultiDocumentPanel::addDocument (Component* const component,
Array <Component*> temp (components);

for (int i = 0; i < temp.size(); ++i)
tabComponent->addTab (temp[i]->getName(), backgroundColour, temp[i], false);
tabComponent->addTab (temp[i]->getName(), docColour, temp[i], false);

resized();
}
else
{
if (tabComponent != 0)
tabComponent->addTab (component->getName(), backgroundColour, component, false);
tabComponent->addTab (component->getName(), docColour, component, false);
else
addAndMakeVisible (component);
}
@@ -70390,9 +70453,9 @@ class MagnifyingPeer : public ComponentPeer
{
public:

MagnifyingPeer (Component* const component,
MagnifyingPeer (Component* const component_,
MagnifierComponent* const magnifierComp_)
: ComponentPeer (component, 0),
: ComponentPeer (component_, 0),
magnifierComp (magnifierComp_)
{
}
@@ -87970,65 +88033,65 @@ void PositionedRectangle::decodeSizeString (const String& s, uint8& mode, double
}

void PositionedRectangle::applyPosAndSize (double& xOut, double& wOut,
const double x, const double w,
const uint8 xMode, const uint8 wMode,
const double x_, const double w_,
const uint8 xMode_, const uint8 wMode_,
const int parentPos,
const int parentSize) const throw()
{
if (wMode == proportionalSize)
wOut = roundDoubleToInt (w * parentSize);
else if (wMode == parentSizeMinusAbsolute)
wOut = jmax (0, parentSize - roundDoubleToInt (w));
if (wMode_ == proportionalSize)
wOut = roundDoubleToInt (w_ * parentSize);
else if (wMode_ == parentSizeMinusAbsolute)
wOut = jmax (0, parentSize - roundDoubleToInt (w_));
else
wOut = roundDoubleToInt (w);
if ((xMode & proportionOfParentSize) != 0)
xOut = parentPos + x * parentSize;
else if ((xMode & absoluteFromParentBottomRight) != 0)
xOut = (parentPos + parentSize) - x;
else if ((xMode & absoluteFromParentCentre) != 0)
xOut = x + (parentPos + parentSize / 2);
wOut = roundDoubleToInt (w_);
if ((xMode_ & proportionOfParentSize) != 0)
xOut = parentPos + x_ * parentSize;
else if ((xMode_ & absoluteFromParentBottomRight) != 0)
xOut = (parentPos + parentSize) - x_;
else if ((xMode_ & absoluteFromParentCentre) != 0)
xOut = x_ + (parentPos + parentSize / 2);
else
xOut = x + parentPos;
xOut = x_ + parentPos;

if ((xMode & anchorAtRightOrBottom) != 0)
if ((xMode_ & anchorAtRightOrBottom) != 0)
xOut -= wOut;
else if ((xMode & anchorAtCentre) != 0)
else if ((xMode_ & anchorAtCentre) != 0)
xOut -= wOut / 2;
}

void PositionedRectangle::updatePosAndSize (double& xOut, double& wOut,
double x, const double w,
const uint8 xMode, const uint8 wMode,
double x_, const double w_,
const uint8 xMode_, const uint8 wMode_,
const int parentPos,
const int parentSize) const throw()
{
if (wMode == proportionalSize)
if (wMode_ == proportionalSize)
{
if (parentSize > 0)
wOut = w / parentSize;
wOut = w_ / parentSize;
}
else if (wMode == parentSizeMinusAbsolute)
wOut = parentSize - w;
else if (wMode_ == parentSizeMinusAbsolute)
wOut = parentSize - w_;
else
wOut = w;
wOut = w_;

if ((xMode & anchorAtRightOrBottom) != 0)
x += w;
else if ((xMode & anchorAtCentre) != 0)
x += w / 2;
if ((xMode_ & anchorAtRightOrBottom) != 0)
x_ += w_;
else if ((xMode_ & anchorAtCentre) != 0)
x_ += w_ / 2;

if ((xMode & proportionOfParentSize) != 0)
if ((xMode_ & proportionOfParentSize) != 0)
{
if (parentSize > 0)
xOut = (x - parentPos) / parentSize;
xOut = (x_ - parentPos) / parentSize;
}
else if ((xMode & absoluteFromParentBottomRight) != 0)
xOut = (parentPos + parentSize) - x;
else if ((xMode & absoluteFromParentCentre) != 0)
xOut = x - (parentPos + parentSize / 2);
else if ((xMode_ & absoluteFromParentBottomRight) != 0)
xOut = (parentPos + parentSize) - x_;
else if ((xMode_ & absoluteFromParentCentre) != 0)
xOut = x_ - (parentPos + parentSize / 2);
else
xOut = x - parentPos;
xOut = x_ - parentPos;
}

END_JUCE_NAMESPACE
@@ -241899,11 +241962,10 @@ const File File::getLinkedTarget() const throw()
else if (getFileExtension() != T(".lnk"))
return result;

IShellLink* shellLink = 0;
if (SUCCEEDED (CoCreateInstance (CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER,
IID_IShellLink, (LPVOID*) &shellLink)))
ComSmartPtr <IShellLink> shellLink;
if (SUCCEEDED (shellLink.CoCreateInstance (CLSID_ShellLink, CLSCTX_INPROC_SERVER)))
{
IPersistFile* persistFile;
ComSmartPtr <IPersistFile> persistFile;
if (SUCCEEDED (shellLink->QueryInterface (IID_IPersistFile, (LPVOID*) &persistFile)))
{
if (SUCCEEDED (persistFile->Load ((const WCHAR*) p, STGM_READ))
@@ -241915,11 +241977,7 @@ const File File::getLinkedTarget() const throw()
if (SUCCEEDED (shellLink->GetPath (resolvedPath, MAX_PATH, &winFindData, SLGP_UNCPRIORITY)))
result = File (resolvedPath);
}

persistFile->Release();
}

shellLink->Release();
}

return result;
@@ -246627,7 +246685,7 @@ static int CALLBACK browseCallbackProc (HWND hWnd, UINT msg, LPARAM lParam, LPAR
return 0;
}

void juce_setWindowStyleBit (HWND h, int styleType, int feature, bool bitIsSet) throw();
void juce_setWindowStyleBit (HWND h, const int styleType, const int feature, const bool bitIsSet) throw();

static UINT_PTR CALLBACK openCallback (HWND hdlg, UINT uiMsg, WPARAM /*wParam*/, LPARAM lParam)
{
@@ -255520,6 +255578,7 @@ END_JUCE_NAMESPACE
#include <utime.h>
#include <pwd.h>
#include <fcntl.h>
#include <dlfcn.h>

#define U_ISOFS_SUPER_MAGIC (short) 0x9660 // linux/iso_fs.h
#define U_MSDOS_SUPER_MAGIC (short) 0x4d44 // linux/msdos_fs.h
@@ -256180,6 +256239,15 @@ const File File::getSpecialLocation (const SpecialLocationType type)

case currentExecutableFile:
case currentApplicationFile:
if (! executableFile.exists())
{
Dl_info executableInfo;
dladdr ((const void*) juce_getFileTimes, &executableInfo);

if (executableInfo.dli_fname != 0)
executableFile = File (String (executableInfo.dli_fname));
}

// if this fails, it's probably because juce_setCurrentExecutableFileName()
// was never called to set the filename - this should be done by the juce
// main() function, so maybe you've hacked it to use your own custom main()?
@@ -261939,8 +262007,6 @@ public:
int ls, ps;
const uint8* const pixels = lockPixelDataReadOnly (0, 0, getWidth(), getHeight(), ls, ps);

jassert (! isARGB())

for (int y = sy; y < sy + dh; ++y)
{
const uint8* p = pixels + y * ls + sx * ps;
@@ -263233,16 +263299,16 @@ private:
{
int netHints [2];
int numHints = 0;
netHints[numHints] = XInternAtom (display, "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", True);

if (netHints [numHints] != 0)
++numHints;

if ((styleFlags & windowIsTemporary) != 0)
netHints [numHints] = XInternAtom (display, "_NET_WM_WINDOW_TYPE_MENU", True);
else
netHints [numHints] = XInternAtom (display, "_NET_WM_WINDOW_TYPE_NORMAL", True);

if (netHints [numHints] != 0)
++numHints;

netHints[numHints] = XInternAtom (display, "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", True);

if (netHints [numHints] != 0)
++numHints;

@@ -266948,6 +267014,9 @@ END_JUCE_NAMESPACE
- (void) rightMouseDown: (NSEvent*) ev;
- (void) rightMouseDragged: (NSEvent*) ev;
- (void) rightMouseUp: (NSEvent*) ev;
- (void) otherMouseDown: (NSEvent*) ev;
- (void) otherMouseDragged: (NSEvent*) ev;
- (void) otherMouseUp: (NSEvent*) ev;
- (void) scrollWheel: (NSEvent*) ev;
- (BOOL) acceptsFirstMouse: (NSEvent*) ev;
- (void) frameChanged: (NSNotification*) n;
@@ -267206,6 +267275,21 @@ END_JUCE_NAMESPACE
[self mouseUp: ev];
}

- (void) otherMouseDown: (NSEvent*) ev
{
[self mouseDown: ev];
}

- (void) otherMouseDragged: (NSEvent*) ev
{
[self mouseDragged: ev];
}

- (void) otherMouseUp: (NSEvent*) ev
{
[self mouseUp: ev];
}

- (void) scrollWheel: (NSEvent*) ev
{
if (owner != 0)
@@ -271079,6 +271163,7 @@ void MessageManager::stopDispatchLoop()
{
quitMessagePosted = true;
[NSApp stop: nil];
[NSApp activateIgnoringOtherApps: YES]; // (if the app is inactive, it sits there and ignores the quit request until the next time it gets activated)
}

static bool isEventBlockedByModalComps (NSEvent* e)


+ 15
- 7
juce_amalgamated.h View File

@@ -3281,8 +3281,8 @@ public:

@see ArrayAllocationBase
*/
OwnedArray (const int granularity = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ObjectClass*> (granularity),
OwnedArray (const int granularity_ = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ObjectClass*> (granularity_),
numUsed (0)
{
}
@@ -4557,8 +4557,8 @@ public:

@see ArrayAllocationBase
*/
Array (const int granularity = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ElementType> (granularity),
Array (const int granularity_ = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ElementType> (granularity_),
numUsed (0)
{
}
@@ -10474,8 +10474,8 @@ public:

@see ArrayAllocationBase
*/
SortedSet (const int granularity = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ElementType> (granularity),
SortedSet (const int granularity_ = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ElementType> (granularity_),
numUsed (0)
{
}
@@ -42387,8 +42387,12 @@ private:

You'll need to make sure the animator object isn't deleted before it finishes
moving the components.

The class is a ChangeBroadcaster and sends a notification when any components
start or finish being animated.
*/
class JUCE_API ComponentAnimator : private Timer
class JUCE_API ComponentAnimator : public ChangeBroadcaster,
private Timer
{
public:

@@ -42458,6 +42462,10 @@ public:
*/
const Rectangle getComponentDestination (Component* const component);

/** Returns true if the specified component is currently being animated.
*/
bool isAnimating (Component* component) const;

juce_UseDebuggingNewOperator

private:


+ 2
- 2
src/juce_appframework/audio/audio_file_formats/juce_AiffAudioFormat.cpp View File

@@ -621,12 +621,12 @@ class AiffAudioFormatWriter : public AudioFormatWriter
public:
//==============================================================================
AiffAudioFormatWriter (OutputStream* out,
const double sampleRate,
const double sampleRate_,
const unsigned int chans,
const int bits)
: AudioFormatWriter (out,
aiffFormatName,
sampleRate,
sampleRate_,
chans,
bits),
lengthInSamples (0),


+ 17
- 4
src/juce_appframework/audio/devices/juce_AudioDeviceManager.cpp View File

@@ -863,9 +863,17 @@ void AudioDeviceManager::setDefaultMidiOutput (const String& deviceName)
{
if (defaultMidiOutputName != deviceName)
{
SortedSet <AudioIODeviceCallback*> oldCallbacks;
{
const ScopedLock sl (audioCallbackLock);
oldCallbacks = callbacks;
callbacks.clear();
}
if (currentAudioDevice != 0)
for (int i = callbacks.size(); --i >= 0;)
callbacks.getUnchecked(i)->audioDeviceStopped();
for (int i = oldCallbacks.size(); --i >= 0;)
oldCallbacks.getUnchecked(i)->audioDeviceStopped();
deleteAndZero (defaultMidiOutput);
defaultMidiOutputName = deviceName;
@@ -874,8 +882,13 @@ void AudioDeviceManager::setDefaultMidiOutput (const String& deviceName)
defaultMidiOutput = MidiOutput::openDevice (MidiOutput::getDevices().indexOf (deviceName));
if (currentAudioDevice != 0)
for (int i = callbacks.size(); --i >= 0;)
callbacks.getUnchecked(i)->audioDeviceAboutToStart (currentAudioDevice);
for (int i = oldCallbacks.size(); --i >= 0;)
oldCallbacks.getUnchecked(i)->audioDeviceAboutToStart (currentAudioDevice);
{
const ScopedLock sl (audioCallbackLock);
callbacks = oldCallbacks;
}
updateXml();
sendChangeMessage (this);


+ 1
- 1
src/juce_appframework/gui/components/buttons/juce_DrawableButton.cpp View File

@@ -196,7 +196,7 @@ void DrawableButton::paintButton (Graphics& g,
g.setFont ((float) textH);
g.setColour (Colours::black.withAlpha (isEnabled() ? 1.0f : 0.4f));
g.drawFittedText (getName(),
g.drawFittedText (getButtonText(),
2, getHeight() - textH - 1,
getWidth() - 4, textH,
Justification::centred, 1);


+ 2
- 2
src/juce_appframework/gui/components/buttons/juce_ImageButton.cpp View File

@@ -39,8 +39,8 @@ BEGIN_JUCE_NAMESPACE
//==============================================================================
ImageButton::ImageButton (const String& text)
: Button (text),
ImageButton::ImageButton (const String& text_)
: Button (text_),
scaleImageToFit (true),
preserveProportions (true),
alphaThreshold (0),


+ 2
- 2
src/juce_appframework/gui/components/buttons/juce_ToolbarButton.cpp View File

@@ -40,11 +40,11 @@ BEGIN_JUCE_NAMESPACE
//==============================================================================
ToolbarButton::ToolbarButton (const int itemId,
ToolbarButton::ToolbarButton (const int itemId_,
const String& buttonText,
Drawable* const normalImage_,
Drawable* const toggledOnImage_)
: ToolbarItemComponent (itemId, buttonText, true),
: ToolbarItemComponent (itemId_, buttonText, true),
normalImage (normalImage_),
toggledOnImage (toggledOnImage_)
{


+ 2
- 2
src/juce_appframework/gui/components/controls/juce_TableListBox.cpp View File

@@ -432,12 +432,12 @@ void TableListBox::paintListBoxItem (int, Graphics&, int, int, bool)
{
}
Component* TableListBox::refreshComponentForRow (int rowNumber, bool isRowSelected, Component* existingComponentToUpdate)
Component* TableListBox::refreshComponentForRow (int rowNumber, bool isRowSelected_, Component* existingComponentToUpdate)
{
if (existingComponentToUpdate == 0)
existingComponentToUpdate = new TableListRowComp (*this);
((TableListRowComp*) existingComponentToUpdate)->update (rowNumber, isRowSelected);
((TableListRowComp*) existingComponentToUpdate)->update (rowNumber, isRowSelected_);
return existingComponentToUpdate;
}


+ 2
- 1
src/juce_appframework/gui/components/juce_Component.cpp View File

@@ -1619,7 +1619,7 @@ void Component::updateMouseCursor() const throw()
sendFakeMouseMove();
}
void Component::internalUpdateMouseCursor (const bool forcedUpdate) throw()
void Component::internalUpdateMouseCursor (bool forcedUpdate) throw()
{
ComponentPeer* const peer = getPeer();
@@ -1632,6 +1632,7 @@ void Component::internalUpdateMouseCursor (const bool forcedUpdate) throw()
|| ! isCursorVisibleUntilOffscreen))
{
mc = MouseCursor::NoCursor;
forcedUpdate = true;
}
static void* currentCursorHandle = 0;


+ 9
- 0
src/juce_appframework/gui/components/layout/juce_ComponentAnimator.cpp View File

@@ -142,6 +142,7 @@ void ComponentAnimator::animateComponent (Component* const component,
{
at = new AnimationTask (component);
tasks.add (at);
sendChangeMessage (this);
}
at->msElapsed = 0;
@@ -181,6 +182,7 @@ void ComponentAnimator::cancelAllAnimations (const bool moveComponentsToTheirFin
delete at;
tasks.remove (i);
sendChangeMessage (this);
}
}
@@ -196,6 +198,7 @@ void ComponentAnimator::cancelAnimation (Component* const component,
tasks.removeValue (at);
delete at;
sendChangeMessage (this);
}
}
@@ -211,6 +214,11 @@ const Rectangle ComponentAnimator::getComponentDestination (Component* const com
return Rectangle();
}
bool ComponentAnimator::isAnimating (Component* component) const
{
return findTaskFor (component) != 0;
}
void ComponentAnimator::timerCallback()
{
const uint32 timeNow = Time::getMillisecondCounter();
@@ -228,6 +236,7 @@ void ComponentAnimator::timerCallback()
{
tasks.remove (i);
delete at;
sendChangeMessage (this);
}
}


+ 9
- 1
src/juce_appframework/gui/components/layout/juce_ComponentAnimator.h View File

@@ -34,6 +34,7 @@
#include "../juce_Component.h"
#include "../juce_ComponentDeletionWatcher.h"
#include "../../../events/juce_ChangeBroadcaster.h"
#include "../../../events/juce_Timer.h"
@@ -49,8 +50,12 @@
You'll need to make sure the animator object isn't deleted before it finishes
moving the components.
The class is a ChangeBroadcaster and sends a notification when any components
start or finish being animated.
*/
class JUCE_API ComponentAnimator : private Timer
class JUCE_API ComponentAnimator : public ChangeBroadcaster,
private Timer
{
public:
//==============================================================================
@@ -121,6 +126,9 @@ public:
*/
const Rectangle getComponentDestination (Component* const component);
/** Returns true if the specified component is currently being animated.
*/
bool isAnimating (Component* component) const;
//==============================================================================
juce_UseDebuggingNewOperator


+ 4
- 4
src/juce_appframework/gui/components/layout/juce_MultiDocumentPanel.cpp View File

@@ -179,7 +179,7 @@ void MultiDocumentPanel::addWindow (Component* component)
}
bool MultiDocumentPanel::addDocument (Component* const component,
const Colour& backgroundColour,
const Colour& docColour,
const bool deleteWhenRemoved)
{
// If you try passing a full DocumentWindow or ResizableWindow in here, you'll end up
@@ -191,7 +191,7 @@ bool MultiDocumentPanel::addDocument (Component* const component,
components.add (component);
component->setComponentProperty (T("mdiDocumentDelete_"), deleteWhenRemoved);
component->setComponentProperty (T("mdiDocumentBkg_"), backgroundColour);
component->setComponentProperty (T("mdiDocumentBkg_"), docColour);
component->addComponentListener (this);
if (mode == FloatingWindows)
@@ -224,14 +224,14 @@ bool MultiDocumentPanel::addDocument (Component* const component,
Array <Component*> temp (components);
for (int i = 0; i < temp.size(); ++i)
tabComponent->addTab (temp[i]->getName(), backgroundColour, temp[i], false);
tabComponent->addTab (temp[i]->getName(), docColour, temp[i], false);
resized();
}
else
{
if (tabComponent != 0)
tabComponent->addTab (component->getName(), backgroundColour, component, false);
tabComponent->addTab (component->getName(), docColour, component, false);
else
addAndMakeVisible (component);
}


+ 2
- 2
src/juce_appframework/gui/components/special/juce_MagnifierComponent.cpp View File

@@ -42,9 +42,9 @@ class MagnifyingPeer : public ComponentPeer
{
public:
//==============================================================================
MagnifyingPeer (Component* const component,
MagnifyingPeer (Component* const component_,
MagnifierComponent* const magnifierComp_)
: ComponentPeer (component, 0),
: ComponentPeer (component_, 0),
magnifierComp (magnifierComp_)
{
}


+ 35
- 35
src/juce_appframework/gui/graphics/geometry/juce_PositionedRectangle.cpp View File

@@ -335,65 +335,65 @@ void PositionedRectangle::decodeSizeString (const String& s, uint8& mode, double
}
void PositionedRectangle::applyPosAndSize (double& xOut, double& wOut,
const double x, const double w,
const uint8 xMode, const uint8 wMode,
const double x_, const double w_,
const uint8 xMode_, const uint8 wMode_,
const int parentPos,
const int parentSize) const throw()
{
if (wMode == proportionalSize)
wOut = roundDoubleToInt (w * parentSize);
else if (wMode == parentSizeMinusAbsolute)
wOut = jmax (0, parentSize - roundDoubleToInt (w));
if (wMode_ == proportionalSize)
wOut = roundDoubleToInt (w_ * parentSize);
else if (wMode_ == parentSizeMinusAbsolute)
wOut = jmax (0, parentSize - roundDoubleToInt (w_));
else
wOut = roundDoubleToInt (w);
if ((xMode & proportionOfParentSize) != 0)
xOut = parentPos + x * parentSize;
else if ((xMode & absoluteFromParentBottomRight) != 0)
xOut = (parentPos + parentSize) - x;
else if ((xMode & absoluteFromParentCentre) != 0)
xOut = x + (parentPos + parentSize / 2);
wOut = roundDoubleToInt (w_);
if ((xMode_ & proportionOfParentSize) != 0)
xOut = parentPos + x_ * parentSize;
else if ((xMode_ & absoluteFromParentBottomRight) != 0)
xOut = (parentPos + parentSize) - x_;
else if ((xMode_ & absoluteFromParentCentre) != 0)
xOut = x_ + (parentPos + parentSize / 2);
else
xOut = x + parentPos;
xOut = x_ + parentPos;
if ((xMode & anchorAtRightOrBottom) != 0)
if ((xMode_ & anchorAtRightOrBottom) != 0)
xOut -= wOut;
else if ((xMode & anchorAtCentre) != 0)
else if ((xMode_ & anchorAtCentre) != 0)
xOut -= wOut / 2;
}
void PositionedRectangle::updatePosAndSize (double& xOut, double& wOut,
double x, const double w,
const uint8 xMode, const uint8 wMode,
double x_, const double w_,
const uint8 xMode_, const uint8 wMode_,
const int parentPos,
const int parentSize) const throw()
{
if (wMode == proportionalSize)
if (wMode_ == proportionalSize)
{
if (parentSize > 0)
wOut = w / parentSize;
wOut = w_ / parentSize;
}
else if (wMode == parentSizeMinusAbsolute)
wOut = parentSize - w;
else if (wMode_ == parentSizeMinusAbsolute)
wOut = parentSize - w_;
else
wOut = w;
wOut = w_;
if ((xMode & anchorAtRightOrBottom) != 0)
x += w;
else if ((xMode & anchorAtCentre) != 0)
x += w / 2;
if ((xMode_ & anchorAtRightOrBottom) != 0)
x_ += w_;
else if ((xMode_ & anchorAtCentre) != 0)
x_ += w_ / 2;
if ((xMode & proportionOfParentSize) != 0)
if ((xMode_ & proportionOfParentSize) != 0)
{
if (parentSize > 0)
xOut = (x - parentPos) / parentSize;
xOut = (x_ - parentPos) / parentSize;
}
else if ((xMode & absoluteFromParentBottomRight) != 0)
xOut = (parentPos + parentSize) - x;
else if ((xMode & absoluteFromParentCentre) != 0)
xOut = x - (parentPos + parentSize / 2);
else if ((xMode_ & absoluteFromParentBottomRight) != 0)
xOut = (parentPos + parentSize) - x_;
else if ((xMode_ & absoluteFromParentCentre) != 0)
xOut = x_ - (parentPos + parentSize / 2);
else
xOut = x - parentPos;
xOut = x_ - parentPos;
}
END_JUCE_NAMESPACE

+ 2
- 2
src/juce_core/containers/juce_Array.h View File

@@ -70,8 +70,8 @@ public:
@see ArrayAllocationBase
*/
Array (const int granularity = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ElementType> (granularity),
Array (const int granularity_ = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ElementType> (granularity_),
numUsed (0)
{
}


+ 2
- 2
src/juce_core/containers/juce_OwnedArray.h View File

@@ -71,8 +71,8 @@ public:
@see ArrayAllocationBase
*/
OwnedArray (const int granularity = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ObjectClass*> (granularity),
OwnedArray (const int granularity_ = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ObjectClass*> (granularity_),
numUsed (0)
{
}


+ 2
- 2
src/juce_core/containers/juce_SortedSet.h View File

@@ -76,8 +76,8 @@ public:
@see ArrayAllocationBase
*/
SortedSet (const int granularity = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ElementType> (granularity),
SortedSet (const int granularity_ = juceDefaultArrayGranularity) throw()
: ArrayAllocationBase <ElementType> (granularity_),
numUsed (0)
{
}


+ 1
- 1
src/juce_core/io/network/juce_Socket.cpp View File

@@ -504,7 +504,7 @@ bool StreamingSocket::isLocal() const throw()
DatagramSocket::DatagramSocket (const int localPortNumber)
: portNumber (0),
handle (-1),
connected (false),
connected (true),
serverAddress (0)
{
#if JUCE_WIN32


Loading…
Cancel
Save