mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
This commit is contained in:
parent
c919933277
commit
47cf2369e5
136 changed files with 48629 additions and 38971 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -367,7 +367,7 @@ private:
|
|||
class ALSAThread : public Thread
|
||||
{
|
||||
public:
|
||||
ALSAThread (const String& inputId_,
|
||||
ALSAThread (const String& inputId_,
|
||||
const String& outputId_)
|
||||
: Thread ("Juce ALSA"),
|
||||
sampleRate (0),
|
||||
|
|
@ -446,7 +446,7 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
if (! outputDevice->setParameters ((unsigned int) sampleRate,
|
||||
if (! outputDevice->setParameters ((unsigned int) sampleRate,
|
||||
currentOutputChans.getHighestBit() + 1,
|
||||
bufferSize))
|
||||
{
|
||||
|
|
@ -467,7 +467,7 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
if (! inputDevice->setParameters ((unsigned int) sampleRate,
|
||||
if (! inputDevice->setParameters ((unsigned int) sampleRate,
|
||||
currentInputChans.getHighestBit() + 1,
|
||||
bufferSize))
|
||||
{
|
||||
|
|
@ -673,7 +673,7 @@ class ALSAAudioIODevice : public AudioIODevice
|
|||
{
|
||||
public:
|
||||
ALSAAudioIODevice (const String& deviceName,
|
||||
const String& inputId_,
|
||||
const String& inputId_,
|
||||
const String& outputId_)
|
||||
: AudioIODevice (deviceName, T("ALSA")),
|
||||
inputId (inputId_),
|
||||
|
|
@ -980,8 +980,8 @@ public:
|
|||
deviceName = inputDeviceName;
|
||||
|
||||
if (index >= 0)
|
||||
return new ALSAAudioIODevice (deviceName,
|
||||
inputIds [inputIndex],
|
||||
return new ALSAAudioIODevice (deviceName,
|
||||
inputIds [inputIndex],
|
||||
outputIds [outputIndex]);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ static void sig_handler (int sig)
|
|||
void MessageManager::doPlatformSpecificInitialisation()
|
||||
{
|
||||
// Initialise xlib for multiple thread support
|
||||
static bool initThreadCalled = false;
|
||||
static bool initThreadCalled = false;
|
||||
|
||||
if (! initThreadCalled)
|
||||
{
|
||||
|
|
@ -168,10 +168,10 @@ void MessageManager::doPlatformSpecificInitialisation()
|
|||
|
||||
if (juce_isRunningAsApplication())
|
||||
Process::terminate();
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
initThreadCalled = true;
|
||||
}
|
||||
|
||||
|
|
@ -212,7 +212,7 @@ void MessageManager::doPlatformSpecificInitialisation()
|
|||
|
||||
if (juce_isRunningAsApplication())
|
||||
Process::terminate();
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -247,11 +247,11 @@ void MessageManager::doPlatformSpecificShutdown()
|
|||
{
|
||||
XDestroyWindow (display, juce_messageWindowHandle);
|
||||
XCloseDisplay (display);
|
||||
|
||||
|
||||
// reset pointers
|
||||
juce_messageWindowHandle = 0;
|
||||
display = 0;
|
||||
|
||||
|
||||
// Restore original error handlers
|
||||
XSetIOErrorHandler (oldIOErrorHandler);
|
||||
oldIOErrorHandler = 0;
|
||||
|
|
@ -350,7 +350,7 @@ bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
|
|||
|
||||
if (juce_isRunningAsApplication())
|
||||
Process::terminate();
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,9 +49,6 @@ BEGIN_JUCE_NAMESPACE
|
|||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
#include "../../../src/juce_core/io/network/juce_URL.h"
|
||||
|
||||
// we'll borrow the mac's socket-based http streaming code..
|
||||
#include "../../macosx/platform_specific_code/juce_mac_HTTPStream.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
int SystemStats::getMACAddresses (int64* addresses, int maxNum, const bool littleEndian) throw()
|
||||
|
|
@ -103,5 +100,392 @@ bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAdd
|
|||
return false;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
/** A HTTP input stream that uses sockets.
|
||||
*/
|
||||
class JUCE_HTTPSocketStream
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
JUCE_HTTPSocketStream()
|
||||
: readPosition (0),
|
||||
socketHandle (-1),
|
||||
levelsOfRedirection (0),
|
||||
timeoutSeconds (15)
|
||||
{
|
||||
}
|
||||
|
||||
~JUCE_HTTPSocketStream()
|
||||
{
|
||||
closeSocket();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool open (const String& url,
|
||||
const String& headers,
|
||||
const MemoryBlock& postData,
|
||||
const bool isPost,
|
||||
URL::OpenStreamProgressCallback* callback,
|
||||
void* callbackContext,
|
||||
int timeOutMs)
|
||||
{
|
||||
closeSocket();
|
||||
|
||||
uint32 timeOutTime = Time::getMillisecondCounter();
|
||||
|
||||
if (timeOutMs == 0)
|
||||
timeOutTime += 60000;
|
||||
else if (timeOutMs < 0)
|
||||
timeOutTime = 0xffffffff;
|
||||
else
|
||||
timeOutTime += timeOutMs;
|
||||
|
||||
String hostName, hostPath;
|
||||
int hostPort;
|
||||
|
||||
if (! decomposeURL (url, hostName, hostPath, hostPort))
|
||||
return false;
|
||||
|
||||
const struct hostent* host = 0;
|
||||
int port = 0;
|
||||
|
||||
String proxyName, proxyPath;
|
||||
int proxyPort = 0;
|
||||
|
||||
String proxyURL (getenv ("http_proxy"));
|
||||
if (proxyURL.startsWithIgnoreCase (T("http://")))
|
||||
{
|
||||
if (! decomposeURL (proxyURL, proxyName, proxyPath, proxyPort))
|
||||
return false;
|
||||
|
||||
host = gethostbyname ((const char*) proxyName.toUTF8());
|
||||
port = proxyPort;
|
||||
}
|
||||
else
|
||||
{
|
||||
host = gethostbyname ((const char*) hostName.toUTF8());
|
||||
port = hostPort;
|
||||
}
|
||||
|
||||
if (host == 0)
|
||||
return false;
|
||||
|
||||
struct sockaddr_in address;
|
||||
zerostruct (address);
|
||||
memcpy ((void*) &address.sin_addr, (const void*) host->h_addr, host->h_length);
|
||||
address.sin_family = host->h_addrtype;
|
||||
address.sin_port = htons (port);
|
||||
|
||||
socketHandle = socket (host->h_addrtype, SOCK_STREAM, 0);
|
||||
|
||||
if (socketHandle == -1)
|
||||
return false;
|
||||
|
||||
int receiveBufferSize = 16384;
|
||||
setsockopt (socketHandle, SOL_SOCKET, SO_RCVBUF, (char*) &receiveBufferSize, sizeof (receiveBufferSize));
|
||||
setsockopt (socketHandle, SOL_SOCKET, SO_KEEPALIVE, 0, 0);
|
||||
|
||||
#if JUCE_MAC
|
||||
setsockopt (socketHandle, SOL_SOCKET, SO_NOSIGPIPE, 0, 0);
|
||||
#endif
|
||||
|
||||
if (connect (socketHandle, (struct sockaddr*) &address, sizeof (address)) == -1)
|
||||
{
|
||||
closeSocket();
|
||||
return false;
|
||||
}
|
||||
|
||||
const MemoryBlock requestHeader (createRequestHeader (hostName, hostPort,
|
||||
proxyName, proxyPort,
|
||||
hostPath, url,
|
||||
headers, postData,
|
||||
isPost));
|
||||
int totalHeaderSent = 0;
|
||||
|
||||
while (totalHeaderSent < requestHeader.getSize())
|
||||
{
|
||||
if (Time::getMillisecondCounter() > timeOutTime)
|
||||
{
|
||||
closeSocket();
|
||||
return false;
|
||||
}
|
||||
|
||||
const int numToSend = jmin (1024, requestHeader.getSize() - totalHeaderSent);
|
||||
|
||||
if (send (socketHandle,
|
||||
((const char*) requestHeader.getData()) + totalHeaderSent,
|
||||
numToSend, 0)
|
||||
!= numToSend)
|
||||
{
|
||||
closeSocket();
|
||||
return false;
|
||||
}
|
||||
|
||||
totalHeaderSent += numToSend;
|
||||
|
||||
if (callback != 0 && ! callback (callbackContext, totalHeaderSent, requestHeader.getSize()))
|
||||
{
|
||||
closeSocket();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const String responseHeader (readResponse (timeOutTime));
|
||||
|
||||
if (responseHeader.isNotEmpty())
|
||||
{
|
||||
//DBG (responseHeader);
|
||||
|
||||
StringArray lines;
|
||||
lines.addLines (responseHeader);
|
||||
|
||||
// NB - using charToString() here instead of just T(" "), because that was
|
||||
// causing a mysterious gcc internal compiler error...
|
||||
const int statusCode = responseHeader.fromFirstOccurrenceOf (String::charToString (T(' ')), false, false)
|
||||
.substring (0, 3)
|
||||
.getIntValue();
|
||||
|
||||
//int contentLength = findHeaderItem (lines, T("Content-Length:")).getIntValue();
|
||||
//bool isChunked = findHeaderItem (lines, T("Transfer-Encoding:")).equalsIgnoreCase ("chunked");
|
||||
|
||||
String location (findHeaderItem (lines, T("Location:")));
|
||||
|
||||
if (statusCode >= 300 && statusCode < 400
|
||||
&& location.isNotEmpty())
|
||||
{
|
||||
if (! location.startsWithIgnoreCase (T("http://")))
|
||||
location = T("http://") + location;
|
||||
|
||||
if (levelsOfRedirection++ < 3)
|
||||
return open (location, headers, postData, isPost, callback, callbackContext, timeOutMs);
|
||||
}
|
||||
else
|
||||
{
|
||||
levelsOfRedirection = 0;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
closeSocket();
|
||||
return false;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
int read (void* buffer, int bytesToRead)
|
||||
{
|
||||
fd_set readbits;
|
||||
FD_ZERO (&readbits);
|
||||
FD_SET (socketHandle, &readbits);
|
||||
|
||||
struct timeval tv;
|
||||
tv.tv_sec = timeoutSeconds;
|
||||
tv.tv_usec = 0;
|
||||
|
||||
if (select (socketHandle + 1, &readbits, 0, 0, &tv) <= 0)
|
||||
return 0; // (timeout)
|
||||
|
||||
const int bytesRead = jmax (0, recv (socketHandle, buffer, bytesToRead, MSG_WAITALL));
|
||||
readPosition += bytesRead;
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
int readPosition;
|
||||
|
||||
//==============================================================================
|
||||
juce_UseDebuggingNewOperator
|
||||
|
||||
private:
|
||||
int socketHandle, levelsOfRedirection;
|
||||
const int timeoutSeconds;
|
||||
|
||||
//==============================================================================
|
||||
void closeSocket()
|
||||
{
|
||||
if (socketHandle >= 0)
|
||||
close (socketHandle);
|
||||
|
||||
socketHandle = -1;
|
||||
}
|
||||
|
||||
const MemoryBlock createRequestHeader (const String& hostName,
|
||||
const int hostPort,
|
||||
const String& proxyName,
|
||||
const int proxyPort,
|
||||
const String& hostPath,
|
||||
const String& originalURL,
|
||||
const String& headers,
|
||||
const MemoryBlock& postData,
|
||||
const bool isPost)
|
||||
{
|
||||
String header (isPost ? "POST " : "GET ");
|
||||
|
||||
if (proxyName.isEmpty())
|
||||
{
|
||||
header << hostPath << " HTTP/1.0\r\nHost: "
|
||||
<< hostName << ':' << hostPort;
|
||||
}
|
||||
else
|
||||
{
|
||||
header << originalURL << " HTTP/1.0\r\nHost: "
|
||||
<< proxyName << ':' << proxyPort;
|
||||
}
|
||||
|
||||
header << "\r\nUser-Agent: JUCE/"
|
||||
<< JUCE_MAJOR_VERSION << '.' << JUCE_MINOR_VERSION
|
||||
<< "\r\nConnection: Close\r\nContent-Length: "
|
||||
<< postData.getSize() << "\r\n"
|
||||
<< headers << "\r\n";
|
||||
|
||||
MemoryBlock mb;
|
||||
mb.append (header.toUTF8(), (int) strlen (header.toUTF8()));
|
||||
mb.append (postData.getData(), postData.getSize());
|
||||
|
||||
return mb;
|
||||
}
|
||||
|
||||
const String readResponse (const uint32 timeOutTime)
|
||||
{
|
||||
int bytesRead = 0, numConsecutiveLFs = 0;
|
||||
MemoryBlock buffer (1024, true);
|
||||
|
||||
while (numConsecutiveLFs < 2 && bytesRead < 32768
|
||||
&& Time::getMillisecondCounter() <= timeOutTime)
|
||||
{
|
||||
fd_set readbits;
|
||||
FD_ZERO (&readbits);
|
||||
FD_SET (socketHandle, &readbits);
|
||||
|
||||
struct timeval tv;
|
||||
tv.tv_sec = timeoutSeconds;
|
||||
tv.tv_usec = 0;
|
||||
|
||||
if (select (socketHandle + 1, &readbits, 0, 0, &tv) <= 0)
|
||||
return String::empty; // (timeout)
|
||||
|
||||
buffer.ensureSize (bytesRead + 8, true);
|
||||
char* const dest = (char*) buffer.getData() + bytesRead;
|
||||
|
||||
if (recv (socketHandle, dest, 1, 0) == -1)
|
||||
return String::empty;
|
||||
|
||||
const char lastByte = *dest;
|
||||
++bytesRead;
|
||||
|
||||
if (lastByte == '\n')
|
||||
++numConsecutiveLFs;
|
||||
else if (lastByte != '\r')
|
||||
numConsecutiveLFs = 0;
|
||||
}
|
||||
|
||||
const String header (String::fromUTF8 ((const uint8*) buffer.getData()));
|
||||
|
||||
if (header.startsWithIgnoreCase (T("HTTP/")))
|
||||
return header.trimEnd();
|
||||
|
||||
return String::empty;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
static bool decomposeURL (const String& url,
|
||||
String& host, String& path, int& port)
|
||||
{
|
||||
if (! url.startsWithIgnoreCase (T("http://")))
|
||||
return false;
|
||||
|
||||
const int nextSlash = url.indexOfChar (7, '/');
|
||||
int nextColon = url.indexOfChar (7, ':');
|
||||
if (nextColon > nextSlash && nextSlash > 0)
|
||||
nextColon = -1;
|
||||
|
||||
if (nextColon >= 0)
|
||||
{
|
||||
host = url.substring (7, nextColon);
|
||||
|
||||
if (nextSlash >= 0)
|
||||
port = url.substring (nextColon + 1, nextSlash).getIntValue();
|
||||
else
|
||||
port = url.substring (nextColon + 1).getIntValue();
|
||||
}
|
||||
else
|
||||
{
|
||||
port = 80;
|
||||
|
||||
if (nextSlash >= 0)
|
||||
host = url.substring (7, nextSlash);
|
||||
else
|
||||
host = url.substring (7);
|
||||
}
|
||||
|
||||
if (nextSlash >= 0)
|
||||
path = url.substring (nextSlash);
|
||||
else
|
||||
path = T("/");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
static const String findHeaderItem (const StringArray& lines, const String& itemName)
|
||||
{
|
||||
for (int i = 0; i < lines.size(); ++i)
|
||||
if (lines[i].startsWithIgnoreCase (itemName))
|
||||
return lines[i].substring (itemName.length()).trim();
|
||||
|
||||
return String::empty;
|
||||
}
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
bool juce_isOnLine()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void* juce_openInternetFile (const String& url,
|
||||
const String& headers,
|
||||
const MemoryBlock& postData,
|
||||
const bool isPost,
|
||||
URL::OpenStreamProgressCallback* callback,
|
||||
void* callbackContext,
|
||||
int timeOutMs)
|
||||
{
|
||||
JUCE_HTTPSocketStream* const s = new JUCE_HTTPSocketStream();
|
||||
|
||||
if (s->open (url, headers, postData, isPost,
|
||||
callback, callbackContext, timeOutMs))
|
||||
return s;
|
||||
|
||||
delete s;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void juce_closeInternetFile (void* handle)
|
||||
{
|
||||
JUCE_HTTPSocketStream* const s = (JUCE_HTTPSocketStream*) handle;
|
||||
|
||||
if (s != 0)
|
||||
delete s;
|
||||
}
|
||||
|
||||
int juce_readFromInternetFile (void* handle, void* buffer, int bytesToRead)
|
||||
{
|
||||
JUCE_HTTPSocketStream* const s = (JUCE_HTTPSocketStream*) handle;
|
||||
|
||||
if (s != 0)
|
||||
return s->read (buffer, bytesToRead);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int juce_seekInInternetFile (void* handle, int newPosition)
|
||||
{
|
||||
JUCE_HTTPSocketStream* const s = (JUCE_HTTPSocketStream*) handle;
|
||||
|
||||
if (s != 0)
|
||||
return s->readPosition;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
#include "../../../src/juce_core/threads/juce_Process.h"
|
||||
#include "../../../src/juce_core/io/files/juce_File.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
|
||||
//==============================================================================
|
||||
/*
|
||||
|
|
@ -90,9 +91,9 @@ void juce_setCurrentThreadName (const String& /*name*/) throw()
|
|||
{
|
||||
}
|
||||
|
||||
int Thread::getCurrentThreadId() throw()
|
||||
int64 Thread::getCurrentThreadId() throw()
|
||||
{
|
||||
return (int) pthread_self();
|
||||
return pthread_self();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -255,17 +256,17 @@ void Process::lowerPrivilege()
|
|||
}
|
||||
|
||||
#if JUCE_BUILD_GUI_CLASSES
|
||||
void* Process::loadDynamicLibrary (const String& name)
|
||||
void* PlatformUtilities::loadDynamicLibrary (const String& name)
|
||||
{
|
||||
return dlopen ((const char*) name.toUTF8(), RTLD_LOCAL | RTLD_NOW);
|
||||
}
|
||||
|
||||
void Process::freeDynamicLibrary (void* handle)
|
||||
void PlatformUtilities::freeDynamicLibrary (void* handle)
|
||||
{
|
||||
dlclose(handle);
|
||||
}
|
||||
|
||||
void* Process::getProcedureEntryPoint (void* libraryHandle, const String& procedureName)
|
||||
void* PlatformUtilities::getProcedureEntryPoint (void* libraryHandle, const String& procedureName)
|
||||
{
|
||||
return dlsym (libraryHandle, (const char*) procedureName);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
#include "../../../src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h"
|
||||
|
||||
#if JUCE_WEB_BROWSER
|
||||
|
||||
/*
|
||||
Sorry.. This class isn't implemented on Linux!
|
||||
|
|
@ -113,10 +114,6 @@ void WebBrowserComponent::parentHierarchyChanged()
|
|||
checkWindowAssociation();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::moved()
|
||||
{
|
||||
}
|
||||
|
||||
void WebBrowserComponent::resized()
|
||||
{
|
||||
}
|
||||
|
|
@ -131,5 +128,5 @@ bool WebBrowserComponent::pageAboutToLoad (const String& url)
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
END_JUCE_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ static Pixmap juce_createColourPixmapFromImage (Display* display, const Image& i
|
|||
XImage* ximage = XCreateImage (display, CopyFromParent, 24, ZPixmap,
|
||||
0, (char*) colour, width, height, 32, 0);
|
||||
|
||||
Pixmap pixmap = XCreatePixmap (display, DefaultRootWindow (display),
|
||||
Pixmap pixmap = XCreatePixmap (display, DefaultRootWindow (display),
|
||||
width, height, 24);
|
||||
|
||||
GC gc = XCreateGC (display, pixmap, 0, 0);
|
||||
|
|
@ -1184,7 +1184,7 @@ public:
|
|||
wmHints->icon_mask = juce_createMaskPixmapFromImage (display, newIcon);
|
||||
|
||||
XSetWMHints (display, windowH, wmHints);
|
||||
XFree (wmHints);
|
||||
XFree (wmHints);
|
||||
|
||||
XSync (display, False);
|
||||
}
|
||||
|
|
@ -1754,7 +1754,7 @@ public:
|
|||
trayAtom = XInternAtom (display, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", false);
|
||||
XChangeProperty (display, windowH, trayAtom, XA_WINDOW, 32, PropModeReplace, (unsigned char*) &windowH, 1);
|
||||
|
||||
// a minimum size must be specified for GNOME and Xfce, otherwise the icon is displayed with a width of 1
|
||||
// a minimum size must be specified for GNOME and Xfce, otherwise the icon is displayed with a width of 1
|
||||
XSizeHints* hints = XAllocSizeHints();
|
||||
hints->flags = PMinSize;
|
||||
hints->min_width = 22;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
84022DFD0DAE4CB9004CF59A /* juce_mac_HTTPStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 84022DFB0DAE4CB9004CF59A /* juce_mac_HTTPStream.h */; };
|
||||
84052DE408D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84052DE208D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp */; };
|
||||
84052DE508D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84052DE308D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h */; };
|
||||
8406AA5A0C4BDF90003A0D6A /* juce_MidiOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8406AA590C4BDF90003A0D6A /* juce_MidiOutput.cpp */; };
|
||||
|
|
@ -34,11 +33,10 @@
|
|||
84198B14096D8E2B0022A439 /* juce_MidiOutput.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198B0E096D8E2B0022A439 /* juce_MidiOutput.h */; };
|
||||
84198BB5096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */; };
|
||||
84198BB6096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */; };
|
||||
841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp */; };
|
||||
841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm */; };
|
||||
841B22E30D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */; };
|
||||
841B22E40D2E7FE3009D01AA /* juce_DirectXPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */; };
|
||||
841B22E50D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */; };
|
||||
841B22E60D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22D20D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp */; };
|
||||
841B22E70D2E7FE3009D01AA /* juce_VSTPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */; };
|
||||
841B22E80D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841B22D40D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp */; };
|
||||
841B22E90D2E7FE3009D01AA /* juce_AudioPluginFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 841B22D50D2E7FE3009D01AA /* juce_AudioPluginFormat.h */; };
|
||||
|
|
@ -79,18 +77,19 @@
|
|||
842F9D6E0A19C9AF00B1358D /* juce_TextPropertyComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9D620A19C9AF00B1358D /* juce_TextPropertyComponent.h */; };
|
||||
842F9DE20A19D2AF00B1358D /* juce_PositionedRectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842F9DE00A19D2AF00B1358D /* juce_PositionedRectangle.cpp */; };
|
||||
842F9DE30A19D2AF00B1358D /* juce_PositionedRectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 842F9DE10A19D2AF00B1358D /* juce_PositionedRectangle.h */; };
|
||||
8435D90D0E9406D2008FBD1C /* juce_mac_Strings.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8435D90C0E9406D2008FBD1C /* juce_mac_Strings.mm */; };
|
||||
8435D9650E940A3E008FBD1C /* juce_mac_MiscUtilities.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8435D9640E940A3E008FBD1C /* juce_mac_MiscUtilities.mm */; };
|
||||
8435DA420E95527D008FBD1C /* juce_mac_Debugging.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8435DA410E95527D008FBD1C /* juce_mac_Debugging.mm */; };
|
||||
8440CD3E0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */; };
|
||||
8440CD3F0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */; };
|
||||
8440CD620ACD112E0086FFD7 /* juce_SliderListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */; };
|
||||
8457783E0E8947C8006D9E4E /* juce_NSViewComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8457783D0E8947C8006D9E4E /* juce_NSViewComponent.h */; };
|
||||
84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */; };
|
||||
84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */; };
|
||||
846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */; };
|
||||
846034DF09CB374E00E255CF /* juce_InterprocessConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */; };
|
||||
846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */; };
|
||||
846034E109CB374E00E255CF /* juce_InterprocessConnectionServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 846034DD09CB374E00E255CF /* juce_InterprocessConnectionServer.h */; };
|
||||
8463D3220E1FC25A003B46B2 /* juce_mac_Fonts.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8463D31F0E1FC25A003B46B2 /* juce_mac_Fonts.mm */; };
|
||||
8463D3230E1FC25A003B46B2 /* juce_mac_Messaging.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8463D3200E1FC25A003B46B2 /* juce_mac_Messaging.mm */; };
|
||||
8463D3240E1FC25A003B46B2 /* juce_mac_Windowing.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8463D3210E1FC25A003B46B2 /* juce_mac_Windowing.mm */; };
|
||||
8463D5C1098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5B5098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp */; };
|
||||
8463D5C2098BD2DD00F9AEC2 /* juce_MidiBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8463D5B6098BD2DD00F9AEC2 /* juce_MidiBuffer.h */; };
|
||||
8463D5C3098BD2DD00F9AEC2 /* juce_MidiFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8463D5B7098BD2DD00F9AEC2 /* juce_MidiFile.cpp */; };
|
||||
|
|
@ -115,12 +114,10 @@
|
|||
846927DF0A49ABE600314975 /* juce_RectanglePlacement.h in Headers */ = {isa = PBXBuildFile; fileRef = 846927DD0A49ABE600314975 /* juce_RectanglePlacement.h */; };
|
||||
846927E10A49ABFD00314975 /* juce_SVGParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846927E00A49ABFD00314975 /* juce_SVGParser.cpp */; };
|
||||
847824810D7816A00082A5C5 /* juce_AudioCDBurner.h in Headers */ = {isa = PBXBuildFile; fileRef = 8478247F0D7816A00082A5C5 /* juce_AudioCDBurner.h */; };
|
||||
847D06470DD88D1100DF6A61 /* juce_mac_Network.mm in Sources */ = {isa = PBXBuildFile; fileRef = 847D06460DD88D1100DF6A61 /* juce_mac_Network.mm */; };
|
||||
847F72DB0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F72D70C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp */; };
|
||||
847F72DC0C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 847F72D80C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h */; };
|
||||
847F72DD0C2702A000CBECEC /* juce_FileTreeComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F72D90C2702A000CBECEC /* juce_FileTreeComponent.cpp */; };
|
||||
847F72DE0C2702A000CBECEC /* juce_FileTreeComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 847F72DA0C2702A000CBECEC /* juce_FileTreeComponent.h */; };
|
||||
848A560B0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848A560A0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm */; };
|
||||
848A560E0DDDD3FB0041C706 /* juce_WebBrowserComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */; };
|
||||
8495BB8C0D8067B2001D9C0B /* juce_AudioThumbnail.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8495BB880D8067B2001D9C0B /* juce_AudioThumbnail.cpp */; };
|
||||
8495BB8D0D8067B2001D9C0B /* juce_AudioThumbnail.h in Headers */ = {isa = PBXBuildFile; fileRef = 8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */; };
|
||||
|
|
@ -132,11 +129,6 @@
|
|||
84A06BAD09CAD6A3006A43BD /* juce_AudioIODevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BAA09CAD6A3006A43BD /* juce_AudioIODevice.cpp */; };
|
||||
84A06BAE09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BAB09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp */; };
|
||||
84A06BAF09CAD6A3006A43BD /* juce_AudioIODeviceType.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A06BAC09CAD6A3006A43BD /* juce_AudioIODeviceType.h */; };
|
||||
84A06BE309CADB06006A43BD /* juce_mac_NamedPipe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BE209CADB06006A43BD /* juce_mac_NamedPipe.cpp */; };
|
||||
84A4882908A22E2400752A2B /* juce_mac_CoreAudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4881E08A22E2400752A2B /* juce_mac_CoreAudio.cpp */; };
|
||||
84A4882A08A22E2400752A2B /* juce_mac_CoreMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4881F08A22E2400752A2B /* juce_mac_CoreMidi.cpp */; };
|
||||
84A4882C08A22E2400752A2B /* juce_mac_Files.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4882108A22E2400752A2B /* juce_mac_Files.cpp */; };
|
||||
84A4883108A22E2400752A2B /* juce_mac_Threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4882608A22E2400752A2B /* juce_mac_Threads.cpp */; };
|
||||
84A48A2808A22E4B00752A2B /* juce_Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883508A22E4900752A2B /* juce_Application.cpp */; };
|
||||
84A48A2908A22E4B00752A2B /* juce_Application.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A4883608A22E4900752A2B /* juce_Application.h */; };
|
||||
84A48A2A08A22E4B00752A2B /* juce_DeletedAtShutdown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A4883708A22E4900752A2B /* juce_DeletedAtShutdown.cpp */; };
|
||||
|
|
@ -288,7 +280,6 @@
|
|||
84A48ACE08A22E4B00752A2B /* juce_OpenGLComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */; };
|
||||
84A48ACF08A22E4B00752A2B /* juce_PreferencesPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */; };
|
||||
84A48AD008A22E4B00752A2B /* juce_PreferencesPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */; };
|
||||
84A48AD108A22E4B00752A2B /* juce_QuickTimeMovieComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EC08A22E4900752A2B /* juce_QuickTimeMovieComponent.cpp */; };
|
||||
84A48AD208A22E4B00752A2B /* juce_QuickTimeMovieComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */; };
|
||||
84A48AD308A22E4B00752A2B /* juce_AlertWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A488EF08A22E4900752A2B /* juce_AlertWindow.cpp */; };
|
||||
84A48AD408A22E4B00752A2B /* juce_AlertWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A488F008A22E4900752A2B /* juce_AlertWindow.h */; };
|
||||
|
|
@ -490,12 +481,32 @@
|
|||
84BC4E2E0C8DD38C00FA249B /* juce_AudioProcessorListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E260C8DD38C00FA249B /* juce_AudioProcessorListener.h */; };
|
||||
84BC4E2F0C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BC4E270C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp */; };
|
||||
84BC4E300C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BC4E280C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h */; };
|
||||
84BE9E1C0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84BE9E1B0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm */; };
|
||||
84C0EA5E0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C0EA5C0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp */; };
|
||||
84C0EA5F0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C0EA5D0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h */; };
|
||||
84CE8A410DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CE8A400DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm */; };
|
||||
84CA4AF40E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84CA4AF30E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm */; };
|
||||
84D296BD09B763190026C535 /* juce_PropertiesFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84D296BB09B763190026C535 /* juce_PropertiesFile.cpp */; };
|
||||
84D296BE09B763190026C535 /* juce_PropertiesFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D296BC09B763190026C535 /* juce_PropertiesFile.h */; };
|
||||
84E024F10E94028C003E41AF /* juce_mac_AppleRemote.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DB0E94028C003E41AF /* juce_mac_AppleRemote.mm */; };
|
||||
84E024F20E94028C003E41AF /* juce_mac_AudioCDBurner.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DC0E94028C003E41AF /* juce_mac_AudioCDBurner.mm */; };
|
||||
84E024F30E94028C003E41AF /* juce_mac_CoreAudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DD0E94028C003E41AF /* juce_mac_CoreAudio.cpp */; };
|
||||
84E024F40E94028C003E41AF /* juce_mac_CoreMidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DE0E94028C003E41AF /* juce_mac_CoreMidi.cpp */; };
|
||||
84E024F50E94028C003E41AF /* juce_mac_FileChooser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024DF0E94028C003E41AF /* juce_mac_FileChooser.mm */; };
|
||||
84E024F60E94028C003E41AF /* juce_mac_Files.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E00E94028C003E41AF /* juce_mac_Files.mm */; };
|
||||
84E024F70E94028C003E41AF /* juce_mac_Fonts.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E10E94028C003E41AF /* juce_mac_Fonts.mm */; };
|
||||
84E024F80E94028C003E41AF /* juce_mac_MainMenu.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E20E94028C003E41AF /* juce_mac_MainMenu.mm */; };
|
||||
84E024F90E94028C003E41AF /* juce_mac_MessageManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E30E94028C003E41AF /* juce_mac_MessageManager.mm */; };
|
||||
84E024FA0E94028C003E41AF /* juce_mac_MouseCursor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E40E94028C003E41AF /* juce_mac_MouseCursor.mm */; };
|
||||
84E024FB0E94028C003E41AF /* juce_mac_NamedPipe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E50E94028C003E41AF /* juce_mac_NamedPipe.cpp */; };
|
||||
84E024FC0E94028C003E41AF /* juce_mac_NativeCode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E60E94028C003E41AF /* juce_mac_NativeCode.mm */; };
|
||||
84E024FE0E94028C003E41AF /* juce_mac_Network.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E80E94028C003E41AF /* juce_mac_Network.mm */; };
|
||||
84E024FF0E94028C003E41AF /* juce_mac_NSViewComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024E90E94028C003E41AF /* juce_mac_NSViewComponent.mm */; };
|
||||
84E025000E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EA0E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm */; };
|
||||
84E025010E94028C003E41AF /* juce_mac_OpenGLComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EB0E94028C003E41AF /* juce_mac_OpenGLComponent.mm */; };
|
||||
84E025020E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EC0E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm */; };
|
||||
84E025030E94028C003E41AF /* juce_mac_SystemStats.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024ED0E94028C003E41AF /* juce_mac_SystemStats.mm */; };
|
||||
84E025040E94028C003E41AF /* juce_mac_Threads.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EE0E94028C003E41AF /* juce_mac_Threads.mm */; };
|
||||
84E025050E94028C003E41AF /* juce_mac_WebBrowserComponent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E024EF0E94028C003E41AF /* juce_mac_WebBrowserComponent.mm */; };
|
||||
84E025060E94028C003E41AF /* juce_posix_SharedCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E024F00E94028C003E41AF /* juce_posix_SharedCode.h */; };
|
||||
84E8209409729D2A0097675B /* juce_AudioFormatManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E8209209729D2A0097675B /* juce_AudioFormatManager.cpp */; };
|
||||
84E8209509729D2A0097675B /* juce_AudioFormatManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 84E8209309729D2A0097675B /* juce_AudioFormatManager.h */; };
|
||||
84F1B8DA09499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */; };
|
||||
|
|
@ -529,10 +540,8 @@
|
|||
84F593AE09855679008153BA /* juce_DocumentWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F593AC09855679008153BA /* juce_DocumentWindow.cpp */; };
|
||||
84F593AF09855679008153BA /* juce_DocumentWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F593AD09855679008153BA /* juce_DocumentWindow.h */; };
|
||||
84F593B109855693008153BA /* juce_LassoComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F593B009855693008153BA /* juce_LassoComponent.h */; };
|
||||
84F597000E23DDBB00E92E85 /* juce_mac_NativeHeaders.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F596FF0E23DDBB00E92E85 /* juce_mac_NativeHeaders.h */; };
|
||||
84F6B7540C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B7520C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp */; };
|
||||
84F6B7550C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F6B7530C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h */; };
|
||||
84F703230E1E56FB00EB338A /* juce_mac_FileChooser.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84F703220E1E56FB00EB338A /* juce_mac_FileChooser.mm */; };
|
||||
84F7A7AF0A8383A100D36246 /* juce_ToolbarButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7AD0A8383A100D36246 /* juce_ToolbarButton.cpp */; };
|
||||
84F7A7B00A8383A100D36246 /* juce_ToolbarButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7AE0A8383A100D36246 /* juce_ToolbarButton.h */; };
|
||||
84F7A7B80A8383C200D36246 /* juce_Toolbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7B10A8383C200D36246 /* juce_Toolbar.cpp */; };
|
||||
|
|
@ -546,6 +555,7 @@
|
|||
84F7A7C20A8383E000D36246 /* juce_MultiTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7C00A8383E000D36246 /* juce_MultiTimer.h */; };
|
||||
84F7A7EF0A838CC900D36246 /* juce_ComponentAnimator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F7A7ED0A838CC900D36246 /* juce_ComponentAnimator.cpp */; };
|
||||
84F7A7F00A838CC900D36246 /* juce_ComponentAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F7A7EE0A838CC900D36246 /* juce_ComponentAnimator.h */; };
|
||||
84F8B60D0EB5B9230020D98D /* juce_mac_NativeIncludes.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F8B60C0EB5B9230020D98D /* juce_mac_NativeIncludes.h */; };
|
||||
84F8DAD0099C963A00E911ED /* juce_ComponentPeer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F8DACE099C963A00E911ED /* juce_ComponentPeer.cpp */; };
|
||||
84F8DAD1099C963A00E911ED /* juce_ComponentPeer.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F8DACF099C963A00E911ED /* juce_ComponentPeer.h */; };
|
||||
84FC318F09B749FD00B75141 /* juce_FileBasedDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FC318709B749FD00B75141 /* juce_FileBasedDocument.cpp */; };
|
||||
|
|
@ -582,7 +592,6 @@
|
|||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
84022DFB0DAE4CB9004CF59A /* juce_mac_HTTPStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_mac_HTTPStream.h; sourceTree = "<group>"; };
|
||||
84052DE208D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToneGeneratorAudioSource.cpp; sourceTree = "<group>"; };
|
||||
84052DE308D095D200BEC0F0 /* juce_ToneGeneratorAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToneGeneratorAudioSource.h; sourceTree = "<group>"; };
|
||||
8406AA590C4BDF90003A0D6A /* juce_MidiOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MidiOutput.cpp; sourceTree = "<group>"; };
|
||||
|
|
@ -609,11 +618,10 @@
|
|||
84198B0E096D8E2B0022A439 /* juce_MidiOutput.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MidiOutput.h; sourceTree = "<group>"; };
|
||||
84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioDeviceSelectorComponent.cpp; sourceTree = "<group>"; };
|
||||
84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioDeviceSelectorComponent.h; sourceTree = "<group>"; };
|
||||
841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioUnitPluginFormat.cpp; sourceTree = "<group>"; };
|
||||
841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 2; path = juce_AudioUnitPluginFormat.mm; sourceTree = "<group>"; };
|
||||
841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioUnitPluginFormat.h; sourceTree = "<group>"; };
|
||||
841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_DirectXPluginFormat.h; sourceTree = "<group>"; };
|
||||
841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LADSPAPluginFormat.h; sourceTree = "<group>"; };
|
||||
841B22D20D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_VSTPluginFormat.cpp; sourceTree = "<group>"; };
|
||||
841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_VSTPluginFormat.h; sourceTree = "<group>"; };
|
||||
841B22D40D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioPluginFormat.cpp; sourceTree = "<group>"; };
|
||||
841B22D50D2E7FE3009D01AA /* juce_AudioPluginFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPluginFormat.h; sourceTree = "<group>"; };
|
||||
|
|
@ -639,7 +647,6 @@
|
|||
842B63B709D8508F00255DC7 /* juce_FlacAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_FlacAudioFormat.h; sourceTree = "<group>"; };
|
||||
842B63B809D8508F00255DC7 /* juce_OggVorbisAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_OggVorbisAudioFormat.cpp; sourceTree = "<group>"; };
|
||||
842B63B909D8508F00255DC7 /* juce_OggVorbisAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_OggVorbisAudioFormat.h; sourceTree = "<group>"; };
|
||||
842B64EA09D87B7900255DC7 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = juce.xcconfig; sourceTree = "<group>"; };
|
||||
842D3D0D0C0D7CF200E9FFE4 /* juce_MenuBarModel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MenuBarModel.cpp; sourceTree = "<group>"; };
|
||||
842F9D570A19C9AF00B1358D /* juce_ButtonPropertyComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ButtonPropertyComponent.cpp; sourceTree = "<group>"; };
|
||||
842F9D580A19C9AF00B1358D /* juce_ButtonPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ButtonPropertyComponent.h; sourceTree = "<group>"; };
|
||||
|
|
@ -655,20 +662,21 @@
|
|||
842F9D620A19C9AF00B1358D /* juce_TextPropertyComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_TextPropertyComponent.h; sourceTree = "<group>"; };
|
||||
842F9DE00A19D2AF00B1358D /* juce_PositionedRectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PositionedRectangle.cpp; sourceTree = "<group>"; };
|
||||
842F9DE10A19D2AF00B1358D /* juce_PositionedRectangle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PositionedRectangle.h; sourceTree = "<group>"; };
|
||||
8435D90C0E9406D2008FBD1C /* juce_mac_Strings.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Strings.mm; sourceTree = "<group>"; };
|
||||
8435D9640E940A3E008FBD1C /* juce_mac_MiscUtilities.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_MiscUtilities.mm; sourceTree = "<group>"; };
|
||||
8435DA410E95527D008FBD1C /* juce_mac_Debugging.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Debugging.mm; sourceTree = "<group>"; };
|
||||
8440CD3C0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentMovementWatcher.cpp; sourceTree = "<group>"; };
|
||||
8440CD3D0ACD0FFC0086FFD7 /* juce_ComponentMovementWatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentMovementWatcher.h; sourceTree = "<group>"; };
|
||||
8440CD610ACD112E0086FFD7 /* juce_SliderListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_SliderListener.h; sourceTree = "<group>"; };
|
||||
8456EC6508A2A6C80087C412 /* juce_Config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Config.h; path = ../../juce_Config.h; sourceTree = SOURCE_ROOT; };
|
||||
8456EC6908A2A6F00087C412 /* JUCE changelist.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "JUCE changelist.txt"; path = "../../docs/JUCE changelist.txt"; sourceTree = SOURCE_ROOT; };
|
||||
8457783D0E8947C8006D9E4E /* juce_NSViewComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_NSViewComponent.h; sourceTree = "<group>"; };
|
||||
84581EE80D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_QuickTimeAudioFormat.cpp; sourceTree = "<group>"; };
|
||||
84581EE90D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_QuickTimeAudioFormat.h; sourceTree = "<group>"; };
|
||||
846034DA09CB374E00E255CF /* juce_InterprocessConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnection.cpp; sourceTree = "<group>"; };
|
||||
846034DB09CB374E00E255CF /* juce_InterprocessConnection.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnection.h; sourceTree = "<group>"; };
|
||||
846034DC09CB374E00E255CF /* juce_InterprocessConnectionServer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_InterprocessConnectionServer.cpp; sourceTree = "<group>"; };
|
||||
846034DD09CB374E00E255CF /* juce_InterprocessConnectionServer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_InterprocessConnectionServer.h; sourceTree = "<group>"; };
|
||||
8463D31F0E1FC25A003B46B2 /* juce_mac_Fonts.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Fonts.mm; sourceTree = "<group>"; };
|
||||
8463D3200E1FC25A003B46B2 /* juce_mac_Messaging.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Messaging.mm; sourceTree = "<group>"; };
|
||||
8463D3210E1FC25A003B46B2 /* juce_mac_Windowing.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Windowing.mm; sourceTree = "<group>"; };
|
||||
8463D5B5098BD2DD00F9AEC2 /* juce_MidiBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiBuffer.cpp; path = midi/juce_MidiBuffer.cpp; sourceTree = "<group>"; };
|
||||
8463D5B6098BD2DD00F9AEC2 /* juce_MidiBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_MidiBuffer.h; path = midi/juce_MidiBuffer.h; sourceTree = "<group>"; };
|
||||
8463D5B7098BD2DD00F9AEC2 /* juce_MidiFile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_MidiFile.cpp; path = midi/juce_MidiFile.cpp; sourceTree = "<group>"; };
|
||||
|
|
@ -693,12 +701,10 @@
|
|||
846927DD0A49ABE600314975 /* juce_RectanglePlacement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_RectanglePlacement.h; sourceTree = "<group>"; };
|
||||
846927E00A49ABFD00314975 /* juce_SVGParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_SVGParser.cpp; sourceTree = "<group>"; };
|
||||
8478247F0D7816A00082A5C5 /* juce_AudioCDBurner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioCDBurner.h; sourceTree = "<group>"; };
|
||||
847D06460DD88D1100DF6A61 /* juce_mac_Network.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Network.mm; sourceTree = "<group>"; };
|
||||
847F72D70C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DirectoryContentsDisplayComponent.cpp; path = filebrowser/juce_DirectoryContentsDisplayComponent.cpp; sourceTree = "<group>"; };
|
||||
847F72D80C2702A000CBECEC /* juce_DirectoryContentsDisplayComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_DirectoryContentsDisplayComponent.h; path = filebrowser/juce_DirectoryContentsDisplayComponent.h; sourceTree = "<group>"; };
|
||||
847F72D90C2702A000CBECEC /* juce_FileTreeComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileTreeComponent.cpp; path = filebrowser/juce_FileTreeComponent.cpp; sourceTree = "<group>"; };
|
||||
847F72DA0C2702A000CBECEC /* juce_FileTreeComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileTreeComponent.h; path = filebrowser/juce_FileTreeComponent.h; sourceTree = "<group>"; };
|
||||
848A560A0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_WebBrowserComponent.mm; sourceTree = "<group>"; };
|
||||
848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_WebBrowserComponent.h; sourceTree = "<group>"; };
|
||||
8495BB880D8067B2001D9C0B /* juce_AudioThumbnail.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioThumbnail.cpp; sourceTree = "<group>"; };
|
||||
8495BB890D8067B2001D9C0B /* juce_AudioThumbnail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_AudioThumbnail.h; sourceTree = "<group>"; };
|
||||
|
|
@ -710,11 +716,6 @@
|
|||
84A06BAA09CAD6A3006A43BD /* juce_AudioIODevice.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioIODevice.cpp; sourceTree = "<group>"; };
|
||||
84A06BAB09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioIODeviceType.cpp; sourceTree = "<group>"; };
|
||||
84A06BAC09CAD6A3006A43BD /* juce_AudioIODeviceType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioIODeviceType.h; sourceTree = "<group>"; };
|
||||
84A06BE209CADB06006A43BD /* juce_mac_NamedPipe.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_mac_NamedPipe.cpp; sourceTree = "<group>"; };
|
||||
84A4881E08A22E2400752A2B /* juce_mac_CoreAudio.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_CoreAudio.cpp; path = platform_specific_code/juce_mac_CoreAudio.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84A4881F08A22E2400752A2B /* juce_mac_CoreMidi.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_CoreMidi.cpp; path = platform_specific_code/juce_mac_CoreMidi.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84A4882108A22E2400752A2B /* juce_mac_Files.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_Files.cpp; path = platform_specific_code/juce_mac_Files.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84A4882608A22E2400752A2B /* juce_mac_Threads.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_mac_Threads.cpp; path = platform_specific_code/juce_mac_Threads.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84A4883508A22E4900752A2B /* juce_Application.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Application.cpp; path = ../../src/juce_appframework/application/juce_Application.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84A4883608A22E4900752A2B /* juce_Application.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Application.h; path = ../../src/juce_appframework/application/juce_Application.h; sourceTree = SOURCE_ROOT; };
|
||||
84A4883708A22E4900752A2B /* juce_DeletedAtShutdown.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_DeletedAtShutdown.cpp; path = ../../src/juce_appframework/application/juce_DeletedAtShutdown.cpp; sourceTree = SOURCE_ROOT; };
|
||||
|
|
@ -866,7 +867,6 @@
|
|||
84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_OpenGLComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_OpenGLComponent.h; sourceTree = SOURCE_ROOT; };
|
||||
84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_PreferencesPanel.cpp; path = ../../src/juce_appframework/gui/components/special/juce_PreferencesPanel.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_PreferencesPanel.h; path = ../../src/juce_appframework/gui/components/special/juce_PreferencesPanel.h; sourceTree = SOURCE_ROOT; };
|
||||
84A488EC08A22E4900752A2B /* juce_QuickTimeMovieComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_QuickTimeMovieComponent.cpp; path = ../../src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_QuickTimeMovieComponent.h; path = ../../src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h; sourceTree = SOURCE_ROOT; };
|
||||
84A488EF08A22E4900752A2B /* juce_AlertWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AlertWindow.cpp; path = ../../src/juce_appframework/gui/components/windows/juce_AlertWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84A488F008A22E4900752A2B /* juce_AlertWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_AlertWindow.h; path = ../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
|
|
@ -1061,19 +1061,40 @@
|
|||
84A48A2608A22E4A00752A2B /* juce_TimeSliceThread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_TimeSliceThread.h; path = ../../src/juce_core/threads/juce_TimeSliceThread.h; sourceTree = SOURCE_ROOT; };
|
||||
84A48A2708A22E4A00752A2B /* juce_WaitableEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_WaitableEvent.h; path = ../../src/juce_core/threads/juce_WaitableEvent.h; sourceTree = SOURCE_ROOT; };
|
||||
84BC4E210C8DD38C00FA249B /* juce_AudioPlayHead.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioPlayHead.h; sourceTree = "<group>"; };
|
||||
84BC4E220C8DD38C00FA249B /* juce_AudioProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioProcessor.cpp; sourceTree = "<group>"; };
|
||||
84BC4E220C8DD38C00FA249B /* juce_AudioProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 2; path = juce_AudioProcessor.cpp; sourceTree = "<group>"; };
|
||||
84BC4E230C8DD38C00FA249B /* juce_AudioProcessor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessor.h; sourceTree = "<group>"; };
|
||||
84BC4E240C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioProcessorEditor.cpp; sourceTree = "<group>"; };
|
||||
84BC4E250C8DD38C00FA249B /* juce_AudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorEditor.h; sourceTree = "<group>"; };
|
||||
84BC4E260C8DD38C00FA249B /* juce_AudioProcessorListener.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioProcessorListener.h; sourceTree = "<group>"; };
|
||||
84BC4E270C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_GenericAudioProcessorEditor.cpp; sourceTree = "<group>"; };
|
||||
84BC4E280C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_GenericAudioProcessorEditor.h; sourceTree = "<group>"; };
|
||||
84BE9E1B0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_SystemStats.mm; sourceTree = "<group>"; };
|
||||
84C0EA5C0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_IIRFilterAudioSource.cpp; path = ../../src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84C0EA5D0B3DDF2400EDF9D9 /* juce_IIRFilterAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_IIRFilterAudioSource.h; path = ../../src/juce_appframework/audio/audio_sources/juce_IIRFilterAudioSource.h; sourceTree = SOURCE_ROOT; };
|
||||
84CE8A400DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_AudioCDBurner.mm; sourceTree = "<group>"; };
|
||||
84CA4AF30E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_VSTPluginFormat.mm; sourceTree = "<group>"; };
|
||||
84CA4AFA0E9BF9EC004CCC0E /* juce_VSTPluginFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_VSTPluginFormat.cpp; sourceTree = "<group>"; };
|
||||
84D296BB09B763190026C535 /* juce_PropertiesFile.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_PropertiesFile.cpp; sourceTree = "<group>"; };
|
||||
84D296BC09B763190026C535 /* juce_PropertiesFile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_PropertiesFile.h; sourceTree = "<group>"; };
|
||||
84E024DB0E94028C003E41AF /* juce_mac_AppleRemote.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_AppleRemote.mm; sourceTree = "<group>"; };
|
||||
84E024DC0E94028C003E41AF /* juce_mac_AudioCDBurner.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_AudioCDBurner.mm; sourceTree = "<group>"; };
|
||||
84E024DD0E94028C003E41AF /* juce_mac_CoreAudio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_mac_CoreAudio.cpp; sourceTree = "<group>"; };
|
||||
84E024DE0E94028C003E41AF /* juce_mac_CoreMidi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_mac_CoreMidi.cpp; sourceTree = "<group>"; };
|
||||
84E024DF0E94028C003E41AF /* juce_mac_FileChooser.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_FileChooser.mm; sourceTree = "<group>"; };
|
||||
84E024E00E94028C003E41AF /* juce_mac_Files.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Files.mm; sourceTree = "<group>"; };
|
||||
84E024E10E94028C003E41AF /* juce_mac_Fonts.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Fonts.mm; sourceTree = "<group>"; };
|
||||
84E024E20E94028C003E41AF /* juce_mac_MainMenu.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_MainMenu.mm; sourceTree = "<group>"; };
|
||||
84E024E30E94028C003E41AF /* juce_mac_MessageManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_MessageManager.mm; sourceTree = "<group>"; };
|
||||
84E024E40E94028C003E41AF /* juce_mac_MouseCursor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_MouseCursor.mm; sourceTree = "<group>"; };
|
||||
84E024E50E94028C003E41AF /* juce_mac_NamedPipe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = juce_mac_NamedPipe.cpp; sourceTree = "<group>"; };
|
||||
84E024E60E94028C003E41AF /* juce_mac_NativeCode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_NativeCode.mm; sourceTree = "<group>"; };
|
||||
84E024E80E94028C003E41AF /* juce_mac_Network.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Network.mm; sourceTree = "<group>"; };
|
||||
84E024E90E94028C003E41AF /* juce_mac_NSViewComponent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_NSViewComponent.mm; sourceTree = "<group>"; };
|
||||
84E024EA0E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_NSViewComponentPeer.mm; sourceTree = "<group>"; };
|
||||
84E024EB0E94028C003E41AF /* juce_mac_OpenGLComponent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_OpenGLComponent.mm; sourceTree = "<group>"; };
|
||||
84E024EC0E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_QuickTimeMovieComponent.mm; sourceTree = "<group>"; };
|
||||
84E024ED0E94028C003E41AF /* juce_mac_SystemStats.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_SystemStats.mm; sourceTree = "<group>"; };
|
||||
84E024EE0E94028C003E41AF /* juce_mac_Threads.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_Threads.mm; sourceTree = "<group>"; };
|
||||
84E024EF0E94028C003E41AF /* juce_mac_WebBrowserComponent.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_WebBrowserComponent.mm; sourceTree = "<group>"; };
|
||||
84E024F00E94028C003E41AF /* juce_posix_SharedCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_posix_SharedCode.h; sourceTree = "<group>"; };
|
||||
84E8209209729D2A0097675B /* juce_AudioFormatManager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_AudioFormatManager.cpp; sourceTree = "<group>"; };
|
||||
84E8209309729D2A0097675B /* juce_AudioFormatManager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_AudioFormatManager.h; sourceTree = "<group>"; };
|
||||
84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_MidiKeyboardComponent.cpp; sourceTree = "<group>"; };
|
||||
|
|
@ -1107,10 +1128,8 @@
|
|||
84F593AC09855679008153BA /* juce_DocumentWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_DocumentWindow.cpp; sourceTree = "<group>"; };
|
||||
84F593AD09855679008153BA /* juce_DocumentWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_DocumentWindow.h; sourceTree = "<group>"; };
|
||||
84F593B009855693008153BA /* juce_LassoComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_LassoComponent.h; sourceTree = "<group>"; };
|
||||
84F596FF0E23DDBB00E92E85 /* juce_mac_NativeHeaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_mac_NativeHeaders.h; sourceTree = "<group>"; };
|
||||
84F6B7520C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ChannelRemappingAudioSource.cpp; sourceTree = "<group>"; };
|
||||
84F6B7530C06E29D00BB8791 /* juce_ChannelRemappingAudioSource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ChannelRemappingAudioSource.h; sourceTree = "<group>"; };
|
||||
84F703220E1E56FB00EB338A /* juce_mac_FileChooser.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = juce_mac_FileChooser.mm; sourceTree = "<group>"; };
|
||||
84F7A7AD0A8383A100D36246 /* juce_ToolbarButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ToolbarButton.cpp; sourceTree = "<group>"; };
|
||||
84F7A7AE0A8383A100D36246 /* juce_ToolbarButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ToolbarButton.h; sourceTree = "<group>"; };
|
||||
84F7A7B10A8383C200D36246 /* juce_Toolbar.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_Toolbar.cpp; sourceTree = "<group>"; };
|
||||
|
|
@ -1124,6 +1143,7 @@
|
|||
84F7A7C00A8383E000D36246 /* juce_MultiTimer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_MultiTimer.h; sourceTree = "<group>"; };
|
||||
84F7A7ED0A838CC900D36246 /* juce_ComponentAnimator.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentAnimator.cpp; sourceTree = "<group>"; };
|
||||
84F7A7EE0A838CC900D36246 /* juce_ComponentAnimator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentAnimator.h; sourceTree = "<group>"; };
|
||||
84F8B60C0EB5B9230020D98D /* juce_mac_NativeIncludes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = juce_mac_NativeIncludes.h; sourceTree = "<group>"; };
|
||||
84F8DACE099C963A00E911ED /* juce_ComponentPeer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = juce_ComponentPeer.cpp; sourceTree = "<group>"; };
|
||||
84F8DACF099C963A00E911ED /* juce_ComponentPeer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_ComponentPeer.h; sourceTree = "<group>"; };
|
||||
84FC318709B749FD00B75141 /* juce_FileBasedDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileBasedDocument.cpp; path = documents/juce_FileBasedDocument.cpp; sourceTree = "<group>"; };
|
||||
|
|
@ -1157,7 +1177,7 @@
|
|||
84FED3C80CAA96DA00003997 /* juce_FileDragAndDropTarget.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = juce_FileDragAndDropTarget.h; sourceTree = "<group>"; };
|
||||
84FFAF290C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_FileSearchPathListComponent.cpp; path = filebrowser/juce_FileSearchPathListComponent.cpp; sourceTree = "<group>"; };
|
||||
84FFAF2A0C6C8F2B009F6E72 /* juce_FileSearchPathListComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_FileSearchPathListComponent.h; path = filebrowser/juce_FileSearchPathListComponent.h; sourceTree = "<group>"; };
|
||||
D2AAC046055464E500DB518D /* libjuce.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjuce.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D2AAC046055464E500DB518D /* libjucedebug.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjucedebug.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
|
@ -1177,7 +1197,6 @@
|
|||
08FB7795FE84155DC02AAC07 /* Source */,
|
||||
8456EC6508A2A6C80087C412 /* juce_Config.h */,
|
||||
840F80BB092B399D005E7B4E /* juce.h */,
|
||||
842B64EA09D87B7900255DC7 /* juce.xcconfig */,
|
||||
8456EC6908A2A6F00087C412 /* JUCE changelist.txt */,
|
||||
1AB674ADFE9D54B511CA2CBB /* Products */,
|
||||
);
|
||||
|
|
@ -1197,7 +1216,7 @@
|
|||
1AB674ADFE9D54B511CA2CBB /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D2AAC046055464E500DB518D /* libjuce.a */,
|
||||
D2AAC046055464E500DB518D /* libjucedebug.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -1254,11 +1273,12 @@
|
|||
841B22CD0D2E7FE3009D01AA /* formats */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp */,
|
||||
841B22CE0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm */,
|
||||
841B22CF0D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.h */,
|
||||
841B22D00D2E7FE3009D01AA /* juce_DirectXPluginFormat.h */,
|
||||
841B22D10D2E7FE3009D01AA /* juce_LADSPAPluginFormat.h */,
|
||||
841B22D20D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp */,
|
||||
84CA4AFA0E9BF9EC004CCC0E /* juce_VSTPluginFormat.cpp */,
|
||||
84CA4AF30E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm */,
|
||||
841B22D30D2E7FE3009D01AA /* juce_VSTPluginFormat.h */,
|
||||
);
|
||||
path = formats;
|
||||
|
|
@ -1320,21 +1340,31 @@
|
|||
84A4881C08A22E2400752A2B /* mac specific code */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
84F596FF0E23DDBB00E92E85 /* juce_mac_NativeHeaders.h */,
|
||||
8463D31F0E1FC25A003B46B2 /* juce_mac_Fonts.mm */,
|
||||
8463D3200E1FC25A003B46B2 /* juce_mac_Messaging.mm */,
|
||||
8463D3210E1FC25A003B46B2 /* juce_mac_Windowing.mm */,
|
||||
84CE8A400DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm */,
|
||||
84A4881E08A22E2400752A2B /* juce_mac_CoreAudio.cpp */,
|
||||
84A4881F08A22E2400752A2B /* juce_mac_CoreMidi.cpp */,
|
||||
84F703220E1E56FB00EB338A /* juce_mac_FileChooser.mm */,
|
||||
84A4882108A22E2400752A2B /* juce_mac_Files.cpp */,
|
||||
84022DFB0DAE4CB9004CF59A /* juce_mac_HTTPStream.h */,
|
||||
84A06BE209CADB06006A43BD /* juce_mac_NamedPipe.cpp */,
|
||||
847D06460DD88D1100DF6A61 /* juce_mac_Network.mm */,
|
||||
84BE9E1B0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm */,
|
||||
84A4882608A22E2400752A2B /* juce_mac_Threads.cpp */,
|
||||
848A560A0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm */,
|
||||
84E024DB0E94028C003E41AF /* juce_mac_AppleRemote.mm */,
|
||||
84E024DC0E94028C003E41AF /* juce_mac_AudioCDBurner.mm */,
|
||||
84E024DD0E94028C003E41AF /* juce_mac_CoreAudio.cpp */,
|
||||
84E024DE0E94028C003E41AF /* juce_mac_CoreMidi.cpp */,
|
||||
8435DA410E95527D008FBD1C /* juce_mac_Debugging.mm */,
|
||||
84E024DF0E94028C003E41AF /* juce_mac_FileChooser.mm */,
|
||||
84E024E00E94028C003E41AF /* juce_mac_Files.mm */,
|
||||
84E024E10E94028C003E41AF /* juce_mac_Fonts.mm */,
|
||||
84E024E20E94028C003E41AF /* juce_mac_MainMenu.mm */,
|
||||
84E024E30E94028C003E41AF /* juce_mac_MessageManager.mm */,
|
||||
8435D9640E940A3E008FBD1C /* juce_mac_MiscUtilities.mm */,
|
||||
84E024E40E94028C003E41AF /* juce_mac_MouseCursor.mm */,
|
||||
84E024E50E94028C003E41AF /* juce_mac_NamedPipe.cpp */,
|
||||
84E024E60E94028C003E41AF /* juce_mac_NativeCode.mm */,
|
||||
84F8B60C0EB5B9230020D98D /* juce_mac_NativeIncludes.h */,
|
||||
84E024E80E94028C003E41AF /* juce_mac_Network.mm */,
|
||||
84E024E90E94028C003E41AF /* juce_mac_NSViewComponent.mm */,
|
||||
84E024EA0E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm */,
|
||||
84E024EB0E94028C003E41AF /* juce_mac_OpenGLComponent.mm */,
|
||||
84E024EC0E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm */,
|
||||
8435D90C0E9406D2008FBD1C /* juce_mac_Strings.mm */,
|
||||
84E024ED0E94028C003E41AF /* juce_mac_SystemStats.mm */,
|
||||
84E024EE0E94028C003E41AF /* juce_mac_Threads.mm */,
|
||||
84E024EF0E94028C003E41AF /* juce_mac_WebBrowserComponent.mm */,
|
||||
84E024F00E94028C003E41AF /* juce_posix_SharedCode.h */,
|
||||
);
|
||||
name = "mac specific code";
|
||||
path = platform_specific_code;
|
||||
|
|
@ -1694,8 +1724,6 @@
|
|||
84A488DF08A22E4900752A2B /* special */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
84F1F0630A36CF31008CCC5E /* juce_MagnifierComponent.cpp */,
|
||||
84F1F0640A36CF31008CCC5E /* juce_MagnifierComponent.h */,
|
||||
84198BB3096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.cpp */,
|
||||
84198BB4096EB9E40022A439 /* juce_AudioDeviceSelectorComponent.h */,
|
||||
84A488E008A22E4900752A2B /* juce_BubbleComponent.cpp */,
|
||||
|
|
@ -1706,13 +1734,15 @@
|
|||
84A488E508A22E4900752A2B /* juce_ColourSelector.h */,
|
||||
84A488E608A22E4900752A2B /* juce_DropShadower.cpp */,
|
||||
84A488E708A22E4900752A2B /* juce_DropShadower.h */,
|
||||
84F1F0630A36CF31008CCC5E /* juce_MagnifierComponent.cpp */,
|
||||
84F1F0640A36CF31008CCC5E /* juce_MagnifierComponent.h */,
|
||||
84F1B8D809499F1400AD8EDE /* juce_MidiKeyboardComponent.cpp */,
|
||||
84F1B8D909499F1400AD8EDE /* juce_MidiKeyboardComponent.h */,
|
||||
8457783D0E8947C8006D9E4E /* juce_NSViewComponent.h */,
|
||||
84A488E808A22E4900752A2B /* juce_OpenGLComponent.cpp */,
|
||||
84A488E908A22E4900752A2B /* juce_OpenGLComponent.h */,
|
||||
84A488EA08A22E4900752A2B /* juce_PreferencesPanel.cpp */,
|
||||
84A488EB08A22E4900752A2B /* juce_PreferencesPanel.h */,
|
||||
84A488EC08A22E4900752A2B /* juce_QuickTimeMovieComponent.cpp */,
|
||||
84A488ED08A22E4900752A2B /* juce_QuickTimeMovieComponent.h */,
|
||||
848A560D0DDDD3FB0041C706 /* juce_WebBrowserComponent.h */,
|
||||
);
|
||||
|
|
@ -2510,11 +2540,12 @@
|
|||
8495BB950D806BDA001D9C0B /* juce_FileInputSource.h in Headers */,
|
||||
8495BB960D806BDA001D9C0B /* juce_InputSource.h in Headers */,
|
||||
84581EEB0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.h in Headers */,
|
||||
84022DFD0DAE4CB9004CF59A /* juce_mac_HTTPStream.h in Headers */,
|
||||
848A560E0DDDD3FB0041C706 /* juce_WebBrowserComponent.h in Headers */,
|
||||
84688AFC0DED58820077FDEA /* juce_AudioProcessorGraph.h in Headers */,
|
||||
84688AFE0DED58820077FDEA /* juce_AudioProcessorPlayer.h in Headers */,
|
||||
84F597000E23DDBB00E92E85 /* juce_mac_NativeHeaders.h in Headers */,
|
||||
8457783E0E8947C8006D9E4E /* juce_NSViewComponent.h in Headers */,
|
||||
84E025060E94028C003E41AF /* juce_posix_SharedCode.h in Headers */,
|
||||
84F8B60D0EB5B9230020D98D /* juce_mac_NativeIncludes.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -2535,7 +2566,7 @@
|
|||
);
|
||||
name = Juce;
|
||||
productName = Juce;
|
||||
productReference = D2AAC046055464E500DB518D /* libjuce.a */;
|
||||
productReference = D2AAC046055464E500DB518D /* libjucedebug.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
|
@ -2560,10 +2591,6 @@
|
|||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
84A4882908A22E2400752A2B /* juce_mac_CoreAudio.cpp in Sources */,
|
||||
84A4882A08A22E2400752A2B /* juce_mac_CoreMidi.cpp in Sources */,
|
||||
84A4882C08A22E2400752A2B /* juce_mac_Files.cpp in Sources */,
|
||||
84A4883108A22E2400752A2B /* juce_mac_Threads.cpp in Sources */,
|
||||
84A48A2808A22E4B00752A2B /* juce_Application.cpp in Sources */,
|
||||
84A48A2A08A22E4B00752A2B /* juce_DeletedAtShutdown.cpp in Sources */,
|
||||
84A48A2E08A22E4B00752A2B /* juce_AiffAudioFormat.cpp in Sources */,
|
||||
|
|
@ -2634,7 +2661,6 @@
|
|||
84A48ACB08A22E4B00752A2B /* juce_DropShadower.cpp in Sources */,
|
||||
84A48ACD08A22E4B00752A2B /* juce_OpenGLComponent.cpp in Sources */,
|
||||
84A48ACF08A22E4B00752A2B /* juce_PreferencesPanel.cpp in Sources */,
|
||||
84A48AD108A22E4B00752A2B /* juce_QuickTimeMovieComponent.cpp in Sources */,
|
||||
84A48AD308A22E4B00752A2B /* juce_AlertWindow.cpp in Sources */,
|
||||
84A48AD508A22E4B00752A2B /* juce_DialogWindow.cpp in Sources */,
|
||||
84A48ADB08A22E4B00752A2B /* juce_ResizableWindow.cpp in Sources */,
|
||||
|
|
@ -2752,7 +2778,6 @@
|
|||
84F5598809CACFF700AC5000 /* juce_NamedPipe.cpp in Sources */,
|
||||
84A06BAD09CAD6A3006A43BD /* juce_AudioIODevice.cpp in Sources */,
|
||||
84A06BAE09CAD6A3006A43BD /* juce_AudioIODeviceType.cpp in Sources */,
|
||||
84A06BE309CADB06006A43BD /* juce_mac_NamedPipe.cpp in Sources */,
|
||||
846034DE09CB374E00E255CF /* juce_InterprocessConnection.cpp in Sources */,
|
||||
846034E009CB374E00E255CF /* juce_InterprocessConnectionServer.cpp in Sources */,
|
||||
842B63BA09D8508F00255DC7 /* juce_FlacAudioFormat.cpp in Sources */,
|
||||
|
|
@ -2802,8 +2827,7 @@
|
|||
84BC4E2A0C8DD38C00FA249B /* juce_AudioProcessor.cpp in Sources */,
|
||||
84BC4E2C0C8DD38C00FA249B /* juce_AudioProcessorEditor.cpp in Sources */,
|
||||
84BC4E2F0C8DD38C00FA249B /* juce_GenericAudioProcessorEditor.cpp in Sources */,
|
||||
841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.cpp in Sources */,
|
||||
841B22E60D2E7FE3009D01AA /* juce_VSTPluginFormat.cpp in Sources */,
|
||||
841B22E20D2E7FE3009D01AA /* juce_AudioUnitPluginFormat.mm in Sources */,
|
||||
841B22E80D2E7FE3009D01AA /* juce_AudioPluginFormat.cpp in Sources */,
|
||||
841B22EA0D2E7FE3009D01AA /* juce_AudioPluginFormatManager.cpp in Sources */,
|
||||
841B22EC0D2E7FE3009D01AA /* juce_AudioPluginInstance.cpp in Sources */,
|
||||
|
|
@ -2815,16 +2839,32 @@
|
|||
8495BB8E0D8067B2001D9C0B /* juce_AudioThumbnailCache.cpp in Sources */,
|
||||
8495BB940D806BDA001D9C0B /* juce_FileInputSource.cpp in Sources */,
|
||||
84581EEA0D9148C500AE1A4C /* juce_QuickTimeAudioFormat.cpp in Sources */,
|
||||
84CE8A410DC5D7D600799A0E /* juce_mac_AudioCDBurner.mm in Sources */,
|
||||
847D06470DD88D1100DF6A61 /* juce_mac_Network.mm in Sources */,
|
||||
848A560B0DDDD3E40041C706 /* juce_mac_WebBrowserComponent.mm in Sources */,
|
||||
84BE9E1C0DE56DEB00AB8F23 /* juce_mac_SystemStats.mm in Sources */,
|
||||
84688AFB0DED58820077FDEA /* juce_AudioProcessorGraph.cpp in Sources */,
|
||||
84688AFD0DED58820077FDEA /* juce_AudioProcessorPlayer.cpp in Sources */,
|
||||
84F703230E1E56FB00EB338A /* juce_mac_FileChooser.mm in Sources */,
|
||||
8463D3220E1FC25A003B46B2 /* juce_mac_Fonts.mm in Sources */,
|
||||
8463D3230E1FC25A003B46B2 /* juce_mac_Messaging.mm in Sources */,
|
||||
8463D3240E1FC25A003B46B2 /* juce_mac_Windowing.mm in Sources */,
|
||||
84E024F10E94028C003E41AF /* juce_mac_AppleRemote.mm in Sources */,
|
||||
84E024F20E94028C003E41AF /* juce_mac_AudioCDBurner.mm in Sources */,
|
||||
84E024F30E94028C003E41AF /* juce_mac_CoreAudio.cpp in Sources */,
|
||||
84E024F40E94028C003E41AF /* juce_mac_CoreMidi.cpp in Sources */,
|
||||
84E024F50E94028C003E41AF /* juce_mac_FileChooser.mm in Sources */,
|
||||
84E024F60E94028C003E41AF /* juce_mac_Files.mm in Sources */,
|
||||
84E024F70E94028C003E41AF /* juce_mac_Fonts.mm in Sources */,
|
||||
84E024F80E94028C003E41AF /* juce_mac_MainMenu.mm in Sources */,
|
||||
84E024F90E94028C003E41AF /* juce_mac_MessageManager.mm in Sources */,
|
||||
84E024FA0E94028C003E41AF /* juce_mac_MouseCursor.mm in Sources */,
|
||||
84E024FB0E94028C003E41AF /* juce_mac_NamedPipe.cpp in Sources */,
|
||||
84E024FC0E94028C003E41AF /* juce_mac_NativeCode.mm in Sources */,
|
||||
84E024FE0E94028C003E41AF /* juce_mac_Network.mm in Sources */,
|
||||
84E024FF0E94028C003E41AF /* juce_mac_NSViewComponent.mm in Sources */,
|
||||
84E025000E94028C003E41AF /* juce_mac_NSViewComponentPeer.mm in Sources */,
|
||||
84E025010E94028C003E41AF /* juce_mac_OpenGLComponent.mm in Sources */,
|
||||
84E025020E94028C003E41AF /* juce_mac_QuickTimeMovieComponent.mm in Sources */,
|
||||
84E025030E94028C003E41AF /* juce_mac_SystemStats.mm in Sources */,
|
||||
84E025040E94028C003E41AF /* juce_mac_Threads.mm in Sources */,
|
||||
84E025050E94028C003E41AF /* juce_mac_WebBrowserComponent.mm in Sources */,
|
||||
8435D90D0E9406D2008FBD1C /* juce_mac_Strings.mm in Sources */,
|
||||
8435D9650E940A3E008FBD1C /* juce_mac_MiscUtilities.mm in Sources */,
|
||||
8435DA420E95527D008FBD1C /* juce_mac_Debugging.mm in Sources */,
|
||||
84CA4AF40E9BF8B6004CCC0E /* juce_VSTPluginFormat.mm in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -2834,25 +2874,32 @@
|
|||
84A487F808A22DD800752A2B /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)";
|
||||
ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386";
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET_ppc = 10.3;
|
||||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
84A487F908A22DD800752A2B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)";
|
||||
ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386";
|
||||
MACOSX_DEPLOYMENT_TARGET_ppc = 10.3;
|
||||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
|
||||
STRIP_STYLE = "non-global";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
84A487FC08A22DD800752A2B /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 842B64EA09D87B7900255DC7 /* juce.xcconfig */;
|
||||
buildSettings = {
|
||||
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEPLOYMENT_LOCATION = YES;
|
||||
DSTROOT = ../../bin;
|
||||
GCC_MODEL_TUNING = G5;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"_DEBUG=1",
|
||||
|
|
@ -2869,13 +2916,11 @@
|
|||
};
|
||||
84A487FD08A22DD800752A2B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 842B64EA09D87B7900255DC7 /* juce.xcconfig */;
|
||||
buildSettings = {
|
||||
CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)";
|
||||
DEPLOYMENT_LOCATION = YES;
|
||||
DSTROOT = ../../bin;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_MODEL_TUNING = G5;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"_NDEBUG=1",
|
||||
"NDEBUG=1",
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
|
||||
ARCHS = i386 ppc
|
||||
|
||||
// These settings let you build for compatibility with 10.3 onwards.
|
||||
|
||||
MACOSX_DEPLOYMENT_TARGET_ppc = 10.3
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.4
|
||||
|
||||
// In XCode 3, this is the best SDK to use..
|
||||
SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk
|
||||
|
||||
// (if you're building in XCode 2.5, you might need to use this line
|
||||
// instead of the 10.5 line above..)
|
||||
//SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk
|
||||
|
||||
ARCHS = i386 ppc
|
||||
|
||||
// These settings let you build for compatibility with 10.3 onwards.
|
||||
|
||||
MACOSX_DEPLOYMENT_TARGET_ppc = 10.3
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.4
|
||||
|
||||
// In XCode 3, this is the best SDK to use..
|
||||
SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk
|
||||
|
||||
// (if you're building in XCode 2.5, you might need to use this line
|
||||
// instead of the 10.5 line above..)
|
||||
//SDKROOT = $(DEVELOPER_SDK_DIR)/MacOSX10.4u.sdk
|
||||
|
|
|
|||
278
build/macosx/platform_specific_code/juce_mac_AppleRemote.mm
Normal file
278
build/macosx/platform_specific_code/juce_mac_AppleRemote.mm
Normal file
|
|
@ -0,0 +1,278 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
//==============================================================================
|
||||
AppleRemoteDevice::AppleRemoteDevice()
|
||||
: device (0),
|
||||
queue (0),
|
||||
remoteId (0)
|
||||
{
|
||||
}
|
||||
|
||||
AppleRemoteDevice::~AppleRemoteDevice()
|
||||
{
|
||||
stop();
|
||||
}
|
||||
|
||||
static io_object_t getAppleRemoteDevice() throw()
|
||||
{
|
||||
CFMutableDictionaryRef dict = IOServiceMatching ("AppleIRController");
|
||||
|
||||
io_iterator_t iter = 0;
|
||||
io_object_t iod = 0;
|
||||
|
||||
if (IOServiceGetMatchingServices (kIOMasterPortDefault, dict, &iter) == kIOReturnSuccess
|
||||
&& iter != 0)
|
||||
{
|
||||
iod = IOIteratorNext (iter);
|
||||
}
|
||||
|
||||
IOObjectRelease (iter);
|
||||
return iod;
|
||||
}
|
||||
|
||||
static bool createAppleRemoteInterface (io_object_t iod, void** device) throw()
|
||||
{
|
||||
jassert (*device == 0);
|
||||
io_name_t classname;
|
||||
|
||||
if (IOObjectGetClass (iod, classname) == kIOReturnSuccess)
|
||||
{
|
||||
IOCFPlugInInterface** cfPlugInInterface = 0;
|
||||
SInt32 score = 0;
|
||||
|
||||
if (IOCreatePlugInInterfaceForService (iod,
|
||||
kIOHIDDeviceUserClientTypeID,
|
||||
kIOCFPlugInInterfaceID,
|
||||
&cfPlugInInterface,
|
||||
&score) == kIOReturnSuccess)
|
||||
{
|
||||
HRESULT hr = (*cfPlugInInterface)->QueryInterface (cfPlugInInterface,
|
||||
CFUUIDGetUUIDBytes (kIOHIDDeviceInterfaceID),
|
||||
device);
|
||||
|
||||
(void) hr;
|
||||
|
||||
(*cfPlugInInterface)->Release (cfPlugInInterface);
|
||||
}
|
||||
}
|
||||
|
||||
return *device != 0;
|
||||
}
|
||||
|
||||
bool AppleRemoteDevice::start (const bool inExclusiveMode) throw()
|
||||
{
|
||||
if (queue != 0)
|
||||
return true;
|
||||
|
||||
stop();
|
||||
|
||||
bool result = false;
|
||||
io_object_t iod = getAppleRemoteDevice();
|
||||
|
||||
if (iod != 0)
|
||||
{
|
||||
if (createAppleRemoteInterface (iod, &device) && open (inExclusiveMode))
|
||||
result = true;
|
||||
else
|
||||
stop();
|
||||
|
||||
IOObjectRelease (iod);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void AppleRemoteDevice::stop() throw()
|
||||
{
|
||||
if (queue != 0)
|
||||
{
|
||||
(*(IOHIDQueueInterface**) queue)->stop ((IOHIDQueueInterface**) queue);
|
||||
(*(IOHIDQueueInterface**) queue)->dispose ((IOHIDQueueInterface**) queue);
|
||||
(*(IOHIDQueueInterface**) queue)->Release ((IOHIDQueueInterface**) queue);
|
||||
queue = 0;
|
||||
}
|
||||
|
||||
if (device != 0)
|
||||
{
|
||||
(*(IOHIDDeviceInterface**) device)->close ((IOHIDDeviceInterface**) device);
|
||||
(*(IOHIDDeviceInterface**) device)->Release ((IOHIDDeviceInterface**) device);
|
||||
device = 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool AppleRemoteDevice::isActive() const throw()
|
||||
{
|
||||
return queue != 0;
|
||||
}
|
||||
|
||||
static void appleRemoteQueueCallback (void* const target, const IOReturn result, void*, void*)
|
||||
{
|
||||
if (result == kIOReturnSuccess)
|
||||
((AppleRemoteDevice*) target)->handleCallbackInternal();
|
||||
}
|
||||
|
||||
bool AppleRemoteDevice::open (const bool openInExclusiveMode) throw()
|
||||
{
|
||||
#if ! MACOS_10_2_OR_EARLIER
|
||||
Array <int> cookies;
|
||||
|
||||
CFArrayRef elements;
|
||||
IOHIDDeviceInterface122** const device122 = (IOHIDDeviceInterface122**) device;
|
||||
|
||||
if ((*device122)->copyMatchingElements (device122, 0, &elements) != kIOReturnSuccess)
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < CFArrayGetCount (elements); ++i)
|
||||
{
|
||||
CFDictionaryRef element = (CFDictionaryRef) CFArrayGetValueAtIndex (elements, i);
|
||||
|
||||
// get the cookie
|
||||
CFTypeRef object = CFDictionaryGetValue (element, CFSTR (kIOHIDElementCookieKey));
|
||||
|
||||
if (object == 0 || CFGetTypeID (object) != CFNumberGetTypeID())
|
||||
continue;
|
||||
|
||||
long number;
|
||||
if (! CFNumberGetValue ((CFNumberRef) object, kCFNumberLongType, &number))
|
||||
continue;
|
||||
|
||||
cookies.add ((int) number);
|
||||
}
|
||||
|
||||
CFRelease (elements);
|
||||
|
||||
if ((*(IOHIDDeviceInterface**) device)
|
||||
->open ((IOHIDDeviceInterface**) device,
|
||||
openInExclusiveMode ? kIOHIDOptionsTypeSeizeDevice
|
||||
: kIOHIDOptionsTypeNone) == KERN_SUCCESS)
|
||||
{
|
||||
queue = (*(IOHIDDeviceInterface**) device)->allocQueue ((IOHIDDeviceInterface**) device);
|
||||
|
||||
if (queue != 0)
|
||||
{
|
||||
(*(IOHIDQueueInterface**) queue)->create ((IOHIDQueueInterface**) queue, 0, 12);
|
||||
|
||||
for (int i = 0; i < cookies.size(); ++i)
|
||||
{
|
||||
IOHIDElementCookie cookie = (IOHIDElementCookie) cookies.getUnchecked(i);
|
||||
(*(IOHIDQueueInterface**) queue)->addElement ((IOHIDQueueInterface**) queue, cookie, 0);
|
||||
}
|
||||
|
||||
CFRunLoopSourceRef eventSource;
|
||||
|
||||
if ((*(IOHIDQueueInterface**) queue)
|
||||
->createAsyncEventSource ((IOHIDQueueInterface**) queue, &eventSource) == KERN_SUCCESS)
|
||||
{
|
||||
if ((*(IOHIDQueueInterface**) queue)->setEventCallout ((IOHIDQueueInterface**) queue,
|
||||
appleRemoteQueueCallback, this, 0) == KERN_SUCCESS)
|
||||
{
|
||||
CFRunLoopAddSource (CFRunLoopGetCurrent(), eventSource, kCFRunLoopDefaultMode);
|
||||
|
||||
(*(IOHIDQueueInterface**) queue)->start ((IOHIDQueueInterface**) queue);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void AppleRemoteDevice::handleCallbackInternal()
|
||||
{
|
||||
#if ! MACOS_10_2_OR_EARLIER
|
||||
int totalValues = 0;
|
||||
AbsoluteTime nullTime = { 0, 0 };
|
||||
char cookies [12];
|
||||
int numCookies = 0;
|
||||
|
||||
while (numCookies < numElementsInArray (cookies))
|
||||
{
|
||||
IOHIDEventStruct e;
|
||||
|
||||
if ((*(IOHIDQueueInterface**) queue)->getNextEvent ((IOHIDQueueInterface**) queue, &e, nullTime, 0) != kIOReturnSuccess)
|
||||
break;
|
||||
|
||||
if ((int) e.elementCookie == 19)
|
||||
{
|
||||
remoteId = e.value;
|
||||
buttonPressed (switched, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
totalValues += e.value;
|
||||
cookies [numCookies++] = (char) (pointer_sized_int) e.elementCookie;
|
||||
}
|
||||
}
|
||||
|
||||
cookies [numCookies++] = 0;
|
||||
//DBG (String::toHexString ((uint8*) cookies, numCookies, 1) + " " + String (totalValues));
|
||||
|
||||
static const char buttonPatterns[] =
|
||||
{
|
||||
0x1f, 0x14, 0x12, 0x1f, 0x14, 0x12, 0,
|
||||
0x1f, 0x15, 0x12, 0x1f, 0x15, 0x12, 0,
|
||||
0x1f, 0x1d, 0x1c, 0x12, 0,
|
||||
0x1f, 0x1e, 0x1c, 0x12, 0,
|
||||
0x1f, 0x16, 0x12, 0x1f, 0x16, 0x12, 0,
|
||||
0x1f, 0x17, 0x12, 0x1f, 0x17, 0x12, 0,
|
||||
0x1f, 0x12, 0x04, 0x02, 0,
|
||||
0x1f, 0x12, 0x03, 0x02, 0,
|
||||
0x1f, 0x12, 0x1f, 0x12, 0,
|
||||
0x23, 0x1f, 0x12, 0x23, 0x1f, 0x12, 0,
|
||||
19, 0
|
||||
};
|
||||
|
||||
int buttonNum = (int) menuButton;
|
||||
int i = 0;
|
||||
|
||||
while (i < numElementsInArray (buttonPatterns))
|
||||
{
|
||||
if (strcmp (cookies, buttonPatterns + i) == 0)
|
||||
{
|
||||
buttonPressed ((ButtonType) buttonNum, totalValues > 0);
|
||||
break;
|
||||
}
|
||||
|
||||
i += strlen (buttonPatterns + i) + 1;
|
||||
++buttonNum;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -1,448 +1,432 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "juce_mac_NativeHeaders.h"
|
||||
|
||||
#if JUCE_USE_CDBURNER
|
||||
|
||||
#import <DiscRecording/DiscRecording.h>
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
#include "../../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h"
|
||||
#include "../../../src/juce_appframework/audio/audio_sources/juce_AudioSource.h"
|
||||
#include "../../../src/juce_appframework/audio/dsp/juce_AudioDataConverters.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
|
||||
//==============================================================================
|
||||
@interface OpenDiskDevice : NSObject
|
||||
{
|
||||
DRDevice* device;
|
||||
|
||||
NSMutableArray* tracks;
|
||||
}
|
||||
|
||||
- (OpenDiskDevice*) initWithDevice: (DRDevice*) device;
|
||||
- (void) dealloc;
|
||||
- (bool) isDiskPresent;
|
||||
- (int) getNumAvailableAudioBlocks;
|
||||
- (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) numSamples_;
|
||||
- (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error
|
||||
ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting;
|
||||
@end
|
||||
|
||||
//==============================================================================
|
||||
@interface AudioTrackProducer : NSObject
|
||||
{
|
||||
JUCE_NAMESPACE::AudioSource* source;
|
||||
int readPosition, lengthInFrames;
|
||||
}
|
||||
|
||||
- (AudioTrackProducer*) init: (int) lengthInFrames;
|
||||
- (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) lengthInSamples;
|
||||
- (void) dealloc;
|
||||
- (void) setupTrackProperties: (DRTrack*) track;
|
||||
|
||||
- (void) cleanupTrackAfterBurn: (DRTrack*) track;
|
||||
- (BOOL) cleanupTrackAfterVerification:(DRTrack*)track;
|
||||
- (uint64_t) estimateLengthOfTrack:(DRTrack*)track;
|
||||
- (BOOL) prepareTrack:(DRTrack*)track forBurn:(DRBurn*)burn
|
||||
toMedia:(NSDictionary*)mediaInfo;
|
||||
- (BOOL) prepareTrackForVerification:(DRTrack*)track;
|
||||
- (uint32_t) produceDataForTrack:(DRTrack*)track intoBuffer:(char*)buffer
|
||||
length:(uint32_t)bufferLength atAddress:(uint64_t)address
|
||||
blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags;
|
||||
- (uint32_t) producePreGapForTrack:(DRTrack*)track
|
||||
intoBuffer:(char*)buffer length:(uint32_t)bufferLength
|
||||
atAddress:(uint64_t)address blockSize:(uint32_t)blockSize
|
||||
ioFlags:(uint32_t*)flags;
|
||||
- (BOOL) verifyDataForTrack:(DRTrack*)track inBuffer:(const char*)buffer
|
||||
length:(uint32_t)bufferLength atAddress:(uint64_t)address
|
||||
blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags;
|
||||
- (uint32_t) producePreGapForTrack:(DRTrack*)track
|
||||
intoBuffer:(char*)buffer length:(uint32_t)bufferLength
|
||||
atAddress:(uint64_t)address blockSize:(uint32_t)blockSize
|
||||
ioFlags:(uint32_t*)flags;
|
||||
@end
|
||||
|
||||
//==============================================================================
|
||||
@implementation OpenDiskDevice
|
||||
|
||||
- (OpenDiskDevice*) initWithDevice: (DRDevice*) device_
|
||||
{
|
||||
[super init];
|
||||
|
||||
device = device_;
|
||||
tracks = [[NSMutableArray alloc] init];
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[tracks release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (bool) isDiskPresent
|
||||
{
|
||||
return [device isValid]
|
||||
&& [[[device status] objectForKey: DRDeviceMediaStateKey]
|
||||
isEqualTo: DRDeviceMediaStateMediaPresent];
|
||||
}
|
||||
|
||||
- (int) getNumAvailableAudioBlocks
|
||||
{
|
||||
return [[[[device status] objectForKey: DRDeviceMediaInfoKey]
|
||||
objectForKey: DRDeviceMediaBlocksFreeKey] intValue];
|
||||
}
|
||||
|
||||
- (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) numSamples_
|
||||
{
|
||||
AudioTrackProducer* p = [[AudioTrackProducer alloc] initWithAudioSource: source_ numSamples: numSamples_];
|
||||
DRTrack* t = [[DRTrack alloc] initWithProducer: p];
|
||||
[p setupTrackProperties: t];
|
||||
|
||||
[tracks addObject: t];
|
||||
|
||||
[t release];
|
||||
[p release];
|
||||
}
|
||||
|
||||
- (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error
|
||||
ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting
|
||||
{
|
||||
DRBurn* burn = [DRBurn burnForDevice: device];
|
||||
|
||||
if (! [device acquireExclusiveAccess])
|
||||
{
|
||||
*error = "Couldn't open or write to the CD device";
|
||||
return;
|
||||
}
|
||||
|
||||
[device acquireMediaReservation];
|
||||
|
||||
NSMutableDictionary* d = [[burn properties] mutableCopy];
|
||||
[d autorelease];
|
||||
[d setObject: [NSNumber numberWithBool: peformFakeBurnForTesting] forKey: DRBurnTestingKey];
|
||||
[d setObject: [NSNumber numberWithBool: false] forKey: DRBurnVerifyDiscKey];
|
||||
[d setObject: (shouldEject ? DRBurnCompletionActionEject : DRBurnCompletionActionMount)
|
||||
forKey: DRBurnCompletionActionKey];
|
||||
[burn setProperties: d];
|
||||
|
||||
[burn writeLayout: tracks];
|
||||
|
||||
for (;;)
|
||||
{
|
||||
JUCE_NAMESPACE::Thread::sleep (300);
|
||||
float progress = [[[burn status] objectForKey: DRStatusPercentCompleteKey] floatValue];
|
||||
|
||||
NSLog ([[burn status] description]);
|
||||
|
||||
if (listener != 0 && listener->audioCDBurnProgress (progress))
|
||||
{
|
||||
[burn abort];
|
||||
*error = "User cancelled the write operation";
|
||||
break;
|
||||
}
|
||||
|
||||
if ([[[burn status] objectForKey: DRStatusStateKey] isEqualTo: DRStatusStateFailed])
|
||||
{
|
||||
*error = "Write operation failed";
|
||||
break;
|
||||
}
|
||||
else if ([[[burn status] objectForKey: DRStatusStateKey] isEqualTo: DRStatusStateDone])
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
NSString* err = (NSString*) [[[burn status] objectForKey: DRErrorStatusKey]
|
||||
objectForKey: DRErrorStatusErrorStringKey];
|
||||
|
||||
if ([err length] > 0)
|
||||
{
|
||||
*error = JUCE_NAMESPACE::String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [err UTF8String]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[device releaseMediaReservation];
|
||||
[device releaseExclusiveAccess];
|
||||
}
|
||||
@end
|
||||
|
||||
//==============================================================================
|
||||
@implementation AudioTrackProducer
|
||||
|
||||
- (AudioTrackProducer*) init: (int) lengthInFrames_
|
||||
{
|
||||
lengthInFrames = lengthInFrames_;
|
||||
readPosition = 0;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) setupTrackProperties: (DRTrack*) track
|
||||
{
|
||||
NSMutableDictionary* p = [[track properties] mutableCopy];
|
||||
[p setObject:[DRMSF msfWithFrames: lengthInFrames] forKey: DRTrackLengthKey];
|
||||
[p setObject:[NSNumber numberWithUnsignedShort:2352] forKey: DRBlockSizeKey];
|
||||
[p setObject:[NSNumber numberWithInt:0] forKey: DRDataFormKey];
|
||||
[p setObject:[NSNumber numberWithInt:0] forKey: DRBlockTypeKey];
|
||||
[p setObject:[NSNumber numberWithInt:0] forKey: DRTrackModeKey];
|
||||
[p setObject:[NSNumber numberWithInt:0] forKey: DRSessionFormatKey];
|
||||
|
||||
|
||||
[track setProperties: p];
|
||||
[p release];
|
||||
}
|
||||
|
||||
- (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) lengthInSamples
|
||||
{
|
||||
AudioTrackProducer* s = [self init: (lengthInSamples + 587) / 588];
|
||||
|
||||
if (s != nil)
|
||||
s->source = source_;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
if (source != 0)
|
||||
{
|
||||
source->releaseResources();
|
||||
delete source;
|
||||
}
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) cleanupTrackAfterBurn: (DRTrack*) track
|
||||
{
|
||||
}
|
||||
|
||||
- (BOOL) cleanupTrackAfterVerification:(DRTrack*)track
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
- (uint64_t) estimateLengthOfTrack:(DRTrack*)track
|
||||
{
|
||||
return lengthInFrames;
|
||||
}
|
||||
|
||||
- (BOOL) prepareTrack:(DRTrack*)track forBurn:(DRBurn*)burn
|
||||
toMedia:(NSDictionary*)mediaInfo
|
||||
{
|
||||
if (source != 0)
|
||||
source->prepareToPlay (44100 / 75, 44100);
|
||||
|
||||
readPosition = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
- (BOOL) prepareTrackForVerification:(DRTrack*)track
|
||||
{
|
||||
if (source != 0)
|
||||
source->prepareToPlay (44100 / 75, 44100);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
- (uint32_t) produceDataForTrack:(DRTrack*)track intoBuffer:(char*)buffer
|
||||
length:(uint32_t)bufferLength atAddress:(uint64_t)address
|
||||
blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags
|
||||
{
|
||||
if (source != 0)
|
||||
{
|
||||
const int numSamples = JUCE_NAMESPACE::jmin (bufferLength / 4, (lengthInFrames * (44100 / 75)) - readPosition);
|
||||
|
||||
if (numSamples > 0)
|
||||
{
|
||||
JUCE_NAMESPACE::AudioSampleBuffer tempBuffer (2, numSamples);
|
||||
|
||||
JUCE_NAMESPACE::AudioSourceChannelInfo info;
|
||||
info.buffer = &tempBuffer;
|
||||
info.startSample = 0;
|
||||
info.numSamples = numSamples;
|
||||
|
||||
source->getNextAudioBlock (info);
|
||||
|
||||
JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (0),
|
||||
buffer, numSamples, 4);
|
||||
JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (1),
|
||||
buffer + 2, numSamples, 4);
|
||||
|
||||
readPosition += numSamples;
|
||||
}
|
||||
|
||||
return numSamples * 4;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (uint32_t) producePreGapForTrack:(DRTrack*)track
|
||||
intoBuffer:(char*)buffer length:(uint32_t)bufferLength
|
||||
atAddress:(uint64_t)address blockSize:(uint32_t)blockSize
|
||||
ioFlags:(uint32_t*)flags
|
||||
{
|
||||
zeromem (buffer, bufferLength);
|
||||
return bufferLength;
|
||||
}
|
||||
|
||||
- (BOOL) verifyDataForTrack:(DRTrack*)track inBuffer:(const char*)buffer
|
||||
length:(uint32_t)bufferLength atAddress:(uint64_t)address
|
||||
blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
//==============================================================================
|
||||
AudioCDBurner::AudioCDBurner (const int deviceIndex)
|
||||
: internal (0)
|
||||
{
|
||||
const AutoPool pool;
|
||||
OpenDiskDevice* dev = [[OpenDiskDevice alloc] initWithDevice: [[DRDevice devices] objectAtIndex: deviceIndex]];
|
||||
|
||||
internal = (void*) dev;
|
||||
}
|
||||
|
||||
AudioCDBurner::~AudioCDBurner()
|
||||
{
|
||||
const AutoPool pool;
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
if (dev != 0)
|
||||
[dev release];
|
||||
}
|
||||
|
||||
AudioCDBurner* AudioCDBurner::openDevice (const int deviceIndex)
|
||||
{
|
||||
const AutoPool pool;
|
||||
AudioCDBurner* b = new AudioCDBurner (deviceIndex);
|
||||
|
||||
if (b->internal == 0)
|
||||
deleteAndZero (b);
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
static NSArray* findDiskBurnerDevices()
|
||||
{
|
||||
NSMutableArray* results = [NSMutableArray array];
|
||||
NSArray* devs = [DRDevice devices];
|
||||
|
||||
if (devs != 0)
|
||||
{
|
||||
int num = [devs count];
|
||||
int i;
|
||||
for (i = 0; i < num; ++i)
|
||||
{
|
||||
NSDictionary* dic = [[devs objectAtIndex: i] info];
|
||||
NSString* name = [dic valueForKey: DRDeviceProductNameKey];
|
||||
if (name != nil)
|
||||
[results addObject: name];
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
const StringArray AudioCDBurner::findAvailableDevices()
|
||||
{
|
||||
const AutoPool pool;
|
||||
NSArray* names = findDiskBurnerDevices();
|
||||
StringArray s;
|
||||
|
||||
for (int i = 0; i < [names count]; ++i)
|
||||
s.add (String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [[names objectAtIndex: i] UTF8String]));
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
bool AudioCDBurner::isDiskPresent() const
|
||||
{
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
return dev != 0 && [dev isDiskPresent];
|
||||
}
|
||||
|
||||
int AudioCDBurner::getNumAvailableAudioBlocks() const
|
||||
{
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
return [dev getNumAvailableAudioBlocks];
|
||||
}
|
||||
|
||||
bool AudioCDBurner::addAudioTrack (AudioSource* source, int numSamps)
|
||||
{
|
||||
const AutoPool pool;
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
if (dev != 0)
|
||||
{
|
||||
[dev addSourceTrack: source numSamples: numSamps];
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const String AudioCDBurner::burn (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener* listener,
|
||||
const bool ejectDiscAfterwards,
|
||||
const bool peformFakeBurnForTesting)
|
||||
{
|
||||
const AutoPool pool;
|
||||
JUCE_NAMESPACE::String error ("Couldn't open or write to the CD device");
|
||||
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
if (dev != 0)
|
||||
{
|
||||
error = JUCE_NAMESPACE::String::empty;
|
||||
[dev burn: listener
|
||||
errorString: &error
|
||||
ejectAfterwards: ejectDiscAfterwards
|
||||
isFake: peformFakeBurnForTesting];
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
#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).
|
||||
#if JUCE_INCLUDED_FILE && JUCE_USE_CDBURNER
|
||||
|
||||
//==============================================================================
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
@interface OpenDiskDevice : NSObject
|
||||
{
|
||||
DRDevice* device;
|
||||
|
||||
NSMutableArray* tracks;
|
||||
}
|
||||
|
||||
- (OpenDiskDevice*) initWithDevice: (DRDevice*) device;
|
||||
- (void) dealloc;
|
||||
- (bool) isDiskPresent;
|
||||
- (int) getNumAvailableAudioBlocks;
|
||||
- (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) numSamples_;
|
||||
- (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error
|
||||
ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting;
|
||||
@end
|
||||
|
||||
//==============================================================================
|
||||
@interface AudioTrackProducer : NSObject
|
||||
{
|
||||
JUCE_NAMESPACE::AudioSource* source;
|
||||
int readPosition, lengthInFrames;
|
||||
}
|
||||
|
||||
- (AudioTrackProducer*) init: (int) lengthInFrames;
|
||||
- (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source numSamples: (int) lengthInSamples;
|
||||
- (void) dealloc;
|
||||
- (void) setupTrackProperties: (DRTrack*) track;
|
||||
|
||||
- (void) cleanupTrackAfterBurn: (DRTrack*) track;
|
||||
- (BOOL) cleanupTrackAfterVerification:(DRTrack*)track;
|
||||
- (uint64_t) estimateLengthOfTrack:(DRTrack*)track;
|
||||
- (BOOL) prepareTrack:(DRTrack*)track forBurn:(DRBurn*)burn
|
||||
toMedia:(NSDictionary*)mediaInfo;
|
||||
- (BOOL) prepareTrackForVerification:(DRTrack*)track;
|
||||
- (uint32_t) produceDataForTrack:(DRTrack*)track intoBuffer:(char*)buffer
|
||||
length:(uint32_t)bufferLength atAddress:(uint64_t)address
|
||||
blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags;
|
||||
- (uint32_t) producePreGapForTrack:(DRTrack*)track
|
||||
intoBuffer:(char*)buffer length:(uint32_t)bufferLength
|
||||
atAddress:(uint64_t)address blockSize:(uint32_t)blockSize
|
||||
ioFlags:(uint32_t*)flags;
|
||||
- (BOOL) verifyDataForTrack:(DRTrack*)track inBuffer:(const char*)buffer
|
||||
length:(uint32_t)bufferLength atAddress:(uint64_t)address
|
||||
blockSize:(uint32_t)blockSize ioFlags:(uint32_t*)flags;
|
||||
- (uint32_t) producePreGapForTrack:(DRTrack*)track
|
||||
intoBuffer:(char*)buffer length:(uint32_t)bufferLength
|
||||
atAddress:(uint64_t)address blockSize:(uint32_t)blockSize
|
||||
ioFlags:(uint32_t*)flags;
|
||||
@end
|
||||
|
||||
//==============================================================================
|
||||
@implementation OpenDiskDevice
|
||||
|
||||
- (OpenDiskDevice*) initWithDevice: (DRDevice*) device_
|
||||
{
|
||||
[super init];
|
||||
|
||||
device = device_;
|
||||
tracks = [[NSMutableArray alloc] init];
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[tracks release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (bool) isDiskPresent
|
||||
{
|
||||
return [device isValid]
|
||||
&& [[[device status] objectForKey: DRDeviceMediaStateKey]
|
||||
isEqualTo: DRDeviceMediaStateMediaPresent];
|
||||
}
|
||||
|
||||
- (int) getNumAvailableAudioBlocks
|
||||
{
|
||||
return [[[[device status] objectForKey: DRDeviceMediaInfoKey]
|
||||
objectForKey: DRDeviceMediaBlocksFreeKey] intValue];
|
||||
}
|
||||
|
||||
- (void) addSourceTrack: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) numSamples_
|
||||
{
|
||||
AudioTrackProducer* p = [[AudioTrackProducer alloc] initWithAudioSource: source_ numSamples: numSamples_];
|
||||
DRTrack* t = [[DRTrack alloc] initWithProducer: p];
|
||||
[p setupTrackProperties: t];
|
||||
|
||||
[tracks addObject: t];
|
||||
|
||||
[t release];
|
||||
[p release];
|
||||
}
|
||||
|
||||
- (void) burn: (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener*) listener errorString: (JUCE_NAMESPACE::String*) error
|
||||
ejectAfterwards: (bool) shouldEject isFake: (bool) peformFakeBurnForTesting
|
||||
{
|
||||
DRBurn* burn = [DRBurn burnForDevice: device];
|
||||
|
||||
if (! [device acquireExclusiveAccess])
|
||||
{
|
||||
*error = "Couldn't open or write to the CD device";
|
||||
return;
|
||||
}
|
||||
|
||||
[device acquireMediaReservation];
|
||||
|
||||
NSMutableDictionary* d = [[burn properties] mutableCopy];
|
||||
[d autorelease];
|
||||
[d setObject: [NSNumber numberWithBool: peformFakeBurnForTesting] forKey: DRBurnTestingKey];
|
||||
[d setObject: [NSNumber numberWithBool: false] forKey: DRBurnVerifyDiscKey];
|
||||
[d setObject: (shouldEject ? DRBurnCompletionActionEject : DRBurnCompletionActionMount)
|
||||
forKey: DRBurnCompletionActionKey];
|
||||
[burn setProperties: d];
|
||||
|
||||
[burn writeLayout: tracks];
|
||||
|
||||
for (;;)
|
||||
{
|
||||
JUCE_NAMESPACE::Thread::sleep (300);
|
||||
float progress = [[[burn status] objectForKey: DRStatusPercentCompleteKey] floatValue];
|
||||
|
||||
NSLog ([[burn status] description]);
|
||||
|
||||
if (listener != 0 && listener->audioCDBurnProgress (progress))
|
||||
{
|
||||
[burn abort];
|
||||
*error = "User cancelled the write operation";
|
||||
break;
|
||||
}
|
||||
|
||||
if ([[[burn status] objectForKey: DRStatusStateKey] isEqualTo: DRStatusStateFailed])
|
||||
{
|
||||
*error = "Write operation failed";
|
||||
break;
|
||||
}
|
||||
else if ([[[burn status] objectForKey: DRStatusStateKey] isEqualTo: DRStatusStateDone])
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
NSString* err = (NSString*) [[[burn status] objectForKey: DRErrorStatusKey]
|
||||
objectForKey: DRErrorStatusErrorStringKey];
|
||||
|
||||
if ([err length] > 0)
|
||||
{
|
||||
*error = JUCE_NAMESPACE::String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [err UTF8String]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[device releaseMediaReservation];
|
||||
[device releaseExclusiveAccess];
|
||||
}
|
||||
@end
|
||||
|
||||
//==============================================================================
|
||||
@implementation AudioTrackProducer
|
||||
|
||||
- (AudioTrackProducer*) init: (int) lengthInFrames_
|
||||
{
|
||||
lengthInFrames = lengthInFrames_;
|
||||
readPosition = 0;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) setupTrackProperties: (DRTrack*) track
|
||||
{
|
||||
NSMutableDictionary* p = [[track properties] mutableCopy];
|
||||
[p setObject:[DRMSF msfWithFrames: lengthInFrames] forKey: DRTrackLengthKey];
|
||||
[p setObject:[NSNumber numberWithUnsignedShort:2352] forKey: DRBlockSizeKey];
|
||||
[p setObject:[NSNumber numberWithInt:0] forKey: DRDataFormKey];
|
||||
[p setObject:[NSNumber numberWithInt:0] forKey: DRBlockTypeKey];
|
||||
[p setObject:[NSNumber numberWithInt:0] forKey: DRTrackModeKey];
|
||||
[p setObject:[NSNumber numberWithInt:0] forKey: DRSessionFormatKey];
|
||||
|
||||
|
||||
[track setProperties: p];
|
||||
[p release];
|
||||
}
|
||||
|
||||
- (AudioTrackProducer*) initWithAudioSource: (JUCE_NAMESPACE::AudioSource*) source_ numSamples: (int) lengthInSamples
|
||||
{
|
||||
AudioTrackProducer* s = [self init: (lengthInSamples + 587) / 588];
|
||||
|
||||
if (s != nil)
|
||||
s->source = source_;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
if (source != 0)
|
||||
{
|
||||
source->releaseResources();
|
||||
delete source;
|
||||
}
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) cleanupTrackAfterBurn: (DRTrack*) track
|
||||
{
|
||||
}
|
||||
|
||||
- (BOOL) cleanupTrackAfterVerification: (DRTrack*) track
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
- (uint64_t) estimateLengthOfTrack: (DRTrack*) track
|
||||
{
|
||||
return lengthInFrames;
|
||||
}
|
||||
|
||||
- (BOOL) prepareTrack: (DRTrack*) track forBurn: (DRBurn*) burn
|
||||
toMedia: (NSDictionary*) mediaInfo
|
||||
{
|
||||
if (source != 0)
|
||||
source->prepareToPlay (44100 / 75, 44100);
|
||||
|
||||
readPosition = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
- (BOOL) prepareTrackForVerification: (DRTrack*) track
|
||||
{
|
||||
if (source != 0)
|
||||
source->prepareToPlay (44100 / 75, 44100);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
- (uint32_t) produceDataForTrack: (DRTrack*) track intoBuffer: (char*) buffer
|
||||
length: (uint32_t) bufferLength atAddress: (uint64_t) address
|
||||
blockSize: (uint32_t) blockSize ioFlags: (uint32_t*) flags
|
||||
{
|
||||
if (source != 0)
|
||||
{
|
||||
const int numSamples = JUCE_NAMESPACE::jmin (bufferLength / 4, (lengthInFrames * (44100 / 75)) - readPosition);
|
||||
|
||||
if (numSamples > 0)
|
||||
{
|
||||
JUCE_NAMESPACE::AudioSampleBuffer tempBuffer (2, numSamples);
|
||||
|
||||
JUCE_NAMESPACE::AudioSourceChannelInfo info;
|
||||
info.buffer = &tempBuffer;
|
||||
info.startSample = 0;
|
||||
info.numSamples = numSamples;
|
||||
|
||||
source->getNextAudioBlock (info);
|
||||
|
||||
JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (0),
|
||||
buffer, numSamples, 4);
|
||||
JUCE_NAMESPACE::AudioDataConverters::convertFloatToInt16LE (tempBuffer.getSampleData (1),
|
||||
buffer + 2, numSamples, 4);
|
||||
|
||||
readPosition += numSamples;
|
||||
}
|
||||
|
||||
return numSamples * 4;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (uint32_t) producePreGapForTrack: (DRTrack*) track
|
||||
intoBuffer: (char*) buffer length: (uint32_t) bufferLength
|
||||
atAddress: (uint64_t) address blockSize: (uint32_t) blockSize
|
||||
ioFlags: (uint32_t*) flags
|
||||
{
|
||||
zeromem (buffer, bufferLength);
|
||||
return bufferLength;
|
||||
}
|
||||
|
||||
- (BOOL) verifyDataForTrack: (DRTrack*) track inBuffer: (const char*) buffer
|
||||
length: (uint32_t) bufferLength atAddress: (uint64_t) address
|
||||
blockSize: (uint32_t) blockSize ioFlags: (uint32_t*) flags
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
//==============================================================================
|
||||
AudioCDBurner::AudioCDBurner (const int deviceIndex)
|
||||
: internal (0)
|
||||
{
|
||||
OpenDiskDevice* dev = [[OpenDiskDevice alloc] initWithDevice: [[DRDevice devices] objectAtIndex: deviceIndex]];
|
||||
|
||||
internal = (void*) dev;
|
||||
}
|
||||
|
||||
AudioCDBurner::~AudioCDBurner()
|
||||
{
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
if (dev != 0)
|
||||
[dev release];
|
||||
}
|
||||
|
||||
AudioCDBurner* AudioCDBurner::openDevice (const int deviceIndex)
|
||||
{
|
||||
AudioCDBurner* b = new AudioCDBurner (deviceIndex);
|
||||
|
||||
if (b->internal == 0)
|
||||
deleteAndZero (b);
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
static NSArray* findDiskBurnerDevices()
|
||||
{
|
||||
NSMutableArray* results = [NSMutableArray array];
|
||||
NSArray* devs = [DRDevice devices];
|
||||
|
||||
if (devs != 0)
|
||||
{
|
||||
int num = [devs count];
|
||||
int i;
|
||||
for (i = 0; i < num; ++i)
|
||||
{
|
||||
NSDictionary* dic = [[devs objectAtIndex: i] info];
|
||||
NSString* name = [dic valueForKey: DRDeviceProductNameKey];
|
||||
if (name != nil)
|
||||
[results addObject: name];
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
const StringArray AudioCDBurner::findAvailableDevices()
|
||||
{
|
||||
NSArray* names = findDiskBurnerDevices();
|
||||
StringArray s;
|
||||
|
||||
for (int i = 0; i < [names count]; ++i)
|
||||
s.add (String::fromUTF8 ((JUCE_NAMESPACE::uint8*) [[names objectAtIndex: i] UTF8String]));
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
bool AudioCDBurner::isDiskPresent() const
|
||||
{
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
return dev != 0 && [dev isDiskPresent];
|
||||
}
|
||||
|
||||
int AudioCDBurner::getNumAvailableAudioBlocks() const
|
||||
{
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
return [dev getNumAvailableAudioBlocks];
|
||||
}
|
||||
|
||||
bool AudioCDBurner::addAudioTrack (AudioSource* source, int numSamps)
|
||||
{
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
if (dev != 0)
|
||||
{
|
||||
[dev addSourceTrack: source numSamples: numSamps];
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const String AudioCDBurner::burn (JUCE_NAMESPACE::AudioCDBurner::BurnProgressListener* listener,
|
||||
const bool ejectDiscAfterwards,
|
||||
const bool peformFakeBurnForTesting)
|
||||
{
|
||||
String error ("Couldn't open or write to the CD device");
|
||||
|
||||
OpenDiskDevice* dev = (OpenDiskDevice*) internal;
|
||||
|
||||
if (dev != 0)
|
||||
{
|
||||
error = String::empty;
|
||||
[dev burn: listener
|
||||
errorString: &error
|
||||
ejectAfterwards: ejectDiscAfterwards
|
||||
isFake: peformFakeBurnForTesting];
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
74
build/macosx/platform_specific_code/juce_mac_Debugging.mm
Normal file
74
build/macosx/platform_specific_code/juce_mac_Debugging.mm
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
//==============================================================================
|
||||
void Logger::outputDebugString (const String& text) throw()
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
NSLog (juceStringToNS (text + T("\n")));
|
||||
}
|
||||
|
||||
void Logger::outputDebugPrintf (const tchar* format, ...) throw()
|
||||
{
|
||||
String text;
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
text.vprintf(format, args);
|
||||
outputDebugString (text);
|
||||
}
|
||||
|
||||
bool JUCE_CALLTYPE juce_isRunningUnderDebugger() throw()
|
||||
{
|
||||
static char testResult = 0;
|
||||
|
||||
if (testResult == 0)
|
||||
{
|
||||
struct kinfo_proc info;
|
||||
int m[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() };
|
||||
size_t sz = sizeof (info);
|
||||
sysctl (m, 4, &info, &sz, 0, 0);
|
||||
testResult = ((info.kp_proc.p_flag & P_TRACED) != 0) ? 1 : -1;
|
||||
}
|
||||
|
||||
return testResult > 0;
|
||||
}
|
||||
|
||||
bool JUCE_CALLTYPE Process::isRunningUnderDebugger() throw()
|
||||
{
|
||||
return juce_isRunningUnderDebugger();
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
@ -1,156 +1,150 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "juce_mac_NativeHeaders.h"
|
||||
#include <fnmatch.h>
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
#include "../../../src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h"
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
|
||||
//==============================================================================
|
||||
@interface JuceFileChooserDelegate : NSObject
|
||||
{
|
||||
JUCE_NAMESPACE::StringArray* filters;
|
||||
}
|
||||
|
||||
- (JuceFileChooserDelegate*) initWithFilters: (JUCE_NAMESPACE::StringArray*) filters_;
|
||||
- (void) dealloc;
|
||||
- (BOOL) panel: (id) sender shouldShowFilename: (NSString*) filename;
|
||||
|
||||
@end
|
||||
|
||||
@implementation JuceFileChooserDelegate
|
||||
- (JuceFileChooserDelegate*) initWithFilters: (JUCE_NAMESPACE::StringArray*) filters_
|
||||
{
|
||||
[super init];
|
||||
filters = filters_;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
delete filters;
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (BOOL) panel:(id) sender shouldShowFilename: (NSString*) filename
|
||||
{
|
||||
const JUCE_NAMESPACE::String fname (nsStringToJuce (filename));
|
||||
|
||||
for (int i = filters->size(); --i >= 0;)
|
||||
{
|
||||
const JUCE_NAMESPACE::String wildcard ((*filters)[i]);
|
||||
|
||||
if (fnmatch (wildcard.toLowerCase().toUTF8(),
|
||||
fname.toLowerCase().toUTF8(), 0) == 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
return JUCE_NAMESPACE::File (fname).isDirectory();
|
||||
}
|
||||
@end
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
|
||||
void FileChooser::showPlatformDialog (OwnedArray<File>& results,
|
||||
const String& title,
|
||||
const File& currentFileOrDirectory,
|
||||
const String& filter,
|
||||
bool selectsDirectory,
|
||||
bool isSaveDialogue,
|
||||
bool warnAboutOverwritingExistingFiles,
|
||||
bool selectMultipleFiles,
|
||||
FilePreviewComponent* extraInfoComponent)
|
||||
{
|
||||
const AutoPool pool;
|
||||
|
||||
StringArray* filters = new StringArray();
|
||||
filters->addTokens (filter.replaceCharacters (T(",:"), T(";;")), T(";"), 0);
|
||||
filters->trim();
|
||||
filters->removeEmptyStrings();
|
||||
|
||||
JuceFileChooserDelegate* delegate = [[JuceFileChooserDelegate alloc] initWithFilters: filters];
|
||||
[delegate autorelease];
|
||||
|
||||
NSSavePanel* panel = isSaveDialogue ? [NSSavePanel savePanel]
|
||||
: [NSOpenPanel openPanel];
|
||||
|
||||
[panel setTitle: juceStringToNS (title)];
|
||||
|
||||
if (! isSaveDialogue)
|
||||
{
|
||||
NSOpenPanel* openPanel = (NSOpenPanel*) panel;
|
||||
[openPanel setCanChooseDirectories: selectsDirectory];
|
||||
[openPanel setCanChooseFiles: ! selectsDirectory];
|
||||
[openPanel setAllowsMultipleSelection: selectMultipleFiles];
|
||||
}
|
||||
|
||||
[panel setDelegate: delegate];
|
||||
|
||||
String directory, filename;
|
||||
|
||||
if (currentFileOrDirectory.isDirectory())
|
||||
{
|
||||
directory = currentFileOrDirectory.getFullPathName();
|
||||
}
|
||||
else
|
||||
{
|
||||
directory = currentFileOrDirectory.getParentDirectory().getFullPathName();
|
||||
filename = currentFileOrDirectory.getFileName();
|
||||
}
|
||||
|
||||
if ([panel runModalForDirectory: juceStringToNS (directory)
|
||||
file: juceStringToNS (filename)]
|
||||
== NSOKButton)
|
||||
{
|
||||
if (isSaveDialogue)
|
||||
{
|
||||
results.add (new File (nsStringToJuce ([panel filename])));
|
||||
}
|
||||
else
|
||||
{
|
||||
NSOpenPanel* openPanel = (NSOpenPanel*) panel;
|
||||
NSArray* urls = [openPanel filenames];
|
||||
for (int i = 0; i < [urls count]; ++i)
|
||||
{
|
||||
NSString* f = [urls objectAtIndex: i];
|
||||
results.add (new File (nsStringToJuce (f)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[panel setDelegate: nil];
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
//==============================================================================
|
||||
END_JUCE_NAMESPACE
|
||||
using namespace JUCE_NAMESPACE;
|
||||
|
||||
@interface JuceFileChooserDelegate : NSObject
|
||||
{
|
||||
StringArray* filters;
|
||||
}
|
||||
|
||||
- (JuceFileChooserDelegate*) initWithFilters: (StringArray*) filters_;
|
||||
- (void) dealloc;
|
||||
- (BOOL) panel: (id) sender shouldShowFilename: (NSString*) filename;
|
||||
|
||||
@end
|
||||
|
||||
@implementation JuceFileChooserDelegate
|
||||
- (JuceFileChooserDelegate*) initWithFilters: (StringArray*) filters_
|
||||
{
|
||||
[super init];
|
||||
filters = filters_;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
delete filters;
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (BOOL) panel: (id) sender shouldShowFilename: (NSString*) filename
|
||||
{
|
||||
const String fname (nsStringToJuce (filename));
|
||||
|
||||
for (int i = filters->size(); --i >= 0;)
|
||||
if (fname.matchesWildcard ((*filters)[i], true))
|
||||
return true;
|
||||
|
||||
return File (fname).isDirectory();
|
||||
}
|
||||
@end
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
//==============================================================================
|
||||
void FileChooser::showPlatformDialog (OwnedArray<File>& results,
|
||||
const String& title,
|
||||
const File& currentFileOrDirectory,
|
||||
const String& filter,
|
||||
bool selectsDirectory,
|
||||
bool isSaveDialogue,
|
||||
bool warnAboutOverwritingExistingFiles,
|
||||
bool selectMultipleFiles,
|
||||
FilePreviewComponent* extraInfoComponent)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
StringArray* filters = new StringArray();
|
||||
filters->addTokens (filter.replaceCharacters (T(",:"), T(";;")), T(";"), 0);
|
||||
filters->trim();
|
||||
filters->removeEmptyStrings();
|
||||
|
||||
JuceFileChooserDelegate* delegate = [[JuceFileChooserDelegate alloc] initWithFilters: filters];
|
||||
[delegate autorelease];
|
||||
|
||||
NSSavePanel* panel = isSaveDialogue ? [NSSavePanel savePanel]
|
||||
: [NSOpenPanel openPanel];
|
||||
|
||||
[panel setTitle: juceStringToNS (title)];
|
||||
|
||||
if (! isSaveDialogue)
|
||||
{
|
||||
NSOpenPanel* openPanel = (NSOpenPanel*) panel;
|
||||
[openPanel setCanChooseDirectories: selectsDirectory];
|
||||
[openPanel setCanChooseFiles: ! selectsDirectory];
|
||||
[openPanel setAllowsMultipleSelection: selectMultipleFiles];
|
||||
}
|
||||
|
||||
[panel setDelegate: delegate];
|
||||
|
||||
String directory, filename;
|
||||
|
||||
if (currentFileOrDirectory.isDirectory())
|
||||
{
|
||||
directory = currentFileOrDirectory.getFullPathName();
|
||||
}
|
||||
else
|
||||
{
|
||||
directory = currentFileOrDirectory.getParentDirectory().getFullPathName();
|
||||
filename = currentFileOrDirectory.getFileName();
|
||||
}
|
||||
|
||||
if ([panel runModalForDirectory: juceStringToNS (directory)
|
||||
file: juceStringToNS (filename)]
|
||||
== NSOKButton)
|
||||
{
|
||||
if (isSaveDialogue)
|
||||
{
|
||||
results.add (new File (nsStringToJuce ([panel filename])));
|
||||
}
|
||||
else
|
||||
{
|
||||
NSOpenPanel* openPanel = (NSOpenPanel*) panel;
|
||||
NSArray* urls = [openPanel filenames];
|
||||
for (int i = 0; i < [urls count]; ++i)
|
||||
{
|
||||
NSString* f = [urls objectAtIndex: i];
|
||||
results.add (new File (nsStringToJuce (f)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[panel setDelegate: nil];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
541
build/macosx/platform_specific_code/juce_mac_Files.mm
Normal file
541
build/macosx/platform_specific_code/juce_mac_Files.mm
Normal file
|
|
@ -0,0 +1,541 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
/*
|
||||
Note that a lot of methods that you'd expect to find in this file actually
|
||||
live in juce_posix_SharedCode.h!
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
static File executableFile;
|
||||
|
||||
const unsigned int macTimeToUnixTimeDiff = 0x7c25be90;
|
||||
|
||||
static uint64 utcDateTimeToUnixTime (const UTCDateTime& d) throw()
|
||||
{
|
||||
if (d.highSeconds == 0 && d.lowSeconds == 0 && d.fraction == 0)
|
||||
return 0;
|
||||
|
||||
return (((((uint64) d.highSeconds) << 32) | (uint64) d.lowSeconds) * 1000)
|
||||
+ ((d.fraction * 1000) >> 16)
|
||||
- 2082844800000ll;
|
||||
}
|
||||
|
||||
static void unixTimeToUtcDateTime (uint64 t, UTCDateTime& d) throw()
|
||||
{
|
||||
if (t != 0)
|
||||
t += 2082844800000ll;
|
||||
|
||||
d.highSeconds = (t / 1000) >> 32;
|
||||
d.lowSeconds = (t / 1000) & (uint64) 0xffffffff;
|
||||
d.fraction = ((t % 1000) << 16) / 1000;
|
||||
}
|
||||
|
||||
void juce_getFileTimes (const String& fileName,
|
||||
int64& modificationTime,
|
||||
int64& accessTime,
|
||||
int64& creationTime) throw()
|
||||
{
|
||||
modificationTime = 0;
|
||||
accessTime = 0;
|
||||
creationTime = 0;
|
||||
|
||||
FSRef fileRef;
|
||||
if (PlatformUtilities::makeFSRefFromPath (&fileRef, fileName))
|
||||
{
|
||||
FSRefParam info;
|
||||
zerostruct (info);
|
||||
|
||||
info.ref = &fileRef;
|
||||
info.whichInfo = kFSCatInfoAllDates;
|
||||
|
||||
FSCatalogInfo catInfo;
|
||||
info.catInfo = &catInfo;
|
||||
|
||||
if (PBGetCatalogInfoSync (&info) == noErr)
|
||||
{
|
||||
creationTime = utcDateTimeToUnixTime (catInfo.createDate);
|
||||
accessTime = utcDateTimeToUnixTime (catInfo.accessDate);
|
||||
modificationTime = utcDateTimeToUnixTime (catInfo.contentModDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool juce_setFileTimes (const String& fileName,
|
||||
int64 modificationTime,
|
||||
int64 accessTime,
|
||||
int64 creationTime) throw()
|
||||
{
|
||||
FSRef fileRef;
|
||||
if (PlatformUtilities::makeFSRefFromPath (&fileRef, fileName))
|
||||
{
|
||||
FSRefParam info;
|
||||
zerostruct (info);
|
||||
|
||||
info.ref = &fileRef;
|
||||
info.whichInfo = kFSCatInfoAllDates;
|
||||
|
||||
FSCatalogInfo catInfo;
|
||||
info.catInfo = &catInfo;
|
||||
|
||||
if (PBGetCatalogInfoSync (&info) == noErr)
|
||||
{
|
||||
if (creationTime != 0)
|
||||
unixTimeToUtcDateTime (creationTime, catInfo.createDate);
|
||||
|
||||
if (modificationTime != 0)
|
||||
unixTimeToUtcDateTime (modificationTime, catInfo.contentModDate);
|
||||
|
||||
if (accessTime != 0)
|
||||
unixTimeToUtcDateTime (accessTime, catInfo.accessDate);
|
||||
|
||||
return PBSetCatalogInfoSync (&info) == noErr;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool juce_setFileReadOnly (const String& fileName, bool isReadOnly) throw()
|
||||
{
|
||||
const char* const fileNameUTF8 = fileName.toUTF8();
|
||||
|
||||
struct stat info;
|
||||
const int res = stat (fileNameUTF8, &info);
|
||||
|
||||
bool ok = false;
|
||||
|
||||
if (res == 0)
|
||||
{
|
||||
info.st_mode &= 0777; // Just permissions
|
||||
|
||||
if (isReadOnly)
|
||||
info.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
|
||||
else
|
||||
// Give everybody write permission?
|
||||
info.st_mode |= S_IWUSR | S_IWGRP | S_IWOTH;
|
||||
|
||||
ok = chmod (fileNameUTF8, info.st_mode) == 0;
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool juce_copyFile (const String& src, const String& dst) throw()
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
NSFileManager* fm = [NSFileManager defaultManager];
|
||||
|
||||
return [fm fileExistsAtPath: juceStringToNS (src)]
|
||||
&& [fm copyPath: juceStringToNS (src)
|
||||
toPath: juceStringToNS (dst)
|
||||
handler: nil];
|
||||
}
|
||||
|
||||
const StringArray juce_getFileSystemRoots() throw()
|
||||
{
|
||||
StringArray s;
|
||||
s.add (T("/"));
|
||||
return s;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
static bool isFileOnDriveType (const File* const f, const char** types) throw()
|
||||
{
|
||||
struct statfs buf;
|
||||
|
||||
if (doStatFS (f, buf))
|
||||
{
|
||||
const String type (buf.f_fstypename);
|
||||
|
||||
while (*types != 0)
|
||||
if (type.equalsIgnoreCase (*types++))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool File::isOnCDRomDrive() const throw()
|
||||
{
|
||||
static const char* const cdTypes[] = { "cd9660", "cdfs", "cddafs", "udf", 0 };
|
||||
|
||||
return isFileOnDriveType (this, (const char**) cdTypes);
|
||||
}
|
||||
|
||||
bool File::isOnHardDisk() const throw()
|
||||
{
|
||||
static const char* const nonHDTypes[] = { "nfs", "smbfs", "ramfs", 0 };
|
||||
|
||||
return ! (isOnCDRomDrive() || isFileOnDriveType (this, (const char**) nonHDTypes));
|
||||
}
|
||||
|
||||
bool File::isOnRemovableDrive() const throw()
|
||||
{
|
||||
jassertfalse // xxx not implemented for mac!
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool juce_isHiddenFile (const String& path) throw()
|
||||
{
|
||||
FSRef ref;
|
||||
if (! PlatformUtilities::makeFSRefFromPath (&ref, path))
|
||||
return false;
|
||||
|
||||
FSCatalogInfo info;
|
||||
FSGetCatalogInfo (&ref, kFSCatInfoNodeFlags | kFSCatInfoFinderInfo, &info, 0, 0, 0);
|
||||
|
||||
if ((info.nodeFlags & kFSNodeIsDirectoryBit) != 0)
|
||||
return (((FolderInfo*) &info.finderInfo)->finderFlags & kIsInvisible) != 0;
|
||||
|
||||
return (((FileInfo*) &info.finderInfo)->finderFlags & kIsInvisible) != 0;
|
||||
}
|
||||
|
||||
bool File::isHidden() const throw()
|
||||
{
|
||||
return juce_isHiddenFile (getFullPathName());
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
const File File::getSpecialLocation (const SpecialLocationType type)
|
||||
{
|
||||
const char* resultPath = 0;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case userHomeDirectory:
|
||||
resultPath = nsStringToJuce (NSHomeDirectory());
|
||||
break;
|
||||
|
||||
case userDocumentsDirectory:
|
||||
resultPath = "~/Documents";
|
||||
break;
|
||||
|
||||
case userDesktopDirectory:
|
||||
resultPath = "~/Desktop";
|
||||
break;
|
||||
|
||||
case userApplicationDataDirectory:
|
||||
resultPath = "~/Library";
|
||||
break;
|
||||
|
||||
case commonApplicationDataDirectory:
|
||||
resultPath = "/Library";
|
||||
break;
|
||||
|
||||
case globalApplicationsDirectory:
|
||||
resultPath = "/Applications";
|
||||
break;
|
||||
|
||||
case userMusicDirectory:
|
||||
resultPath = "~/Music";
|
||||
break;
|
||||
|
||||
case userMoviesDirectory:
|
||||
resultPath = "~/Movies";
|
||||
break;
|
||||
|
||||
case tempDirectory:
|
||||
{
|
||||
File tmp (T("~/Library/Caches/") + executableFile.getFileNameWithoutExtension());
|
||||
|
||||
tmp.createDirectory();
|
||||
return tmp.getFullPathName();
|
||||
}
|
||||
|
||||
case currentExecutableFile:
|
||||
return executableFile;
|
||||
|
||||
case currentApplicationFile:
|
||||
{
|
||||
const File parent (executableFile.getParentDirectory());
|
||||
|
||||
return parent.getFullPathName().endsWithIgnoreCase (T("Contents/MacOS"))
|
||||
? parent.getParentDirectory().getParentDirectory()
|
||||
: executableFile;
|
||||
}
|
||||
|
||||
default:
|
||||
jassertfalse // unknown type?
|
||||
break;
|
||||
}
|
||||
|
||||
if (resultPath != 0)
|
||||
return File (PlatformUtilities::convertToPrecomposedUnicode (resultPath));
|
||||
|
||||
return File::nonexistent;
|
||||
}
|
||||
|
||||
void juce_setCurrentExecutableFileName (const String& filename) throw()
|
||||
{
|
||||
executableFile = File::getCurrentWorkingDirectory()
|
||||
.getChildFile (PlatformUtilities::convertToPrecomposedUnicode (filename));
|
||||
}
|
||||
|
||||
void juce_setCurrentExecutableFileNameFromBundleId (const String& bundleId) throw()
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
NSBundle* b = [NSBundle bundleWithIdentifier: juceStringToNS (bundleId)];
|
||||
|
||||
if (b != nil)
|
||||
executableFile = nsStringToJuce ([b executablePath]);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
const File File::getCurrentWorkingDirectory() throw()
|
||||
{
|
||||
char buf [2048];
|
||||
getcwd (buf, sizeof(buf));
|
||||
|
||||
return File (PlatformUtilities::convertToPrecomposedUnicode (buf));
|
||||
}
|
||||
|
||||
bool File::setAsCurrentWorkingDirectory() const throw()
|
||||
{
|
||||
return chdir (getFullPathName().toUTF8()) == 0;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
struct FindFileStruct
|
||||
{
|
||||
String parentDir, wildCard;
|
||||
DIR* dir;
|
||||
|
||||
bool getNextMatch (String& result, bool* const isDir, bool* const isHidden, int64* const fileSize,
|
||||
Time* const modTime, Time* const creationTime, bool* const isReadOnly) throw()
|
||||
{
|
||||
const char* const wildCardUTF8 = wildCard.toUTF8();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
struct dirent* const de = readdir (dir);
|
||||
|
||||
if (de == 0)
|
||||
break;
|
||||
|
||||
if (fnmatch (wildCardUTF8, de->d_name, 0) == 0)
|
||||
{
|
||||
result = PlatformUtilities::convertToPrecomposedUnicode (String::fromUTF8 ((const uint8*) de->d_name));
|
||||
|
||||
const String path (parentDir + result);
|
||||
|
||||
if (isDir != 0 || fileSize != 0)
|
||||
{
|
||||
struct stat info;
|
||||
const bool statOk = juce_stat (path, info);
|
||||
|
||||
if (isDir != 0)
|
||||
*isDir = path.isEmpty() || (statOk && ((info.st_mode & S_IFDIR) != 0));
|
||||
|
||||
if (isHidden != 0)
|
||||
*isHidden = (de->d_name[0] == '.')
|
||||
|| juce_isHiddenFile (path);
|
||||
|
||||
if (fileSize != 0)
|
||||
*fileSize = statOk ? info.st_size : 0;
|
||||
}
|
||||
|
||||
if (modTime != 0 || creationTime != 0)
|
||||
{
|
||||
int64 m, a, c;
|
||||
juce_getFileTimes (path, m, a, c);
|
||||
|
||||
if (modTime != 0)
|
||||
*modTime = m;
|
||||
|
||||
if (creationTime != 0)
|
||||
*creationTime = c;
|
||||
}
|
||||
|
||||
if (isReadOnly != 0)
|
||||
*isReadOnly = ! juce_canWriteToFile (path);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// returns 0 on failure
|
||||
void* juce_findFileStart (const String& directory, const String& wildCard, String& firstResultFile,
|
||||
bool* isDir, bool* isHidden, int64* fileSize, Time* modTime,
|
||||
Time* creationTime, bool* isReadOnly) throw()
|
||||
{
|
||||
DIR* const d = opendir (directory.toUTF8());
|
||||
|
||||
if (d != 0)
|
||||
{
|
||||
FindFileStruct* const ff = new FindFileStruct();
|
||||
ff->parentDir = directory;
|
||||
|
||||
if (!ff->parentDir.endsWithChar (File::separator))
|
||||
ff->parentDir += File::separator;
|
||||
|
||||
ff->wildCard = wildCard;
|
||||
ff->dir = d;
|
||||
|
||||
if (ff->getNextMatch (firstResultFile, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly))
|
||||
{
|
||||
return ff;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstResultFile = String::empty;
|
||||
isDir = false;
|
||||
closedir (d);
|
||||
delete ff;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool juce_findFileNext (void* handle, String& resultFile,
|
||||
bool* isDir, bool* isHidden, int64* fileSize, Time* modTime, Time* creationTime, bool* isReadOnly) throw()
|
||||
{
|
||||
FindFileStruct* const ff = (FindFileStruct*) handle;
|
||||
|
||||
if (ff != 0)
|
||||
return ff->getNextMatch (resultFile, isDir, isHidden, fileSize, modTime, creationTime, isReadOnly);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void juce_findFileClose (void* handle) throw()
|
||||
{
|
||||
FindFileStruct* const ff = (FindFileStruct*)handle;
|
||||
|
||||
if (ff != 0)
|
||||
{
|
||||
closedir (ff->dir);
|
||||
delete ff;
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool juce_launchExecutable (const String& pathAndArguments) throw()
|
||||
{
|
||||
char* const argv[4] = { "/bin/sh", "-c", (char*) (const char*) pathAndArguments, 0 };
|
||||
|
||||
const int cpid = fork();
|
||||
|
||||
if (cpid == 0)
|
||||
{
|
||||
// Child process
|
||||
if (execve (argv[0], argv, 0) < 0)
|
||||
exit (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cpid < 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool juce_launchFile (const String& fileName,
|
||||
const String& parameters) throw()
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
if (parameters.isEmpty())
|
||||
return [[NSWorkspace sharedWorkspace] openFile: juceStringToNS (fileName)];
|
||||
|
||||
bool ok = false;
|
||||
|
||||
FSRef ref;
|
||||
if (PlatformUtilities::makeFSRefFromPath (&ref, fileName))
|
||||
{
|
||||
if (PlatformUtilities::isBundle (fileName))
|
||||
{
|
||||
NSMutableArray* urls = [NSMutableArray array];
|
||||
|
||||
StringArray docs;
|
||||
docs.addTokens (parameters, true);
|
||||
for (int i = 0; i < docs.size(); ++i)
|
||||
[urls addObject: juceStringToNS (docs[i])];
|
||||
|
||||
ok = [[NSWorkspace sharedWorkspace] openURLs: urls
|
||||
withAppBundleIdentifier: [[NSBundle bundleWithPath: juceStringToNS (fileName)] bundleIdentifier]
|
||||
options: nil
|
||||
additionalEventParamDescriptor: nil
|
||||
launchIdentifiers: nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
ok = juce_launchExecutable (T("\"") + fileName + T("\" ") + parameters);
|
||||
}
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool PlatformUtilities::makeFSRefFromPath (FSRef* destFSRef, const String& path)
|
||||
{
|
||||
return FSPathMakeRef ((const UInt8*) path.toUTF8(), destFSRef, 0) == noErr;
|
||||
}
|
||||
|
||||
const String PlatformUtilities::makePathFromFSRef (FSRef* file)
|
||||
{
|
||||
uint8 path [2048];
|
||||
zeromem (path, sizeof (path));
|
||||
|
||||
String result;
|
||||
|
||||
if (FSRefMakePath (file, (UInt8*) path, sizeof (path) - 1) == noErr)
|
||||
result = String::fromUTF8 (path);
|
||||
|
||||
return PlatformUtilities::convertToPrecomposedUnicode (result);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
OSType PlatformUtilities::getTypeOfFile (const String& filename)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
return NSHFSTypeCodeFromFileType (NSHFSTypeOfFile (juceStringToNS (filename)));
|
||||
}
|
||||
|
||||
bool PlatformUtilities::isBundle (const String& filename)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
return [[NSWorkspace sharedWorkspace] isFilePackageAtPath: juceStringToNS (filename)];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -29,19 +29,9 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
#include <ApplicationServices/ApplicationServices.h>
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
|
||||
#include "../../../src/juce_appframework/gui/graphics/fonts/juce_Font.h"
|
||||
#include "../../../src/juce_appframework/events/juce_Timer.h"
|
||||
#include "../../../src/juce_appframework/events/juce_MessageManager.h"
|
||||
#include "../../../src/juce_appframework/application/juce_DeletedAtShutdown.h"
|
||||
#include "../../../src/juce_core/basics/juce_Singleton.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
|
||||
// (This file gets included by juce_mac_NativeCode.mm, rather than being
|
||||
// compiled on its own).
|
||||
#ifdef JUCE_INCLUDED_FILE
|
||||
|
||||
//==============================================================================
|
||||
static OSStatus pascal CubicMoveTo (const Float32Point *pt,
|
||||
|
|
@ -539,5 +529,4 @@ void Font::getDefaultFontNames (String& defaultSans, String& defaultSerif, Strin
|
|||
defaultFixed = "Monaco";
|
||||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
414
build/macosx/platform_specific_code/juce_mac_MainMenu.mm
Normal file
414
build/macosx/platform_specific_code/juce_mac_MainMenu.mm
Normal file
|
|
@ -0,0 +1,414 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
//==============================================================================
|
||||
class JuceMainMenuHandler;
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
using namespace JUCE_NAMESPACE;
|
||||
|
||||
@interface JuceMenuCallback : NSObject
|
||||
{
|
||||
JuceMainMenuHandler* owner;
|
||||
}
|
||||
|
||||
- (JuceMenuCallback*) initWithOwner: (JuceMainMenuHandler*) owner_;
|
||||
- (void) dealloc;
|
||||
- (void) menuItemInvoked: (id) menu;
|
||||
|
||||
@end
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class JuceMainMenuHandler : private MenuBarModelListener,
|
||||
private DeletedAtShutdown
|
||||
{
|
||||
public:
|
||||
static JuceMainMenuHandler* instance;
|
||||
|
||||
//==============================================================================
|
||||
JuceMainMenuHandler() throw()
|
||||
: currentModel (0)
|
||||
{
|
||||
callback = [[JuceMenuCallback alloc] initWithOwner: this];
|
||||
}
|
||||
|
||||
~JuceMainMenuHandler() throw()
|
||||
{
|
||||
setMenu (0);
|
||||
|
||||
jassert (instance == this);
|
||||
instance = 0;
|
||||
|
||||
[callback release];
|
||||
}
|
||||
|
||||
void setMenu (MenuBarModel* const newMenuBarModel) throw()
|
||||
{
|
||||
if (currentModel != newMenuBarModel)
|
||||
{
|
||||
if (currentModel != 0)
|
||||
currentModel->removeListener (this);
|
||||
|
||||
currentModel = newMenuBarModel;
|
||||
|
||||
if (currentModel != 0)
|
||||
currentModel->addListener (this);
|
||||
|
||||
menuBarItemsChanged (0);
|
||||
}
|
||||
}
|
||||
|
||||
void addSubMenu (NSMenu* parent, const PopupMenu& child,
|
||||
const String& name, int& menuId, int& tag)
|
||||
{
|
||||
NSMenuItem* item = [parent addItemWithTitle: juceStringToNS (name)
|
||||
action: nil
|
||||
keyEquivalent: @""];
|
||||
[item setTag: tag];
|
||||
|
||||
NSMenu* sub = createMenu (child, name, menuId, tag);
|
||||
|
||||
[parent setSubmenu: sub forItem: item];
|
||||
[sub setAutoenablesItems: false];
|
||||
[sub release];
|
||||
}
|
||||
|
||||
void menuBarItemsChanged (MenuBarModel*)
|
||||
{
|
||||
NSMenu* menuBar = [NSApp mainMenu];
|
||||
while ([menuBar numberOfItems] > 1)
|
||||
[menuBar removeItemAtIndex: 1];
|
||||
|
||||
if (currentModel != 0)
|
||||
{
|
||||
const StringArray menuNames (currentModel->getMenuBarNames());
|
||||
int menuId = 1;
|
||||
|
||||
for (int i = 0; i < menuNames.size(); ++i)
|
||||
{
|
||||
const PopupMenu menu (currentModel->getMenuForIndex (i, menuNames [i]));
|
||||
addSubMenu (menuBar, menu, menuNames [i], menuId, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void flashMenuBar (NSMenu* menu)
|
||||
{
|
||||
const unichar f35Key = NSF35FunctionKey;
|
||||
NSString* f35String = [NSString stringWithCharacters: &f35Key length: 1];
|
||||
|
||||
NSMenuItem* item = [[NSMenuItem alloc] initWithTitle: @"x"
|
||||
action: nil
|
||||
keyEquivalent: f35String];
|
||||
[item setTarget: nil];
|
||||
[menu insertItem: item atIndex: [menu numberOfItems]];
|
||||
[item release];
|
||||
|
||||
NSEvent* f35Event = [NSEvent keyEventWithType: NSKeyDown
|
||||
location: NSZeroPoint
|
||||
modifierFlags: NSCommandKeyMask
|
||||
timestamp: 0
|
||||
windowNumber: 0
|
||||
context: [NSGraphicsContext currentContext]
|
||||
characters: f35String
|
||||
charactersIgnoringModifiers: f35String
|
||||
isARepeat: NO
|
||||
keyCode: 0];
|
||||
|
||||
[menu performKeyEquivalent: f35Event];
|
||||
[menu removeItem: item];
|
||||
}
|
||||
|
||||
void menuCommandInvoked (MenuBarModel*, const ApplicationCommandTarget::InvocationInfo& info)
|
||||
{
|
||||
NSMenuItem* item = [[NSApp mainMenu] itemWithTag: info.commandID];
|
||||
|
||||
if (item != 0)
|
||||
flashMenuBar ([item menu]);
|
||||
}
|
||||
|
||||
void invoke (const int commandId, ApplicationCommandManager* const commandManager, const int topLevelIndex) const
|
||||
{
|
||||
if (currentModel != 0)
|
||||
{
|
||||
if (commandManager != 0)
|
||||
{
|
||||
ApplicationCommandTarget::InvocationInfo info (commandId);
|
||||
info.invocationMethod = ApplicationCommandTarget::InvocationInfo::fromMenu;
|
||||
|
||||
commandManager->invoke (info, true);
|
||||
}
|
||||
|
||||
currentModel->menuItemSelected (commandId, topLevelIndex);
|
||||
}
|
||||
}
|
||||
|
||||
MenuBarModel* currentModel;
|
||||
|
||||
private:
|
||||
JuceMenuCallback* callback;
|
||||
|
||||
NSMenu* createMenu (const PopupMenu menu,
|
||||
const String& menuName,
|
||||
int& id,
|
||||
const int topLevelIndex)
|
||||
{
|
||||
NSMenu* m = [[NSMenu alloc] initWithTitle: juceStringToNS (menuName)];
|
||||
|
||||
[m setAutoenablesItems: false];
|
||||
|
||||
PopupMenu::MenuItemIterator iter (menu);
|
||||
|
||||
while (iter.next())
|
||||
{
|
||||
NSString* text = juceStringToNS (iter.itemName.upToFirstOccurrenceOf (T("<end>"), false, true));
|
||||
|
||||
if (iter.isSeparator)
|
||||
{
|
||||
[m addItem: [NSMenuItem separatorItem]];
|
||||
}
|
||||
else if (iter.isSectionHeader)
|
||||
{
|
||||
NSMenuItem* item = [m addItemWithTitle: text
|
||||
action: nil
|
||||
keyEquivalent: @""];
|
||||
|
||||
[item setEnabled: iter.isEnabled];
|
||||
}
|
||||
else if (iter.subMenu != 0)
|
||||
{
|
||||
NSMenuItem* item = [m addItemWithTitle: text
|
||||
action: nil
|
||||
keyEquivalent: @""];
|
||||
|
||||
[item setTag: iter.itemId];
|
||||
[item setEnabled: iter.isEnabled];
|
||||
|
||||
NSMenu* sub = createMenu (*iter.subMenu, iter.itemName, id, topLevelIndex);
|
||||
[m setSubmenu: sub forItem: item];
|
||||
[sub release];
|
||||
}
|
||||
else
|
||||
{
|
||||
NSMenuItem* item = [m addItemWithTitle: text
|
||||
action: @selector (menuItemInvoked:)
|
||||
keyEquivalent: @""];
|
||||
|
||||
[item setTag: iter.itemId];
|
||||
[item setEnabled: iter.isEnabled];
|
||||
[item setState: iter.isTicked ? NSOnState : NSOffState];
|
||||
[item setTarget: (id) callback];
|
||||
|
||||
NSMutableArray* info = [NSMutableArray arrayWithObject: [NSNumber numberWithUnsignedLongLong: (pointer_sized_int) (void*) iter.commandManager]];
|
||||
[info addObject: [NSNumber numberWithInt: topLevelIndex]];
|
||||
[item setRepresentedObject: info];
|
||||
|
||||
if (iter.commandManager != 0)
|
||||
{
|
||||
const Array <KeyPress> keyPresses (iter.commandManager->getKeyMappings()
|
||||
->getKeyPressesAssignedToCommand (iter.itemId));
|
||||
|
||||
if (keyPresses.size() > 0)
|
||||
{
|
||||
const KeyPress& kp = keyPresses.getReference(0);
|
||||
|
||||
juce_wchar key = kp.getTextCharacter();
|
||||
|
||||
if (kp.getKeyCode() == KeyPress::backspaceKey)
|
||||
key = NSBackspaceCharacter;
|
||||
else if (kp.getKeyCode() == KeyPress::deleteKey)
|
||||
key = NSDeleteCharacter;
|
||||
else if (key == 0)
|
||||
key = (juce_wchar) kp.getKeyCode();
|
||||
|
||||
unsigned int mods = 0;
|
||||
if (kp.getModifiers().isShiftDown())
|
||||
mods |= NSShiftKeyMask;
|
||||
if (kp.getModifiers().isCtrlDown())
|
||||
mods |= NSControlKeyMask;
|
||||
if (kp.getModifiers().isAltDown())
|
||||
mods |= NSAlternateKeyMask;
|
||||
if (kp.getModifiers().isCommandDown())
|
||||
mods |= NSCommandKeyMask;
|
||||
|
||||
[item setKeyEquivalent: juceStringToNS (String::charToString (key))];
|
||||
[item setKeyEquivalentModifierMask: mods];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[m update];
|
||||
return m;
|
||||
}
|
||||
};
|
||||
|
||||
JuceMainMenuHandler* JuceMainMenuHandler::instance = 0;
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
@implementation JuceMenuCallback
|
||||
|
||||
- (JuceMenuCallback*) initWithOwner: (JuceMainMenuHandler*) owner_
|
||||
{
|
||||
[super init];
|
||||
owner = owner_;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) menuItemInvoked: (id) menu
|
||||
{
|
||||
NSMenuItem* item = (NSMenuItem*) menu;
|
||||
|
||||
if ([[item representedObject] isKindOfClass: [NSArray class]])
|
||||
{
|
||||
NSArray* info = (NSArray*) [item representedObject];
|
||||
|
||||
owner->invoke ([item tag],
|
||||
(ApplicationCommandManager*) (pointer_sized_int)
|
||||
[((NSNumber*) [info objectAtIndex: 0]) unsignedLongLongValue],
|
||||
(int) [((NSNumber*) [info objectAtIndex: 1]) intValue]);
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
void MenuBarModel::setMacMainMenu (MenuBarModel* newMenuBarModel) throw()
|
||||
{
|
||||
if (getMacMainMenu() != newMenuBarModel)
|
||||
{
|
||||
if (newMenuBarModel == 0)
|
||||
{
|
||||
delete JuceMainMenuHandler::instance;
|
||||
jassert (JuceMainMenuHandler::instance == 0); // should be zeroed in the destructor
|
||||
}
|
||||
else
|
||||
{
|
||||
if (JuceMainMenuHandler::instance == 0)
|
||||
JuceMainMenuHandler::instance = new JuceMainMenuHandler();
|
||||
|
||||
JuceMainMenuHandler::instance->setMenu (newMenuBarModel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MenuBarModel* MenuBarModel::getMacMainMenu() throw()
|
||||
{
|
||||
return JuceMainMenuHandler::instance != 0
|
||||
? JuceMainMenuHandler::instance->currentModel : 0;
|
||||
}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
static NSMenu* createStandardAppMenu (const String& appName)
|
||||
{
|
||||
NSMenu* menu = [[NSMenu alloc] initWithTitle: @"Apple"];
|
||||
NSMenuItem* item;
|
||||
|
||||
// xxx should allow the 'about' and 'preferences' items to be turned on programatically...
|
||||
/* item = [menu addItemWithTitle: juceStringToNS ("About " + appName)]
|
||||
action: @selector(orderFrontStandardAboutPanel:) keyEquivalent: @""];
|
||||
[item setTarget: NSApp];
|
||||
[menu addItem: [NSMenuItem separatorItem]];
|
||||
*/
|
||||
|
||||
/* item = [menu addItemWithTitle: NSLocalizedString (@"Preferences...", nil)
|
||||
action: nil keyEquivalent: @","];
|
||||
[menu addItem: [NSMenuItem separatorItem]];
|
||||
*/
|
||||
|
||||
// Services...
|
||||
item = [menu addItemWithTitle: NSLocalizedString (@"Services", nil)
|
||||
action: nil keyEquivalent: @""];
|
||||
NSMenu* servicesMenu = [[NSMenu alloc] initWithTitle: @"Services"];
|
||||
[menu setSubmenu: servicesMenu forItem: item];
|
||||
[NSApp setServicesMenu: servicesMenu];
|
||||
[servicesMenu release];
|
||||
[menu addItem: [NSMenuItem separatorItem]];
|
||||
|
||||
// Hide + Show stuff...
|
||||
item = [menu addItemWithTitle: juceStringToNS ("Hide " + appName)
|
||||
action: @selector (hide:) keyEquivalent: @"h"];
|
||||
[item setTarget: NSApp];
|
||||
|
||||
item = [menu addItemWithTitle: NSLocalizedString (@"Hide Others", nil)
|
||||
action: @selector (hideOtherApplications:) keyEquivalent: @"h"];
|
||||
[item setKeyEquivalentModifierMask: NSCommandKeyMask | NSAlternateKeyMask];
|
||||
[item setTarget: NSApp];
|
||||
|
||||
item = [menu addItemWithTitle: NSLocalizedString (@"Show All", nil)
|
||||
action: @selector (unhideAllApplications:) keyEquivalent: @""];
|
||||
[item setTarget: NSApp];
|
||||
[menu addItem: [NSMenuItem separatorItem]];
|
||||
|
||||
// Quit item....
|
||||
item = [menu addItemWithTitle: juceStringToNS ("Quit " + appName)
|
||||
action: @selector (terminate:) keyEquivalent: @"q"];
|
||||
[item setTarget: NSApp];
|
||||
|
||||
return menu;
|
||||
}
|
||||
|
||||
// Since our app has no NIB, this initialises a standard app menu...
|
||||
void initialiseMainMenu()
|
||||
{
|
||||
if (JUCEApplication::getInstance() != 0) // only needed in an app
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
NSMenu* mainMenu = [[NSMenu alloc] initWithTitle: @"MainMenu"];
|
||||
NSMenuItem* item = [mainMenu addItemWithTitle: @"Apple" action: nil keyEquivalent: @""];
|
||||
|
||||
NSMenu* appMenu = createStandardAppMenu (JUCEApplication::getInstance()->getApplicationName());
|
||||
|
||||
[NSApp performSelector: @selector (setAppleMenu:) withObject: appMenu];
|
||||
[mainMenu setSubmenu: appMenu forItem: item];
|
||||
|
||||
[NSApp setMainMenu: mainMenu];
|
||||
[appMenu release];
|
||||
[mainMenu release];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
275
build/macosx/platform_specific_code/juce_mac_MessageManager.mm
Normal file
275
build/macosx/platform_specific_code/juce_mac_MessageManager.mm
Normal file
|
|
@ -0,0 +1,275 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
using namespace JUCE_NAMESPACE;
|
||||
|
||||
@interface JuceAppDelegate : NSObject
|
||||
{
|
||||
id oldDelegate;
|
||||
}
|
||||
|
||||
- (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;
|
||||
@end
|
||||
|
||||
@implementation JuceAppDelegate
|
||||
|
||||
- (JuceAppDelegate*) init
|
||||
{
|
||||
[super init];
|
||||
|
||||
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];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app
|
||||
{
|
||||
if (JUCEApplication::getInstance() != 0)
|
||||
{
|
||||
JUCEApplication::getInstance()->systemRequestedQuit();
|
||||
|
||||
if (! MessageManager::getInstance()->hasStopMessageBeenSent())
|
||||
return NSTerminateCancel;
|
||||
}
|
||||
|
||||
return NSTerminateNow;
|
||||
}
|
||||
|
||||
- (BOOL) application: (NSApplication*) app openFile: (NSString*) filename
|
||||
{
|
||||
if (JUCEApplication::getInstance() != 0)
|
||||
{
|
||||
JUCEApplication::getInstance()->anotherInstanceStarted (nsStringToJuce (filename));
|
||||
return YES;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames
|
||||
{
|
||||
StringArray files;
|
||||
for (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(" ")));
|
||||
}
|
||||
|
||||
- (void) applicationDidBecomeActive: (NSNotification*) aNotification
|
||||
{
|
||||
juce_HandleProcessFocusChange();
|
||||
}
|
||||
|
||||
- (void) applicationDidResignActive: (NSNotification*) aNotification
|
||||
{
|
||||
juce_HandleProcessFocusChange();
|
||||
}
|
||||
|
||||
- (void) applicationWillUnhide: (NSNotification*) aNotification
|
||||
{
|
||||
juce_HandleProcessFocusChange();
|
||||
}
|
||||
|
||||
- (void) customEvent: (id) n
|
||||
{
|
||||
NSData* data = (NSData*) n;
|
||||
void* message = 0;
|
||||
[data getBytes: &message length: sizeof (message)];
|
||||
|
||||
if (message != 0)
|
||||
MessageManager::getInstance()->deliverMessage (message);
|
||||
|
||||
[data release];
|
||||
}
|
||||
|
||||
- (void) performCallback: (id) info
|
||||
{
|
||||
CallbackMessagePayload* pl = (CallbackMessagePayload*) info;
|
||||
|
||||
if (pl != 0)
|
||||
{
|
||||
pl->result = (*pl->function) (pl->parameter);
|
||||
pl->hasBeenExecuted = true;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
static JuceAppDelegate* juceAppDelegate = 0;
|
||||
|
||||
void MessageManager::runDispatchLoop()
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
MessageManagerLock mml;
|
||||
|
||||
// must only be called by the message thread!
|
||||
jassert (isThisTheMessageThread());
|
||||
|
||||
[NSApp run];
|
||||
}
|
||||
|
||||
void MessageManager::stopDispatchLoop()
|
||||
{
|
||||
quitMessagePosted = true;
|
||||
[NSApp stop: nil];
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode
|
||||
beforeDate: endDate];
|
||||
|
||||
NSEvent* e = [NSApp nextEventMatchingMask: NSAnyEventMask
|
||||
untilDate: endDate
|
||||
inMode: NSDefaultRunLoopMode
|
||||
dequeue: YES];
|
||||
[NSApp sendEvent: e];
|
||||
}
|
||||
|
||||
return ! quitMessagePosted;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void MessageManager::doPlatformSpecificInitialisation()
|
||||
{
|
||||
if (juceAppDelegate == 0)
|
||||
juceAppDelegate = [[JuceAppDelegate alloc] init];
|
||||
|
||||
initialiseMainMenu();
|
||||
}
|
||||
|
||||
void MessageManager::doPlatformSpecificShutdown()
|
||||
{
|
||||
[[NSRunLoop currentRunLoop] cancelPerformSelectorsWithTarget: juceAppDelegate];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver: juceAppDelegate];
|
||||
[juceAppDelegate release];
|
||||
juceAppDelegate = 0;
|
||||
}
|
||||
|
||||
bool juce_postMessageToSystemQueue (void* message)
|
||||
{
|
||||
[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
|
||||
{
|
||||
CallbackMessagePayload cmp;
|
||||
cmp.function = callback;
|
||||
cmp.parameter = data;
|
||||
cmp.result = 0;
|
||||
cmp.hasBeenExecuted = false;
|
||||
|
||||
[juceAppDelegate performSelectorOnMainThread: @selector (performCallback:)
|
||||
withObject: (id) &cmp
|
||||
waitUntilDone: YES];
|
||||
|
||||
return cmp.result;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -1,503 +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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "juce_mac_NativeHeaders.h"
|
||||
#include <Carbon/Carbon.h>
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_appframework/events/juce_MessageManager.h"
|
||||
#include "../../../src/juce_appframework/application/juce_Application.h"
|
||||
#include "../../../src/juce_appframework/gui/components/juce_Desktop.h"
|
||||
#include "../../../src/juce_core/text/juce_StringArray.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
|
||||
#undef Point
|
||||
|
||||
extern void juce_HandleProcessFocusChange();
|
||||
extern void juce_maximiseAllMinimisedWindows();
|
||||
extern void juce_InvokeMainMenuCommand (const HICommand& command);
|
||||
extern void juce_MainMenuAboutToBeUsed();
|
||||
|
||||
struct CallbackMessagePayload
|
||||
{
|
||||
MessageCallbackFunction* function;
|
||||
void* parameter;
|
||||
void* volatile result;
|
||||
bool volatile hasBeenExecuted;
|
||||
};
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
#if JUCE_COCOA
|
||||
|
||||
NSString* juceMessageName = 0;
|
||||
|
||||
@interface JuceAppDelegate : NSObject
|
||||
id oldDelegate;
|
||||
- (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: (NSNotification*) aNotification;
|
||||
- (void) performCallback: (id) info;
|
||||
@end
|
||||
|
||||
@implementation JuceAppDelegate
|
||||
|
||||
- (JuceAppDelegate*) init
|
||||
{
|
||||
[super init];
|
||||
|
||||
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
||||
|
||||
if (JUCE_NAMESPACE::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];
|
||||
|
||||
}
|
||||
|
||||
[center addObserver: self selector: @selector (customEvent:)
|
||||
name: juceMessageName object: nil];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
if (oldDelegate != 0)
|
||||
[NSApp setDelegate: oldDelegate];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] removeObserver: self];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) app
|
||||
{
|
||||
if (JUCE_NAMESPACE::JUCEApplication::getInstance() != 0)
|
||||
JUCE_NAMESPACE::JUCEApplication::getInstance()->systemRequestedQuit();
|
||||
|
||||
return NSTerminateLater;
|
||||
}
|
||||
|
||||
- (BOOL) application: (NSApplication*) app openFile: (NSString*) filename
|
||||
{
|
||||
if (JUCE_NAMESPACE::JUCEApplication::getInstance() != 0)
|
||||
{
|
||||
JUCE_NAMESPACE::JUCEApplication::getInstance()->anotherInstanceStarted (nsStringToJuce (filename));
|
||||
return YES;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void) application: (NSApplication*) sender openFiles: (NSArray*) filenames
|
||||
{
|
||||
JUCE_NAMESPACE::StringArray files;
|
||||
for (int i = 0; i < [filenames count]; ++i)
|
||||
files.add (nsStringToJuce ((NSString*) [filenames objectAtIndex: i]));
|
||||
|
||||
if (files.size() > 0 && JUCE_NAMESPACE::JUCEApplication::getInstance() != 0)
|
||||
JUCE_NAMESPACE::JUCEApplication::getInstance()->anotherInstanceStarted (files.joinIntoString (T(" ")));
|
||||
}
|
||||
|
||||
- (void) applicationDidBecomeActive: (NSNotification*) aNotification
|
||||
{
|
||||
JUCE_NAMESPACE::juce_HandleProcessFocusChange();
|
||||
}
|
||||
|
||||
- (void) applicationDidResignActive: (NSNotification*) aNotification
|
||||
{
|
||||
JUCE_NAMESPACE::juce_HandleProcessFocusChange();
|
||||
}
|
||||
|
||||
- (void) applicationWillUnhide: (NSNotification*) aNotification
|
||||
{
|
||||
JUCE_NAMESPACE::juce_maximiseAllMinimisedWindows();
|
||||
}
|
||||
|
||||
- (void) customEvent: (NSNotification*) n
|
||||
{
|
||||
void* message = 0;
|
||||
[((NSData*) [n object]) getBytes: &message length: sizeof (message)];
|
||||
|
||||
if (message != 0)
|
||||
JUCE_NAMESPACE::MessageManager::getInstance()->deliverMessage (message);
|
||||
}
|
||||
|
||||
- (void) performCallback: (id) info
|
||||
{
|
||||
JUCE_NAMESPACE::CallbackMessagePayload* pl = (JUCE_NAMESPACE::CallbackMessagePayload*) info;
|
||||
|
||||
if (pl != 0)
|
||||
{
|
||||
pl->result = (*pl->function) (pl->parameter);
|
||||
pl->hasBeenExecuted = true;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
#endif
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
|
||||
#if JUCE_COCOA
|
||||
static JuceAppDelegate* juceAppDelegate = 0;
|
||||
|
||||
#else
|
||||
static int kJUCEClass = FOUR_CHAR_CODE ('JUCE');
|
||||
const int kJUCEKind = 1;
|
||||
const int kCallbackKind = 2;
|
||||
|
||||
|
||||
static pascal OSStatus EventHandlerProc (EventHandlerCallRef, EventRef theEvent, void* userData)
|
||||
{
|
||||
void* event = 0;
|
||||
GetEventParameter (theEvent, 'mess', typeVoidPtr, 0, sizeof (void*), 0, &event);
|
||||
|
||||
if (event != 0)
|
||||
MessageManager::getInstance()->deliverMessage (event);
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
static pascal OSStatus CallbackHandlerProc (EventHandlerCallRef, EventRef theEvent, void* userData)
|
||||
{
|
||||
CallbackMessagePayload* pl = 0;
|
||||
GetEventParameter (theEvent, 'mess', typeVoidPtr, 0, sizeof(pl), 0, &pl);
|
||||
|
||||
if (pl != 0)
|
||||
{
|
||||
pl->result = (*pl->function) (pl->parameter);
|
||||
pl->hasBeenExecuted = true;
|
||||
}
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
static pascal OSStatus MouseClickHandlerProc (EventHandlerCallRef, EventRef theEvent, void* userData)
|
||||
{
|
||||
::Point where;
|
||||
GetEventParameter (theEvent, kEventParamMouseLocation, typeQDPoint, 0, sizeof(::Point), 0, &where);
|
||||
WindowRef window;
|
||||
if (FindWindow (where, &window) == inMenuBar)
|
||||
{
|
||||
// turn off the wait cursor before going in here..
|
||||
const int oldTimeBeforeWaitCursor = MessageManager::getInstance()->getTimeBeforeShowingWaitCursor();
|
||||
MessageManager::getInstance()->setTimeBeforeShowingWaitCursor (0);
|
||||
|
||||
if (Component::getCurrentlyModalComponent() != 0)
|
||||
Component::getCurrentlyModalComponent()->inputAttemptWhenModal();
|
||||
|
||||
juce_MainMenuAboutToBeUsed();
|
||||
MenuSelect (where);
|
||||
HiliteMenu (0);
|
||||
|
||||
MessageManager::getInstance()->setTimeBeforeShowingWaitCursor (oldTimeBeforeWaitCursor);
|
||||
return noErr;
|
||||
}
|
||||
|
||||
return eventNotHandledErr;
|
||||
}
|
||||
|
||||
static pascal OSErr QuitAppleEventHandler (const AppleEvent *appleEvt, AppleEvent* reply, long refcon)
|
||||
{
|
||||
if (JUCEApplication::getInstance() != 0)
|
||||
JUCEApplication::getInstance()->systemRequestedQuit();
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
static pascal OSErr OpenDocEventHandler (const AppleEvent *appleEvt, AppleEvent* reply, long refcon)
|
||||
{
|
||||
AEDescList docs;
|
||||
StringArray files;
|
||||
|
||||
if (AEGetParamDesc (appleEvt, keyDirectObject, typeAEList, &docs) == noErr)
|
||||
{
|
||||
long num;
|
||||
if (AECountItems (&docs, &num) == noErr)
|
||||
{
|
||||
for (int i = 1; i <= num; ++i)
|
||||
{
|
||||
FSRef file;
|
||||
AEKeyword keyword;
|
||||
DescType type;
|
||||
Size size;
|
||||
|
||||
if (AEGetNthPtr (&docs, i, typeFSRef, &keyword, &type,
|
||||
&file, sizeof (file), &size) == noErr)
|
||||
{
|
||||
const String path (PlatformUtilities::makePathFromFSRef (&file));
|
||||
|
||||
if (path.isNotEmpty())
|
||||
files.add (path.quoted());
|
||||
}
|
||||
}
|
||||
|
||||
if (files.size() > 0
|
||||
&& JUCEApplication::getInstance() != 0)
|
||||
{
|
||||
JUCE_TRY
|
||||
{
|
||||
JUCEApplication::getInstance()
|
||||
->anotherInstanceStarted (files.joinIntoString (T(" ")));
|
||||
}
|
||||
JUCE_CATCH_ALL
|
||||
}
|
||||
}
|
||||
|
||||
AEDisposeDesc (&docs);
|
||||
};
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
static pascal OSStatus AppEventHandlerProc (EventHandlerCallRef, EventRef theEvent, void* userData)
|
||||
{
|
||||
const UInt32 eventClass = GetEventClass (theEvent);
|
||||
|
||||
if (eventClass == kEventClassCommand)
|
||||
{
|
||||
HICommand command;
|
||||
|
||||
if (GetEventParameter (theEvent, kEventParamHICommand, typeHICommand, 0, sizeof (command), 0, &command) == noErr
|
||||
|| GetEventParameter (theEvent, kEventParamDirectObject, typeHICommand, 0, sizeof (command), 0, &command) == noErr)
|
||||
{
|
||||
if (command.commandID == kHICommandQuit)
|
||||
{
|
||||
if (JUCEApplication::getInstance() != 0)
|
||||
JUCEApplication::getInstance()->systemRequestedQuit();
|
||||
|
||||
return noErr;
|
||||
}
|
||||
else if (command.commandID == kHICommandMaximizeAll
|
||||
|| command.commandID == kHICommandMaximizeWindow
|
||||
|| command.commandID == kHICommandBringAllToFront)
|
||||
{
|
||||
juce_maximiseAllMinimisedWindows();
|
||||
return noErr;
|
||||
}
|
||||
else
|
||||
{
|
||||
juce_InvokeMainMenuCommand (command);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (eventClass == kEventClassApplication)
|
||||
{
|
||||
if (GetEventKind (theEvent) == kEventAppFrontSwitched)
|
||||
{
|
||||
juce_HandleProcessFocusChange();
|
||||
}
|
||||
else if (GetEventKind (theEvent) == kEventAppShown)
|
||||
{
|
||||
// this seems to blank the windows, so we need to do a repaint..
|
||||
for (int i = Desktop::getInstance().getNumComponents(); --i >= 0;)
|
||||
{
|
||||
Component* const c = Desktop::getInstance().getComponent (i);
|
||||
|
||||
if (c != 0)
|
||||
c->repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return eventNotHandledErr;
|
||||
}
|
||||
|
||||
static EventQueueRef mainQueue;
|
||||
static EventHandlerRef juceEventHandler = 0;
|
||||
static EventHandlerRef callbackEventHandler = 0;
|
||||
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
void MessageManager::doPlatformSpecificInitialisation()
|
||||
{
|
||||
static bool initialised = false;
|
||||
|
||||
if (! initialised)
|
||||
{
|
||||
initialised = true;
|
||||
|
||||
#if JUCE_COCOA
|
||||
// if we're linking a Juce app to one or more dynamic libraries, we'll need different values
|
||||
// for this so each module doesn't interfere with the others.
|
||||
UnsignedWide t;
|
||||
Microseconds (&t);
|
||||
kJUCEClass ^= t.lo;
|
||||
|
||||
juceMessageName = juceStringToNS ("juce_" + String::toHexString ((int) t.lo));
|
||||
|
||||
juceAppDelegate = [[JuceAppDelegate alloc] init];
|
||||
#else
|
||||
mainQueue = GetMainEventQueue();
|
||||
#endif
|
||||
}
|
||||
|
||||
#if ! JUCE_COCOA
|
||||
const EventTypeSpec type1 = { kJUCEClass, kJUCEKind };
|
||||
InstallApplicationEventHandler (NewEventHandlerUPP (EventHandlerProc), 1, &type1, 0, &juceEventHandler);
|
||||
|
||||
const EventTypeSpec type2 = { kJUCEClass, kCallbackKind };
|
||||
InstallApplicationEventHandler (NewEventHandlerUPP (CallbackHandlerProc), 1, &type2, 0, &callbackEventHandler);
|
||||
|
||||
// only do this stuff if we're running as an application rather than a library..
|
||||
if (JUCEApplication::getInstance() != 0)
|
||||
{
|
||||
const EventTypeSpec type3 = { kEventClassMouse, kEventMouseDown };
|
||||
InstallApplicationEventHandler (NewEventHandlerUPP (MouseClickHandlerProc), 1, &type3, 0, 0);
|
||||
|
||||
const EventTypeSpec type4[] = { { kEventClassApplication, kEventAppShown },
|
||||
{ kEventClassApplication, kEventAppFrontSwitched },
|
||||
{ kEventClassCommand, kEventProcessCommand } };
|
||||
|
||||
InstallApplicationEventHandler (NewEventHandlerUPP (AppEventHandlerProc), 3, type4, 0, 0);
|
||||
|
||||
AEInstallEventHandler (kCoreEventClass, kAEQuitApplication,
|
||||
NewAEEventHandlerUPP (QuitAppleEventHandler), 0, false);
|
||||
|
||||
AEInstallEventHandler (kCoreEventClass, kAEOpenDocuments,
|
||||
NewAEEventHandlerUPP (OpenDocEventHandler), 0, false);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void MessageManager::doPlatformSpecificShutdown()
|
||||
{
|
||||
if (juceEventHandler != 0)
|
||||
{
|
||||
RemoveEventHandler (juceEventHandler);
|
||||
juceEventHandler = 0;
|
||||
}
|
||||
|
||||
if (callbackEventHandler != 0)
|
||||
{
|
||||
RemoveEventHandler (callbackEventHandler);
|
||||
callbackEventHandler = 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool juce_postMessageToSystemQueue (void* message)
|
||||
{
|
||||
#if JUCE_COCOA
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName: juceMessageName
|
||||
object: [NSData dataWithBytes: &message
|
||||
length: (int) sizeof (message)]];
|
||||
|
||||
return true;
|
||||
|
||||
#else
|
||||
jassert (mainQueue == GetMainEventQueue());
|
||||
|
||||
EventRef event;
|
||||
if (CreateEvent (0, kJUCEClass, kJUCEKind, 0, kEventAttributeUserEvent, &event) == noErr)
|
||||
{
|
||||
SetEventParameter (event, 'mess', typeVoidPtr, sizeof (void*), &message);
|
||||
const bool ok = PostEventToQueue (mainQueue, event, kEventPriorityStandard) == noErr;
|
||||
ReleaseEvent (event);
|
||||
return ok;
|
||||
}
|
||||
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void MessageManager::broadcastMessage (const String& value) throw()
|
||||
{
|
||||
}
|
||||
|
||||
void* MessageManager::callFunctionOnMessageThread (MessageCallbackFunction* callback,
|
||||
void* data)
|
||||
{
|
||||
if (isThisTheMessageThread())
|
||||
{
|
||||
return (*callback) (data);
|
||||
}
|
||||
else
|
||||
{
|
||||
CallbackMessagePayload cmp;
|
||||
cmp.function = callback;
|
||||
cmp.parameter = data;
|
||||
cmp.result = 0;
|
||||
cmp.hasBeenExecuted = false;
|
||||
|
||||
#if JUCE_COCOA
|
||||
[juceAppDelegate performSelectorOnMainThread: @selector (performCallback:)
|
||||
withObject: (id) &cmp
|
||||
waitUntilDone: YES];
|
||||
|
||||
return cmp.result;
|
||||
|
||||
#else
|
||||
jassert (mainQueue == GetMainEventQueue());
|
||||
|
||||
EventRef event;
|
||||
if (CreateEvent (0, kJUCEClass, kCallbackKind, 0, kEventAttributeUserEvent, &event) == noErr)
|
||||
{
|
||||
void* v = &cmp;
|
||||
SetEventParameter (event, 'mess', typeVoidPtr, sizeof (void*), &v);
|
||||
|
||||
if (PostEventToQueue (mainQueue, event, kEventPriorityStandard) == noErr)
|
||||
{
|
||||
while (! cmp.hasBeenExecuted)
|
||||
Thread::yield();
|
||||
|
||||
return cmp.result;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
238
build/macosx/platform_specific_code/juce_mac_MiscUtilities.mm
Normal file
238
build/macosx/platform_specific_code/juce_mac_MiscUtilities.mm
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
|
||||
//==============================================================================
|
||||
ScopedAutoReleasePool::ScopedAutoReleasePool()
|
||||
{
|
||||
pool = [[NSAutoreleasePool alloc] init];
|
||||
}
|
||||
|
||||
ScopedAutoReleasePool::~ScopedAutoReleasePool()
|
||||
{
|
||||
[((NSAutoreleasePool*) pool) release];
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void PlatformUtilities::beep()
|
||||
{
|
||||
NSBeep();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool AlertWindow::showNativeDialogBox (const String& title,
|
||||
const String& bodyText,
|
||||
bool isOkCancel)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
return NSRunAlertPanel (juceStringToNS (title),
|
||||
juceStringToNS (bodyText),
|
||||
@"Ok",
|
||||
isOkCancel ? @"Cancel" : nil,
|
||||
nil) == 0;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool DragAndDropContainer::performExternalDragDropOfFiles (const StringArray& files, const bool canMoveFiles)
|
||||
{
|
||||
if (files.size() == 0)
|
||||
return false;
|
||||
|
||||
Component* sourceComp = Component::getComponentUnderMouse();
|
||||
|
||||
if (sourceComp == 0)
|
||||
{
|
||||
jassertfalse // this method must be called in response to a
|
||||
// component's mouseDrag event!
|
||||
return false;
|
||||
}
|
||||
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
NSView* view = (NSView*) sourceComp->getWindowHandle();
|
||||
|
||||
if (view == 0)
|
||||
return false;
|
||||
|
||||
NSPasteboard* pboard = [NSPasteboard pasteboardWithName: NSDragPboard];
|
||||
[pboard declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType]
|
||||
owner: nil];
|
||||
|
||||
NSMutableArray* filesArray = [NSMutableArray arrayWithCapacity: 4];
|
||||
for (int i = 0; i < files.size(); ++i)
|
||||
[filesArray addObject: juceStringToNS (files[i])];
|
||||
|
||||
[pboard setPropertyList: filesArray
|
||||
forType: NSFilenamesPboardType];
|
||||
|
||||
NSPoint dragPosition = [view convertPoint: [[[view window] currentEvent] locationInWindow]
|
||||
fromView: nil];
|
||||
dragPosition.x -= 16;
|
||||
dragPosition.y -= 16;
|
||||
|
||||
[view dragImage: [[NSWorkspace sharedWorkspace] iconForFile: juceStringToNS (files[0])]
|
||||
at: dragPosition
|
||||
offset: NSMakeSize (0, 0)
|
||||
event: [[view window] currentEvent]
|
||||
pasteboard: pboard
|
||||
source: view
|
||||
slideBack: YES];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DragAndDropContainer::performExternalDragDropOfText (const String& text)
|
||||
{
|
||||
jassertfalse // not implemented!
|
||||
return false;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool Desktop::canUseSemiTransparentWindows() throw()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void Desktop::getMousePosition (int& x, int& y) throw()
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
const NSPoint p ([NSEvent mouseLocation]);
|
||||
x = roundFloatToInt (p.x);
|
||||
y = roundFloatToInt ([[NSScreen mainScreen] frame].size.height - p.y);
|
||||
}
|
||||
|
||||
void Desktop::setMousePosition (int x, int y) throw()
|
||||
{
|
||||
// this rubbish needs to be done around the warp call, to avoid causing a
|
||||
// bizarre glitch..
|
||||
CGAssociateMouseAndMouseCursorPosition (false);
|
||||
CGSetLocalEventsSuppressionInterval (0);
|
||||
|
||||
CGPoint pos = { x, y };
|
||||
CGWarpMouseCursorPosition (pos);
|
||||
|
||||
CGAssociateMouseAndMouseCursorPosition (true);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
#if MACOS_10_4_OR_EARLIER
|
||||
class ScreenSaverDefeater : public Timer,
|
||||
public DeletedAtShutdown
|
||||
{
|
||||
public:
|
||||
ScreenSaverDefeater() throw()
|
||||
{
|
||||
startTimer (10000);
|
||||
timerCallback();
|
||||
}
|
||||
|
||||
~ScreenSaverDefeater() {}
|
||||
|
||||
void timerCallback()
|
||||
{
|
||||
if (Process::isForegroundProcess())
|
||||
UpdateSystemActivity (UsrActivity);
|
||||
}
|
||||
};
|
||||
|
||||
static ScreenSaverDefeater* screenSaverDefeater = 0;
|
||||
|
||||
void Desktop::setScreenSaverEnabled (const bool isEnabled) throw()
|
||||
{
|
||||
if (screenSaverDefeater == 0)
|
||||
screenSaverDefeater = new ScreenSaverDefeater();
|
||||
}
|
||||
|
||||
bool Desktop::isScreenSaverEnabled() throw()
|
||||
{
|
||||
return screenSaverDefeater == 0;
|
||||
}
|
||||
|
||||
#else
|
||||
//==============================================================================
|
||||
static IOPMAssertionID screenSaverDisablerID = 0;
|
||||
|
||||
void Desktop::setScreenSaverEnabled (const bool isEnabled) throw()
|
||||
{
|
||||
if (isEnabled)
|
||||
{
|
||||
if (screenSaverDisablerID != 0)
|
||||
{
|
||||
IOPMAssertionRelease (screenSaverDisablerID);
|
||||
screenSaverDisablerID = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (screenSaverDisablerID == 0)
|
||||
{
|
||||
IOPMAssertionCreate (kIOPMAssertionTypeNoIdleSleep,
|
||||
kIOPMAssertionLevelOn, &screenSaverDisablerID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Desktop::isScreenSaverEnabled() throw()
|
||||
{
|
||||
return screenSaverDisablerID == 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
void juce_updateMultiMonitorInfo (Array <Rectangle>& monitorCoords, const bool clipToWorkArea) throw()
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
monitorCoords.clear();
|
||||
NSArray* screens = [NSScreen screens];
|
||||
const float mainScreenBottom = [[NSScreen mainScreen] frame].size.height;
|
||||
|
||||
for (int i = 0; i < [screens count]; ++i)
|
||||
{
|
||||
NSScreen* s = (NSScreen*) [screens objectAtIndex: i];
|
||||
|
||||
NSRect r = clipToWorkArea ? [s visibleFrame]
|
||||
: [s frame];
|
||||
|
||||
monitorCoords.add (Rectangle ((int) r.origin.x,
|
||||
(int) (mainScreenBottom - (r.origin.y + r.size.height)),
|
||||
(int) r.size.width,
|
||||
(int) r.size.height));
|
||||
}
|
||||
|
||||
jassert (monitorCoords.size() > 0);
|
||||
}
|
||||
|
||||
#endif
|
||||
196
build/macosx/platform_specific_code/juce_mac_MouseCursor.mm
Normal file
196
build/macosx/platform_specific_code/juce_mac_MouseCursor.mm
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
//==============================================================================
|
||||
static NSImage* juceImageToNSImage (const Image& image)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
int lineStride, pixelStride;
|
||||
const uint8* pixels = image.lockPixelDataReadOnly (0, 0, image.getWidth(), image.getHeight(),
|
||||
lineStride, pixelStride);
|
||||
|
||||
NSBitmapImageRep* rep = [[NSBitmapImageRep alloc]
|
||||
initWithBitmapDataPlanes: NULL
|
||||
pixelsWide: image.getWidth()
|
||||
pixelsHigh: image.getHeight()
|
||||
bitsPerSample: 8
|
||||
samplesPerPixel: image.hasAlphaChannel() ? 4 : 3
|
||||
hasAlpha: image.hasAlphaChannel()
|
||||
isPlanar: NO
|
||||
colorSpaceName: NSCalibratedRGBColorSpace
|
||||
bitmapFormat: (NSBitmapFormat) 0
|
||||
bytesPerRow: lineStride
|
||||
bitsPerPixel: pixelStride * 8];
|
||||
|
||||
unsigned char* newData = [rep bitmapData];
|
||||
memcpy (newData, pixels, lineStride * image.getHeight());
|
||||
image.releasePixelDataReadOnly (pixels);
|
||||
|
||||
NSImage* im = [[NSImage alloc] init];
|
||||
[im addRepresentation: rep];
|
||||
[rep release];
|
||||
|
||||
return im;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void* juce_createMouseCursorFromImage (const Image& image, int hotspotX, int hotspotY) throw()
|
||||
{
|
||||
NSImage* im = juceImageToNSImage (image);
|
||||
NSCursor* c = [[NSCursor alloc] initWithImage: im
|
||||
hotSpot: NSMakePoint (hotspotX, hotspotY)];
|
||||
[im release];
|
||||
|
||||
return (void*) c;
|
||||
}
|
||||
|
||||
static void* juce_cursorFromData (const unsigned char* data, const int size, float hx, float hy) throw()
|
||||
{
|
||||
Image* const im = ImageFileFormat::loadFrom ((const char*) data, size);
|
||||
jassert (im != 0);
|
||||
|
||||
if (im == 0)
|
||||
return 0;
|
||||
|
||||
void* const curs = juce_createMouseCursorFromImage (*im,
|
||||
(int) (hx * im->getWidth()),
|
||||
(int) (hy * im->getHeight()));
|
||||
delete im;
|
||||
return curs;
|
||||
}
|
||||
|
||||
static void* juce_cursorFromWebKitFile (const char* filename, float hx, float hy)
|
||||
{
|
||||
File f ("/System/Library/Frameworks/WebKit.framework/Frameworks/WebCore.framework/Resources");
|
||||
|
||||
MemoryBlock mb;
|
||||
if (f.getChildFile (filename).loadFileAsData (mb))
|
||||
return juce_cursorFromData ((const unsigned char*) mb.getData(), mb.getSize(), hx, hy);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* juce_createStandardMouseCursor (MouseCursor::StandardCursorType type) throw()
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
NSCursor* c = 0;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case MouseCursor::NormalCursor:
|
||||
c = [NSCursor arrowCursor];
|
||||
break;
|
||||
|
||||
case MouseCursor::NoCursor:
|
||||
{
|
||||
Image blank (Image::ARGB, 8, 8, true);
|
||||
return juce_createMouseCursorFromImage (blank, 0, 0);
|
||||
}
|
||||
|
||||
case MouseCursor::DraggingHandCursor:
|
||||
c = [NSCursor openHandCursor];
|
||||
break;
|
||||
|
||||
case MouseCursor::CopyingCursor:
|
||||
return juce_cursorFromWebKitFile ("copyCursor.png", 0, 0);
|
||||
|
||||
case MouseCursor::WaitCursor:
|
||||
c = [NSCursor arrowCursor]; // avoid this on the mac, let the OS provide the beachball
|
||||
break;
|
||||
//return juce_cursorFromWebKitFile ("waitCursor.png", 0.5f, 0.5f);
|
||||
|
||||
case MouseCursor::IBeamCursor:
|
||||
c = [NSCursor IBeamCursor];
|
||||
break;
|
||||
|
||||
case MouseCursor::PointingHandCursor:
|
||||
c = [NSCursor pointingHandCursor];
|
||||
break;
|
||||
|
||||
case MouseCursor::LeftRightResizeCursor:
|
||||
c = [NSCursor resizeLeftRightCursor];
|
||||
break;
|
||||
|
||||
case MouseCursor::LeftEdgeResizeCursor:
|
||||
c = [NSCursor resizeLeftCursor];
|
||||
break;
|
||||
|
||||
case MouseCursor::RightEdgeResizeCursor:
|
||||
c = [NSCursor resizeRightCursor];
|
||||
break;
|
||||
|
||||
case MouseCursor::UpDownResizeCursor:
|
||||
case MouseCursor::TopEdgeResizeCursor:
|
||||
case MouseCursor::BottomEdgeResizeCursor:
|
||||
return juce_cursorFromWebKitFile ("northSouthResizeCursor.png", 0.5f, 0.5f);
|
||||
|
||||
case MouseCursor::TopLeftCornerResizeCursor:
|
||||
case MouseCursor::BottomRightCornerResizeCursor:
|
||||
return juce_cursorFromWebKitFile ("northWestSouthEastResizeCursor.png", 0.5f, 0.5f);
|
||||
|
||||
case MouseCursor::TopRightCornerResizeCursor:
|
||||
case MouseCursor::BottomLeftCornerResizeCursor:
|
||||
return juce_cursorFromWebKitFile ("northEastSouthWestResizeCursor.png", 0.5f, 0.5f);
|
||||
|
||||
case MouseCursor::UpDownLeftRightResizeCursor:
|
||||
return juce_cursorFromWebKitFile ("moveCursor.png", 0.5f, 0.5f);
|
||||
|
||||
case MouseCursor::CrosshairCursor:
|
||||
c = [NSCursor crosshairCursor];
|
||||
break;
|
||||
}
|
||||
|
||||
[c retain];
|
||||
return (void*) c;
|
||||
}
|
||||
|
||||
void juce_deleteMouseCursor (void* const cursorHandle, const bool isStandard) throw()
|
||||
{
|
||||
NSCursor* c = (NSCursor*) cursorHandle;
|
||||
[c release];
|
||||
}
|
||||
|
||||
void MouseCursor::showInAllWindows() const throw()
|
||||
{
|
||||
showInWindow (0);
|
||||
}
|
||||
|
||||
void MouseCursor::showInWindow (ComponentPeer*) const throw()
|
||||
{
|
||||
NSCursor* const c = (NSCursor*) getHandle();
|
||||
[c set];
|
||||
}
|
||||
|
||||
#endif
|
||||
149
build/macosx/platform_specific_code/juce_mac_NSViewComponent.mm
Normal file
149
build/macosx/platform_specific_code/juce_mac_NSViewComponent.mm
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
//==============================================================================
|
||||
class NSViewComponentInternal : public ComponentMovementWatcher
|
||||
{
|
||||
Component* const owner;
|
||||
NSViewComponentPeer* currentPeer;
|
||||
bool wasShowing;
|
||||
|
||||
public:
|
||||
NSView* view;
|
||||
|
||||
//==============================================================================
|
||||
NSViewComponentInternal (NSView* view_, Component* const owner_)
|
||||
: ComponentMovementWatcher (owner_),
|
||||
owner (owner_),
|
||||
wasShowing (false),
|
||||
currentPeer (0),
|
||||
view (view_)
|
||||
{
|
||||
[view retain];
|
||||
|
||||
if (owner_->isShowing())
|
||||
componentPeerChanged();
|
||||
}
|
||||
|
||||
~NSViewComponentInternal()
|
||||
{
|
||||
[view removeFromSuperview];
|
||||
[view release];
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/)
|
||||
{
|
||||
Component* const topComp = owner->getTopLevelComponent();
|
||||
|
||||
if (topComp->getPeer() != 0)
|
||||
{
|
||||
int x = 0, y = 0;
|
||||
owner->relativePositionToOtherComponent (topComp, x, y);
|
||||
|
||||
NSRect r;
|
||||
r.origin.x = (float) x;
|
||||
r.origin.y = (float) y;
|
||||
r.size.width = (float) owner->getWidth();
|
||||
r.size.height = (float) owner->getHeight();
|
||||
r.origin.y = [[view superview] frame].size.height - (r.origin.y + r.size.height);
|
||||
|
||||
[view setFrame: r];
|
||||
}
|
||||
}
|
||||
|
||||
void componentPeerChanged()
|
||||
{
|
||||
NSViewComponentPeer* const peer = dynamic_cast <NSViewComponentPeer*> (owner->getPeer());
|
||||
|
||||
if (currentPeer != peer)
|
||||
{
|
||||
[view removeFromSuperview];
|
||||
currentPeer = peer;
|
||||
|
||||
if (peer != 0)
|
||||
{
|
||||
[peer->view addSubview: view];
|
||||
componentMovedOrResized (false, false);
|
||||
}
|
||||
}
|
||||
|
||||
[view setHidden: ! owner->isShowing()];
|
||||
}
|
||||
|
||||
void componentVisibilityChanged (Component&)
|
||||
{
|
||||
componentPeerChanged();
|
||||
}
|
||||
|
||||
juce_UseDebuggingNewOperator
|
||||
|
||||
private:
|
||||
NSViewComponentInternal (const NSViewComponentInternal&);
|
||||
const NSViewComponentInternal& operator= (const NSViewComponentInternal&);
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
NSViewComponent::NSViewComponent()
|
||||
: info (0)
|
||||
{
|
||||
}
|
||||
|
||||
NSViewComponent::~NSViewComponent()
|
||||
{
|
||||
delete info;
|
||||
}
|
||||
|
||||
void NSViewComponent::setView (void* view)
|
||||
{
|
||||
if (view != getView())
|
||||
{
|
||||
deleteAndZero (info);
|
||||
|
||||
if (view != 0)
|
||||
info = new NSViewComponentInternal ((NSView*) view, this);
|
||||
}
|
||||
}
|
||||
|
||||
void* NSViewComponent::getView() const
|
||||
{
|
||||
return info == 0 ? 0 : info->view;
|
||||
}
|
||||
|
||||
void NSViewComponent::paint (Graphics& g)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
1258
build/macosx/platform_specific_code/juce_mac_NSViewComponentPeer.mm
Normal file
1258
build/macosx/platform_specific_code/juce_mac_NSViewComponentPeer.mm
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,236 +1,236 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <sys/dir.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
// As well as being for the mac, this file is included by the linux build.
|
||||
|
||||
#if ! JUCE_MAC
|
||||
#include <sys/wait.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/io/files/juce_File.h"
|
||||
#include "../../../src/juce_core/io/files/juce_NamedPipe.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
struct NamedPipeInternal
|
||||
{
|
||||
String pipeInName, pipeOutName;
|
||||
int pipeIn, pipeOut;
|
||||
|
||||
bool volatile createdPipe, blocked, stopReadOperation;
|
||||
|
||||
static void signalHandler (int) {}
|
||||
};
|
||||
|
||||
void NamedPipe::cancelPendingReads()
|
||||
{
|
||||
while (internal != 0 && ((NamedPipeInternal*) internal)->blocked)
|
||||
{
|
||||
NamedPipeInternal* const intern = (NamedPipeInternal*) internal;
|
||||
|
||||
intern->stopReadOperation = true;
|
||||
|
||||
char buffer [1] = { 0 };
|
||||
::write (intern->pipeIn, buffer, 1);
|
||||
|
||||
int timeout = 2000;
|
||||
while (intern->blocked && --timeout >= 0)
|
||||
Thread::sleep (2);
|
||||
|
||||
intern->stopReadOperation = false;
|
||||
}
|
||||
}
|
||||
|
||||
void NamedPipe::close()
|
||||
{
|
||||
NamedPipeInternal* const intern = (NamedPipeInternal*) internal;
|
||||
|
||||
if (intern != 0)
|
||||
{
|
||||
internal = 0;
|
||||
|
||||
if (intern->pipeIn != -1)
|
||||
::close (intern->pipeIn);
|
||||
|
||||
if (intern->pipeOut != -1)
|
||||
::close (intern->pipeOut);
|
||||
|
||||
if (intern->createdPipe)
|
||||
{
|
||||
unlink (intern->pipeInName);
|
||||
unlink (intern->pipeOutName);
|
||||
}
|
||||
|
||||
delete intern;
|
||||
}
|
||||
}
|
||||
|
||||
bool NamedPipe::openInternal (const String& pipeName, const bool createPipe)
|
||||
{
|
||||
close();
|
||||
|
||||
NamedPipeInternal* const intern = new NamedPipeInternal();
|
||||
internal = intern;
|
||||
intern->createdPipe = createPipe;
|
||||
intern->blocked = false;
|
||||
intern->stopReadOperation = false;
|
||||
|
||||
signal (SIGPIPE, NamedPipeInternal::signalHandler);
|
||||
siginterrupt (SIGPIPE, 1);
|
||||
|
||||
const String pipePath (T("/tmp/") + File::createLegalFileName (pipeName));
|
||||
|
||||
intern->pipeInName = pipePath + T("_in");
|
||||
intern->pipeOutName = pipePath + T("_out");
|
||||
intern->pipeIn = -1;
|
||||
intern->pipeOut = -1;
|
||||
|
||||
if (createPipe)
|
||||
{
|
||||
if ((mkfifo (intern->pipeInName, 0666) && errno != EEXIST)
|
||||
|| (mkfifo (intern->pipeOutName, 0666) && errno != EEXIST))
|
||||
{
|
||||
delete intern;
|
||||
internal = 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int NamedPipe::read (void* destBuffer, int maxBytesToRead, int /*timeOutMilliseconds*/)
|
||||
{
|
||||
int bytesRead = -1;
|
||||
NamedPipeInternal* const intern = (NamedPipeInternal*) internal;
|
||||
|
||||
if (intern != 0)
|
||||
{
|
||||
intern->blocked = true;
|
||||
|
||||
if (intern->pipeIn == -1)
|
||||
{
|
||||
if (intern->createdPipe)
|
||||
intern->pipeIn = ::open (intern->pipeInName, O_RDWR);
|
||||
else
|
||||
intern->pipeIn = ::open (intern->pipeOutName, O_RDWR);
|
||||
|
||||
if (intern->pipeIn == -1)
|
||||
{
|
||||
intern->blocked = false;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
bytesRead = 0;
|
||||
|
||||
char* p = (char*) destBuffer;
|
||||
|
||||
while (bytesRead < maxBytesToRead)
|
||||
{
|
||||
const int bytesThisTime = maxBytesToRead - bytesRead;
|
||||
const int numRead = ::read (intern->pipeIn, p, bytesThisTime);
|
||||
|
||||
if (numRead <= 0 || intern->stopReadOperation)
|
||||
{
|
||||
bytesRead = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
bytesRead += numRead;
|
||||
p += bytesRead;
|
||||
}
|
||||
|
||||
intern->blocked = false;
|
||||
}
|
||||
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
int NamedPipe::write (const void* sourceBuffer, int numBytesToWrite, int timeOutMilliseconds)
|
||||
{
|
||||
int bytesWritten = -1;
|
||||
NamedPipeInternal* const intern = (NamedPipeInternal*) internal;
|
||||
|
||||
if (intern != 0)
|
||||
{
|
||||
if (intern->pipeOut == -1)
|
||||
{
|
||||
if (intern->createdPipe)
|
||||
intern->pipeOut = ::open (intern->pipeOutName, O_WRONLY);
|
||||
else
|
||||
intern->pipeOut = ::open (intern->pipeInName, O_WRONLY);
|
||||
|
||||
if (intern->pipeOut == -1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
const char* p = (const char*) sourceBuffer;
|
||||
bytesWritten = 0;
|
||||
|
||||
const uint32 timeOutTime = Time::getMillisecondCounter() + timeOutMilliseconds;
|
||||
|
||||
while (bytesWritten < numBytesToWrite
|
||||
&& (timeOutMilliseconds < 0 || Time::getMillisecondCounter() < timeOutTime))
|
||||
{
|
||||
const int bytesThisTime = numBytesToWrite - bytesWritten;
|
||||
const int numWritten = ::write (intern->pipeOut, p, bytesThisTime);
|
||||
|
||||
if (numWritten <= 0)
|
||||
{
|
||||
bytesWritten = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
bytesWritten += numWritten;
|
||||
p += bytesWritten;
|
||||
}
|
||||
}
|
||||
|
||||
return bytesWritten;
|
||||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <sys/dir.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
// As well as being for the mac, this file is included by the linux build.
|
||||
|
||||
#if ! JUCE_MAC
|
||||
#include <sys/wait.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/io/files/juce_File.h"
|
||||
#include "../../../src/juce_core/io/files/juce_NamedPipe.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
struct NamedPipeInternal
|
||||
{
|
||||
String pipeInName, pipeOutName;
|
||||
int pipeIn, pipeOut;
|
||||
|
||||
bool volatile createdPipe, blocked, stopReadOperation;
|
||||
|
||||
static void signalHandler (int) {}
|
||||
};
|
||||
|
||||
void NamedPipe::cancelPendingReads()
|
||||
{
|
||||
while (internal != 0 && ((NamedPipeInternal*) internal)->blocked)
|
||||
{
|
||||
NamedPipeInternal* const intern = (NamedPipeInternal*) internal;
|
||||
|
||||
intern->stopReadOperation = true;
|
||||
|
||||
char buffer [1] = { 0 };
|
||||
::write (intern->pipeIn, buffer, 1);
|
||||
|
||||
int timeout = 2000;
|
||||
while (intern->blocked && --timeout >= 0)
|
||||
Thread::sleep (2);
|
||||
|
||||
intern->stopReadOperation = false;
|
||||
}
|
||||
}
|
||||
|
||||
void NamedPipe::close()
|
||||
{
|
||||
NamedPipeInternal* const intern = (NamedPipeInternal*) internal;
|
||||
|
||||
if (intern != 0)
|
||||
{
|
||||
internal = 0;
|
||||
|
||||
if (intern->pipeIn != -1)
|
||||
::close (intern->pipeIn);
|
||||
|
||||
if (intern->pipeOut != -1)
|
||||
::close (intern->pipeOut);
|
||||
|
||||
if (intern->createdPipe)
|
||||
{
|
||||
unlink (intern->pipeInName);
|
||||
unlink (intern->pipeOutName);
|
||||
}
|
||||
|
||||
delete intern;
|
||||
}
|
||||
}
|
||||
|
||||
bool NamedPipe::openInternal (const String& pipeName, const bool createPipe)
|
||||
{
|
||||
close();
|
||||
|
||||
NamedPipeInternal* const intern = new NamedPipeInternal();
|
||||
internal = intern;
|
||||
intern->createdPipe = createPipe;
|
||||
intern->blocked = false;
|
||||
intern->stopReadOperation = false;
|
||||
|
||||
signal (SIGPIPE, NamedPipeInternal::signalHandler);
|
||||
siginterrupt (SIGPIPE, 1);
|
||||
|
||||
const String pipePath (T("/tmp/") + File::createLegalFileName (pipeName));
|
||||
|
||||
intern->pipeInName = pipePath + T("_in");
|
||||
intern->pipeOutName = pipePath + T("_out");
|
||||
intern->pipeIn = -1;
|
||||
intern->pipeOut = -1;
|
||||
|
||||
if (createPipe)
|
||||
{
|
||||
if ((mkfifo (intern->pipeInName, 0666) && errno != EEXIST)
|
||||
|| (mkfifo (intern->pipeOutName, 0666) && errno != EEXIST))
|
||||
{
|
||||
delete intern;
|
||||
internal = 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int NamedPipe::read (void* destBuffer, int maxBytesToRead, int /*timeOutMilliseconds*/)
|
||||
{
|
||||
int bytesRead = -1;
|
||||
NamedPipeInternal* const intern = (NamedPipeInternal*) internal;
|
||||
|
||||
if (intern != 0)
|
||||
{
|
||||
intern->blocked = true;
|
||||
|
||||
if (intern->pipeIn == -1)
|
||||
{
|
||||
if (intern->createdPipe)
|
||||
intern->pipeIn = ::open (intern->pipeInName, O_RDWR);
|
||||
else
|
||||
intern->pipeIn = ::open (intern->pipeOutName, O_RDWR);
|
||||
|
||||
if (intern->pipeIn == -1)
|
||||
{
|
||||
intern->blocked = false;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
bytesRead = 0;
|
||||
|
||||
char* p = (char*) destBuffer;
|
||||
|
||||
while (bytesRead < maxBytesToRead)
|
||||
{
|
||||
const int bytesThisTime = maxBytesToRead - bytesRead;
|
||||
const int numRead = ::read (intern->pipeIn, p, bytesThisTime);
|
||||
|
||||
if (numRead <= 0 || intern->stopReadOperation)
|
||||
{
|
||||
bytesRead = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
bytesRead += numRead;
|
||||
p += bytesRead;
|
||||
}
|
||||
|
||||
intern->blocked = false;
|
||||
}
|
||||
|
||||
return bytesRead;
|
||||
}
|
||||
|
||||
int NamedPipe::write (const void* sourceBuffer, int numBytesToWrite, int timeOutMilliseconds)
|
||||
{
|
||||
int bytesWritten = -1;
|
||||
NamedPipeInternal* const intern = (NamedPipeInternal*) internal;
|
||||
|
||||
if (intern != 0)
|
||||
{
|
||||
if (intern->pipeOut == -1)
|
||||
{
|
||||
if (intern->createdPipe)
|
||||
intern->pipeOut = ::open (intern->pipeOutName, O_WRONLY);
|
||||
else
|
||||
intern->pipeOut = ::open (intern->pipeInName, O_WRONLY);
|
||||
|
||||
if (intern->pipeOut == -1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
const char* p = (const char*) sourceBuffer;
|
||||
bytesWritten = 0;
|
||||
|
||||
const uint32 timeOutTime = Time::getMillisecondCounter() + timeOutMilliseconds;
|
||||
|
||||
while (bytesWritten < numBytesToWrite
|
||||
&& (timeOutMilliseconds < 0 || Time::getMillisecondCounter() < timeOutTime))
|
||||
{
|
||||
const int bytesThisTime = numBytesToWrite - bytesWritten;
|
||||
const int numWritten = ::write (intern->pipeOut, p, bytesThisTime);
|
||||
|
||||
if (numWritten <= 0)
|
||||
{
|
||||
bytesWritten = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
bytesWritten += numWritten;
|
||||
p += bytesWritten;
|
||||
}
|
||||
}
|
||||
|
||||
return bytesWritten;
|
||||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
|
|
|||
111
build/macosx/platform_specific_code/juce_mac_NativeCode.mm
Normal file
111
build/macosx/platform_specific_code/juce_mac_NativeCode.mm
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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 wraps together all the mac-specific code, so that
|
||||
we can include all the native headers just once, and compile all our
|
||||
platform-specific stuff in one big lump, keeping it out of the way of
|
||||
the rest of the codebase.
|
||||
*/
|
||||
|
||||
#include "juce_mac_NativeIncludes.h"
|
||||
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
//==============================================================================
|
||||
#include "../../../src/juce_core/basics/juce_Singleton.h"
|
||||
#include "../../../src/juce_core/basics/juce_Random.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
#include "../../../src/juce_core/threads/juce_Process.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
#include "../../../src/juce_core/threads/juce_InterProcessLock.h"
|
||||
#include "../../../src/juce_core/io/files/juce_FileInputStream.h"
|
||||
#include "../../../src/juce_core/io/network/juce_URL.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
#include "../../../src/juce_core/text/juce_LocalisedStrings.h"
|
||||
#include "../../../src/juce_appframework/application/juce_DeletedAtShutdown.h"
|
||||
#include "../../../src/juce_appframework/application/juce_Application.h"
|
||||
#include "../../../src/juce_appframework/application/juce_SystemClipboard.h"
|
||||
#include "../../../src/juce_appframework/events/juce_MessageManager.h"
|
||||
#include "../../../src/juce_appframework/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h"
|
||||
#include "../../../src/juce_appframework/gui/graphics/imaging/juce_ImageFileFormat.h"
|
||||
#include "../../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h"
|
||||
#include "../../../src/juce_appframework/gui/components/juce_Desktop.h"
|
||||
#include "../../../src/juce_appframework/gui/components/menus/juce_MenuBarModel.h"
|
||||
#include "../../../src/juce_appframework/gui/components/special/juce_OpenGLComponent.h"
|
||||
#include "../../../src/juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.h"
|
||||
#include "../../../src/juce_appframework/gui/components/mouse/juce_DragAndDropContainer.h"
|
||||
#include "../../../src/juce_appframework/gui/components/keyboard/juce_KeyPressMappingSet.h"
|
||||
#include "../../../src/juce_appframework/gui/components/special/juce_NSViewComponent.h"
|
||||
#include "../../../src/juce_appframework/gui/components/layout/juce_ComponentMovementWatcher.h"
|
||||
#include "../../../src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h"
|
||||
#include "../../../src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h"
|
||||
#include "../../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h"
|
||||
#include "../../../src/juce_appframework/audio/audio_sources/juce_AudioSource.h"
|
||||
#include "../../../src/juce_appframework/audio/dsp/juce_AudioDataConverters.h"
|
||||
#include "../../../src/juce_appframework/audio/devices/juce_AudioIODeviceType.h"
|
||||
#include "../../../src/juce_appframework/audio/devices/juce_MidiOutput.h"
|
||||
#include "../../../src/juce_appframework/audio/devices/juce_MidiInput.h"
|
||||
#undef Point
|
||||
|
||||
//==============================================================================
|
||||
#define JUCE_INCLUDED_FILE 1
|
||||
|
||||
// Now include the actual code files..
|
||||
|
||||
#include "juce_mac_Strings.mm"
|
||||
#include "juce_mac_SystemStats.mm"
|
||||
#include "juce_mac_Network.mm"
|
||||
#include "juce_mac_Threads.mm"
|
||||
#include "juce_posix_SharedCode.h"
|
||||
#include "juce_mac_Files.mm"
|
||||
#include "juce_mac_MiscUtilities.mm"
|
||||
#include "juce_mac_Debugging.mm"
|
||||
|
||||
#if ! JUCE_ONLY_BUILD_CORE_LIBRARY
|
||||
#include "juce_mac_NSViewComponentPeer.mm"
|
||||
#include "juce_mac_MouseCursor.mm"
|
||||
#include "juce_mac_NSViewComponent.mm"
|
||||
#include "juce_mac_AppleRemote.mm"
|
||||
#include "juce_mac_OpenGLComponent.mm"
|
||||
#include "juce_mac_MainMenu.mm"
|
||||
#include "juce_mac_FileChooser.mm"
|
||||
#include "juce_mac_QuickTimeMovieComponent.mm"
|
||||
#include "juce_mac_AudioCDBurner.mm"
|
||||
#include "juce_mac_Fonts.mm"
|
||||
#include "juce_mac_MessageManager.mm"
|
||||
#include "juce_mac_WebBrowserComponent.mm"
|
||||
#include "juce_mac_CoreAudio.cpp"
|
||||
#include "juce_mac_CoreMidi.cpp"
|
||||
#endif
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
|
@ -64,4 +64,4 @@ static NSString* juceStringToNS (const JUCE_NAMESPACE::String& s)
|
|||
}
|
||||
|
||||
|
||||
#endif
|
||||
#endif // __JUCE_MAC_NATIVEHEADERS_JUCEHEADER__
|
||||
|
|
|
|||
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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 __JUCE_MAC_NATIVEINCLUDES_JUCEHEADER__
|
||||
#define __JUCE_MAC_NATIVEINCLUDES_JUCEHEADER__
|
||||
|
||||
/*
|
||||
This file wraps together all the mac-specific code, so that
|
||||
we can include all the native headers just once, and compile all our
|
||||
platform-specific stuff in one big lump, keeping it out of the way of
|
||||
the rest of the codebase.
|
||||
*/
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <CoreAudio/HostTime.h>
|
||||
#import <CoreAudio/AudioHardware.h>
|
||||
#import <CoreMIDI/MIDIServices.h>
|
||||
#import <QTKit/QTKit.h>
|
||||
#import <WebKit/WebKit.h>
|
||||
#import <DiscRecording/DiscRecording.h>
|
||||
#import <ApplicationServices/ApplicationServices.h>
|
||||
#import <IOKit/IOKitLib.h>
|
||||
#import <IOKit/IOCFPlugIn.h>
|
||||
#import <IOKit/hid/IOHIDLib.h>
|
||||
#import <IOKit/hid/IOHIDKeys.h>
|
||||
#import <IOKit/network/IOEthernetInterface.h>
|
||||
#import <IOKit/network/IONetworkInterface.h>
|
||||
#import <IOKit/network/IOEthernetController.h>
|
||||
#import <IOKit/pwr_mgt/IOPMLib.h>
|
||||
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/dir.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/mount.h>
|
||||
#include <fnmatch.h>
|
||||
#include <utime.h>
|
||||
|
||||
#if MACOS_10_4_OR_EARLIER
|
||||
#include <GLUT/glut.h>
|
||||
#endif
|
||||
|
||||
#endif // __JUCE_MAC_NATIVEINCLUDES_JUCEHEADER__
|
||||
|
|
@ -1,469 +1,449 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "juce_mac_NativeHeaders.h"
|
||||
|
||||
#include <IOKit/IOKitLib.h>
|
||||
#include <IOKit/network/IOEthernetInterface.h>
|
||||
#include <IOKit/network/IONetworkInterface.h>
|
||||
#include <IOKit/network/IOEthernetController.h>
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/text/juce_String.h"
|
||||
#include "../../../src/juce_core/basics/juce_Time.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
#include "../../../src/juce_core/basics/juce_Logger.h"
|
||||
#include "../../../src/juce_core/threads/juce_ScopedLock.h"
|
||||
#include "../../../src/juce_core/threads/juce_WaitableEvent.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
#include "../../../src/juce_core/containers/juce_MemoryBlock.h"
|
||||
#include "../../../src/juce_core/text/juce_StringArray.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
#include "../../../src/juce_core/io/network/juce_URL.h"
|
||||
|
||||
//#include "juce_mac_HTTPStream.h"
|
||||
|
||||
//==============================================================================
|
||||
static bool GetEthernetIterator (io_iterator_t* matchingServices) throw()
|
||||
{
|
||||
mach_port_t masterPort;
|
||||
|
||||
if (IOMasterPort (MACH_PORT_NULL, &masterPort) == KERN_SUCCESS)
|
||||
{
|
||||
CFMutableDictionaryRef dict = IOServiceMatching (kIOEthernetInterfaceClass);
|
||||
|
||||
if (dict != 0)
|
||||
{
|
||||
CFMutableDictionaryRef propDict = CFDictionaryCreateMutable (kCFAllocatorDefault,
|
||||
0,
|
||||
&kCFTypeDictionaryKeyCallBacks,
|
||||
&kCFTypeDictionaryValueCallBacks);
|
||||
|
||||
if (propDict != 0)
|
||||
{
|
||||
CFDictionarySetValue (propDict, CFSTR (kIOPrimaryInterface), kCFBooleanTrue);
|
||||
|
||||
CFDictionarySetValue (dict, CFSTR (kIOPropertyMatchKey), propDict);
|
||||
CFRelease (propDict);
|
||||
}
|
||||
}
|
||||
|
||||
return IOServiceGetMatchingServices (masterPort, dict, matchingServices) == KERN_SUCCESS;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int SystemStats::getMACAddresses (int64* addresses, int maxNum, const bool littleEndian) throw()
|
||||
{
|
||||
int numResults = 0;
|
||||
io_iterator_t it;
|
||||
|
||||
if (GetEthernetIterator (&it))
|
||||
{
|
||||
io_object_t i;
|
||||
|
||||
while ((i = IOIteratorNext (it)) != 0)
|
||||
{
|
||||
io_object_t controller;
|
||||
|
||||
if (IORegistryEntryGetParentEntry (i, kIOServicePlane, &controller) == KERN_SUCCESS)
|
||||
{
|
||||
CFTypeRef data = IORegistryEntryCreateCFProperty (controller,
|
||||
CFSTR (kIOMACAddress),
|
||||
kCFAllocatorDefault,
|
||||
0);
|
||||
if (data != 0)
|
||||
{
|
||||
UInt8 addr [kIOEthernetAddressSize];
|
||||
zeromem (addr, sizeof (addr));
|
||||
|
||||
CFDataGetBytes ((CFDataRef) data, CFRangeMake (0, sizeof (addr)), addr);
|
||||
CFRelease (data);
|
||||
|
||||
int64 a = 0;
|
||||
for (int i = 6; --i >= 0;)
|
||||
a = (a << 8) | addr[i];
|
||||
|
||||
if (! littleEndian)
|
||||
a = (int64) swapByteOrder ((uint64) a);
|
||||
|
||||
if (numResults < maxNum)
|
||||
{
|
||||
*addresses++ = a;
|
||||
++numResults;
|
||||
}
|
||||
}
|
||||
|
||||
IOObjectRelease (controller);
|
||||
}
|
||||
|
||||
IOObjectRelease (i);
|
||||
}
|
||||
|
||||
IOObjectRelease (it);
|
||||
}
|
||||
|
||||
return numResults;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAddress,
|
||||
const String& emailSubject,
|
||||
const String& bodyText,
|
||||
const StringArray& filesToAttach)
|
||||
{
|
||||
const AutoPool pool;
|
||||
|
||||
String script;
|
||||
script << "tell application \"Mail\"\r\n"
|
||||
"set newMessage to make new outgoing message with properties {subject:\""
|
||||
<< emailSubject.replace (T("\""), T("\\\""))
|
||||
<< "\", content:\""
|
||||
<< bodyText.replace (T("\""), T("\\\""))
|
||||
<< "\" & return & return}\r\n"
|
||||
"tell newMessage\r\n"
|
||||
"set visible to true\r\n"
|
||||
"set sender to \"sdfsdfsdfewf\"\r\n"
|
||||
"make new to recipient at end of to recipients with properties {address:\""
|
||||
<< targetEmailAddress
|
||||
<< "\"}\r\n";
|
||||
|
||||
for (int i = 0; i < filesToAttach.size(); ++i)
|
||||
{
|
||||
script << "tell content\r\n"
|
||||
"make new attachment with properties {file name:\""
|
||||
<< filesToAttach[i].replace (T("\""), T("\\\""))
|
||||
<< "\"} at after the last paragraph\r\n"
|
||||
"end tell\r\n";
|
||||
}
|
||||
|
||||
script << "end tell\r\n"
|
||||
"end tell\r\n";
|
||||
|
||||
NSAppleScript* s = [[NSAppleScript alloc]
|
||||
initWithSource: [NSString stringWithUTF8String: (const char*) script.toUTF8()]];
|
||||
NSDictionary* error = 0;
|
||||
const bool ok = [s executeAndReturnError: &error] != nil;
|
||||
[s release];
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
using namespace JUCE_NAMESPACE;
|
||||
|
||||
//==============================================================================
|
||||
@interface JuceURLConnection : NSObject
|
||||
{
|
||||
NSURLRequest* request;
|
||||
NSURLConnection* connection;
|
||||
NSMutableData* data;
|
||||
Thread* runLoopThread;
|
||||
bool initialised, hasFailed, hasFinished;
|
||||
int position;
|
||||
NSLock* dataLock;
|
||||
}
|
||||
|
||||
- (JuceURLConnection*) initWithRequest: (NSURLRequest*) req withCallback: (URL::OpenStreamProgressCallback*) callback withContext: (void*) context;
|
||||
- (void) dealloc;
|
||||
- (void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) response;
|
||||
- (void) connection: (NSURLConnection*) connection didFailWithError: (NSError*) error;
|
||||
- (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) data;
|
||||
- (void) connectionDidFinishLoading: (NSURLConnection*) connection;
|
||||
|
||||
- (BOOL) isOpen;
|
||||
- (int) read: (char*) dest numBytes: (int) num;
|
||||
- (int) readPosition;
|
||||
- (void) stop;
|
||||
- (void) createConnection;
|
||||
|
||||
@end
|
||||
|
||||
class JuceURLConnectionMessageThread : public Thread
|
||||
{
|
||||
JuceURLConnection* owner;
|
||||
|
||||
public:
|
||||
JuceURLConnectionMessageThread (JuceURLConnection* owner_)
|
||||
: Thread (T("http connection")),
|
||||
owner (owner_)
|
||||
{
|
||||
startThread();
|
||||
}
|
||||
|
||||
~JuceURLConnectionMessageThread()
|
||||
{
|
||||
stopThread (5000);
|
||||
}
|
||||
|
||||
void run()
|
||||
{
|
||||
AutoPool pool;
|
||||
[owner createConnection];
|
||||
|
||||
while (! threadShouldExit())
|
||||
{
|
||||
AutoPool pool;
|
||||
[[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@implementation JuceURLConnection
|
||||
|
||||
- (JuceURLConnection*) initWithRequest: (NSURLRequest*) req
|
||||
withCallback: (URL::OpenStreamProgressCallback*) callback
|
||||
withContext: (void*) context;
|
||||
{
|
||||
[super init];
|
||||
request = req;
|
||||
[request retain];
|
||||
data = [[NSMutableData data] retain];
|
||||
dataLock = [[NSLock alloc] init];
|
||||
connection = 0;
|
||||
initialised = false;
|
||||
hasFailed = false;
|
||||
hasFinished = false;
|
||||
|
||||
runLoopThread = new JuceURLConnectionMessageThread (self);
|
||||
|
||||
while (runLoopThread->isThreadRunning() && ! initialised)
|
||||
{
|
||||
if (callback != 0)
|
||||
callback (context, -1, [[request HTTPBody] length]);
|
||||
|
||||
Thread::sleep (1);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[self stop];
|
||||
|
||||
delete runLoopThread;
|
||||
[connection release];
|
||||
[data release];
|
||||
[dataLock release];
|
||||
[request release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) createConnection
|
||||
{
|
||||
connection = [[NSURLConnection alloc] initWithRequest: request
|
||||
delegate: self];
|
||||
|
||||
if (connection == nil)
|
||||
runLoopThread->signalThreadShouldExit();
|
||||
}
|
||||
|
||||
- (void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) response
|
||||
{
|
||||
[dataLock lock];
|
||||
[data setLength: 0];
|
||||
[dataLock unlock];
|
||||
initialised = true;
|
||||
}
|
||||
|
||||
- (void) connection: (NSURLConnection*) connection didFailWithError: (NSError*) error
|
||||
{
|
||||
NSLog ([error description]);
|
||||
hasFailed = true;
|
||||
initialised = true;
|
||||
runLoopThread->signalThreadShouldExit();
|
||||
}
|
||||
|
||||
- (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) newData
|
||||
{
|
||||
[dataLock lock];
|
||||
[data appendData: newData];
|
||||
[dataLock unlock];
|
||||
initialised = true;
|
||||
}
|
||||
|
||||
- (void) connectionDidFinishLoading: (NSURLConnection*) connection
|
||||
{
|
||||
hasFinished = true;
|
||||
initialised = true;
|
||||
runLoopThread->signalThreadShouldExit();
|
||||
}
|
||||
|
||||
- (BOOL) isOpen
|
||||
{
|
||||
return connection != 0 && ! hasFailed;
|
||||
}
|
||||
|
||||
- (int) readPosition
|
||||
{
|
||||
return position;
|
||||
}
|
||||
|
||||
- (int) read: (char*) dest numBytes: (int) numNeeded
|
||||
{
|
||||
int numDone = 0;
|
||||
|
||||
while (numNeeded > 0)
|
||||
{
|
||||
int available = jmin (numNeeded, [data length]);
|
||||
|
||||
if (available > 0)
|
||||
{
|
||||
[dataLock lock];
|
||||
[data getBytes: dest length: available];
|
||||
[data replaceBytesInRange: NSMakeRange (0, available) withBytes: nil length: 0];
|
||||
[dataLock unlock];
|
||||
|
||||
numDone += available;
|
||||
numNeeded -= available;
|
||||
dest += available;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hasFailed || hasFinished)
|
||||
break;
|
||||
|
||||
Thread::sleep (1);
|
||||
}
|
||||
}
|
||||
|
||||
position += numDone;
|
||||
return numDone;
|
||||
}
|
||||
|
||||
- (void) stop
|
||||
{
|
||||
[connection cancel];
|
||||
runLoopThread->stopThread (5000);
|
||||
}
|
||||
|
||||
@end
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
|
||||
bool juce_isOnLine()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void* juce_openInternetFile (const String& url,
|
||||
const String& headers,
|
||||
const MemoryBlock& postData,
|
||||
const bool isPost,
|
||||
URL::OpenStreamProgressCallback* callback,
|
||||
void* callbackContext,
|
||||
int timeOutMs)
|
||||
{
|
||||
AutoPool pool;
|
||||
|
||||
NSMutableURLRequest* req = [NSMutableURLRequest
|
||||
requestWithURL: [NSURL URLWithString: juceStringToNS (url)]
|
||||
cachePolicy: NSURLRequestUseProtocolCachePolicy
|
||||
timeoutInterval: timeOutMs <= 0 ? 60.0 : (timeOutMs / 1000.0)];
|
||||
|
||||
if (req == nil)
|
||||
return 0;
|
||||
|
||||
[req setHTTPMethod: isPost ? @"POST" : @"GET"];
|
||||
//[req setCachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
|
||||
|
||||
StringArray headerLines;
|
||||
headerLines.addLines (headers);
|
||||
headerLines.removeEmptyStrings (true);
|
||||
|
||||
for (int i = 0; i < headerLines.size(); ++i)
|
||||
{
|
||||
const String key (headerLines[i].upToFirstOccurrenceOf (T(":"), false, false).trim());
|
||||
const String value (headerLines[i].fromFirstOccurrenceOf (T(":"), false, false).trim());
|
||||
|
||||
if (key.isNotEmpty() && value.isNotEmpty())
|
||||
[req addValue: juceStringToNS (value) forHTTPHeaderField: juceStringToNS (key)];
|
||||
}
|
||||
|
||||
if (isPost && postData.getSize() > 0)
|
||||
{
|
||||
[req setHTTPBody: [NSData dataWithBytes: postData.getData()
|
||||
length: postData.getSize()]];
|
||||
}
|
||||
|
||||
JuceURLConnection* const s = [[JuceURLConnection alloc] initWithRequest: req
|
||||
withCallback: callback
|
||||
withContext: callbackContext];
|
||||
|
||||
if ([s isOpen])
|
||||
return s;
|
||||
|
||||
[s release];
|
||||
return 0;
|
||||
}
|
||||
|
||||
void juce_closeInternetFile (void* handle)
|
||||
{
|
||||
JuceURLConnection* const s = (JuceURLConnection*) handle;
|
||||
|
||||
if (s != 0)
|
||||
{
|
||||
AutoPool pool;
|
||||
[s stop];
|
||||
[s release];
|
||||
}
|
||||
}
|
||||
|
||||
int juce_readFromInternetFile (void* handle, void* buffer, int bytesToRead)
|
||||
{
|
||||
JuceURLConnection* const s = (JuceURLConnection*) handle;
|
||||
|
||||
if (s != 0)
|
||||
{
|
||||
AutoPool pool;
|
||||
return [s read: (char*) buffer numBytes: bytesToRead];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int juce_seekInInternetFile (void* handle, int newPosition)
|
||||
{
|
||||
JuceURLConnection* const s = (JuceURLConnection*) handle;
|
||||
|
||||
if (s != 0)
|
||||
return [s readPosition];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
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).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
//==============================================================================
|
||||
static bool getEthernetIterator (io_iterator_t* matchingServices) throw()
|
||||
{
|
||||
mach_port_t masterPort;
|
||||
|
||||
if (IOMasterPort (MACH_PORT_NULL, &masterPort) == KERN_SUCCESS)
|
||||
{
|
||||
CFMutableDictionaryRef dict = IOServiceMatching (kIOEthernetInterfaceClass);
|
||||
|
||||
if (dict != 0)
|
||||
{
|
||||
CFMutableDictionaryRef propDict = CFDictionaryCreateMutable (kCFAllocatorDefault,
|
||||
0,
|
||||
&kCFTypeDictionaryKeyCallBacks,
|
||||
&kCFTypeDictionaryValueCallBacks);
|
||||
|
||||
if (propDict != 0)
|
||||
{
|
||||
CFDictionarySetValue (propDict, CFSTR (kIOPrimaryInterface), kCFBooleanTrue);
|
||||
|
||||
CFDictionarySetValue (dict, CFSTR (kIOPropertyMatchKey), propDict);
|
||||
CFRelease (propDict);
|
||||
}
|
||||
}
|
||||
|
||||
return IOServiceGetMatchingServices (masterPort, dict, matchingServices) == KERN_SUCCESS;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int SystemStats::getMACAddresses (int64* addresses, int maxNum, const bool littleEndian) throw()
|
||||
{
|
||||
int numResults = 0;
|
||||
io_iterator_t it;
|
||||
|
||||
if (getEthernetIterator (&it))
|
||||
{
|
||||
io_object_t i;
|
||||
|
||||
while ((i = IOIteratorNext (it)) != 0)
|
||||
{
|
||||
io_object_t controller;
|
||||
|
||||
if (IORegistryEntryGetParentEntry (i, kIOServicePlane, &controller) == KERN_SUCCESS)
|
||||
{
|
||||
CFTypeRef data = IORegistryEntryCreateCFProperty (controller,
|
||||
CFSTR (kIOMACAddress),
|
||||
kCFAllocatorDefault,
|
||||
0);
|
||||
if (data != 0)
|
||||
{
|
||||
UInt8 addr [kIOEthernetAddressSize];
|
||||
zeromem (addr, sizeof (addr));
|
||||
|
||||
CFDataGetBytes ((CFDataRef) data, CFRangeMake (0, sizeof (addr)), addr);
|
||||
CFRelease (data);
|
||||
|
||||
int64 a = 0;
|
||||
for (int i = 6; --i >= 0;)
|
||||
a = (a << 8) | addr[i];
|
||||
|
||||
if (! littleEndian)
|
||||
a = (int64) swapByteOrder ((uint64) a);
|
||||
|
||||
if (numResults < maxNum)
|
||||
{
|
||||
*addresses++ = a;
|
||||
++numResults;
|
||||
}
|
||||
}
|
||||
|
||||
IOObjectRelease (controller);
|
||||
}
|
||||
|
||||
IOObjectRelease (i);
|
||||
}
|
||||
|
||||
IOObjectRelease (it);
|
||||
}
|
||||
|
||||
return numResults;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAddress,
|
||||
const String& emailSubject,
|
||||
const String& bodyText,
|
||||
const StringArray& filesToAttach)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
String script;
|
||||
script << "tell application \"Mail\"\r\n"
|
||||
"set newMessage to make new outgoing message with properties {subject:\""
|
||||
<< emailSubject.replace (T("\""), T("\\\""))
|
||||
<< "\", content:\""
|
||||
<< bodyText.replace (T("\""), T("\\\""))
|
||||
<< "\" & return & return}\r\n"
|
||||
"tell newMessage\r\n"
|
||||
"set visible to true\r\n"
|
||||
"set sender to \"sdfsdfsdfewf\"\r\n"
|
||||
"make new to recipient at end of to recipients with properties {address:\""
|
||||
<< targetEmailAddress
|
||||
<< "\"}\r\n";
|
||||
|
||||
for (int i = 0; i < filesToAttach.size(); ++i)
|
||||
{
|
||||
script << "tell content\r\n"
|
||||
"make new attachment with properties {file name:\""
|
||||
<< filesToAttach[i].replace (T("\""), T("\\\""))
|
||||
<< "\"} at after the last paragraph\r\n"
|
||||
"end tell\r\n";
|
||||
}
|
||||
|
||||
script << "end tell\r\n"
|
||||
"end tell\r\n";
|
||||
|
||||
NSAppleScript* s = [[NSAppleScript alloc]
|
||||
initWithSource: juceStringToNS (script)];
|
||||
NSDictionary* error = 0;
|
||||
const bool ok = [s executeAndReturnError: &error] != nil;
|
||||
[s release];
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
using namespace JUCE_NAMESPACE;
|
||||
|
||||
//==============================================================================
|
||||
@interface JuceURLConnection : NSObject
|
||||
{
|
||||
NSURLRequest* request;
|
||||
NSURLConnection* connection;
|
||||
NSMutableData* data;
|
||||
Thread* runLoopThread;
|
||||
bool initialised, hasFailed, hasFinished;
|
||||
int position;
|
||||
NSLock* dataLock;
|
||||
}
|
||||
|
||||
- (JuceURLConnection*) initWithRequest: (NSURLRequest*) req withCallback: (URL::OpenStreamProgressCallback*) callback withContext: (void*) context;
|
||||
- (void) dealloc;
|
||||
- (void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) response;
|
||||
- (void) connection: (NSURLConnection*) connection didFailWithError: (NSError*) error;
|
||||
- (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) data;
|
||||
- (void) connectionDidFinishLoading: (NSURLConnection*) connection;
|
||||
|
||||
- (BOOL) isOpen;
|
||||
- (int) read: (char*) dest numBytes: (int) num;
|
||||
- (int) readPosition;
|
||||
- (void) stop;
|
||||
- (void) createConnection;
|
||||
|
||||
@end
|
||||
|
||||
class JuceURLConnectionMessageThread : public Thread
|
||||
{
|
||||
JuceURLConnection* owner;
|
||||
|
||||
public:
|
||||
JuceURLConnectionMessageThread (JuceURLConnection* owner_)
|
||||
: Thread (T("http connection")),
|
||||
owner (owner_)
|
||||
{
|
||||
startThread();
|
||||
}
|
||||
|
||||
~JuceURLConnectionMessageThread()
|
||||
{
|
||||
stopThread (10000);
|
||||
}
|
||||
|
||||
void run()
|
||||
{
|
||||
[owner createConnection];
|
||||
|
||||
while (! threadShouldExit())
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
[[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@implementation JuceURLConnection
|
||||
|
||||
- (JuceURLConnection*) initWithRequest: (NSURLRequest*) req
|
||||
withCallback: (URL::OpenStreamProgressCallback*) callback
|
||||
withContext: (void*) context;
|
||||
{
|
||||
[super init];
|
||||
request = req;
|
||||
[request retain];
|
||||
data = [[NSMutableData data] retain];
|
||||
dataLock = [[NSLock alloc] init];
|
||||
connection = 0;
|
||||
initialised = false;
|
||||
hasFailed = false;
|
||||
hasFinished = false;
|
||||
|
||||
runLoopThread = new JuceURLConnectionMessageThread (self);
|
||||
|
||||
while (runLoopThread->isThreadRunning() && ! initialised)
|
||||
{
|
||||
if (callback != 0)
|
||||
callback (context, -1, [[request HTTPBody] length]);
|
||||
|
||||
Thread::sleep (1);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[self stop];
|
||||
|
||||
delete runLoopThread;
|
||||
[connection release];
|
||||
[data release];
|
||||
[dataLock release];
|
||||
[request release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) createConnection
|
||||
{
|
||||
connection = [[NSURLConnection alloc] initWithRequest: request
|
||||
delegate: self];
|
||||
|
||||
if (connection == nil)
|
||||
runLoopThread->signalThreadShouldExit();
|
||||
}
|
||||
|
||||
- (void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) response
|
||||
{
|
||||
[dataLock lock];
|
||||
[data setLength: 0];
|
||||
[dataLock unlock];
|
||||
initialised = true;
|
||||
}
|
||||
|
||||
- (void) connection: (NSURLConnection*) connection didFailWithError: (NSError*) error
|
||||
{
|
||||
NSLog ([error description]);
|
||||
hasFailed = true;
|
||||
initialised = true;
|
||||
runLoopThread->signalThreadShouldExit();
|
||||
}
|
||||
|
||||
- (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) newData
|
||||
{
|
||||
[dataLock lock];
|
||||
[data appendData: newData];
|
||||
[dataLock unlock];
|
||||
initialised = true;
|
||||
}
|
||||
|
||||
- (void) connectionDidFinishLoading: (NSURLConnection*) connection
|
||||
{
|
||||
hasFinished = true;
|
||||
initialised = true;
|
||||
runLoopThread->signalThreadShouldExit();
|
||||
}
|
||||
|
||||
- (BOOL) isOpen
|
||||
{
|
||||
return connection != 0 && ! hasFailed;
|
||||
}
|
||||
|
||||
- (int) readPosition
|
||||
{
|
||||
return position;
|
||||
}
|
||||
|
||||
- (int) read: (char*) dest numBytes: (int) numNeeded
|
||||
{
|
||||
int numDone = 0;
|
||||
|
||||
while (numNeeded > 0)
|
||||
{
|
||||
int available = jmin (numNeeded, [data length]);
|
||||
|
||||
if (available > 0)
|
||||
{
|
||||
[dataLock lock];
|
||||
[data getBytes: dest length: available];
|
||||
[data replaceBytesInRange: NSMakeRange (0, available) withBytes: nil length: 0];
|
||||
[dataLock unlock];
|
||||
|
||||
numDone += available;
|
||||
numNeeded -= available;
|
||||
dest += available;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hasFailed || hasFinished)
|
||||
break;
|
||||
|
||||
Thread::sleep (1);
|
||||
}
|
||||
}
|
||||
|
||||
position += numDone;
|
||||
return numDone;
|
||||
}
|
||||
|
||||
- (void) stop
|
||||
{
|
||||
[connection cancel];
|
||||
runLoopThread->stopThread (10000);
|
||||
}
|
||||
|
||||
@end
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
|
||||
bool juce_isOnLine()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void* juce_openInternetFile (const String& url,
|
||||
const String& headers,
|
||||
const MemoryBlock& postData,
|
||||
const bool isPost,
|
||||
URL::OpenStreamProgressCallback* callback,
|
||||
void* callbackContext,
|
||||
int timeOutMs)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
NSMutableURLRequest* req = [NSMutableURLRequest
|
||||
requestWithURL: [NSURL URLWithString: juceStringToNS (url)]
|
||||
cachePolicy: NSURLRequestUseProtocolCachePolicy
|
||||
timeoutInterval: timeOutMs <= 0 ? 60.0 : (timeOutMs / 1000.0)];
|
||||
|
||||
if (req == nil)
|
||||
return 0;
|
||||
|
||||
[req setHTTPMethod: isPost ? @"POST" : @"GET"];
|
||||
//[req setCachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
|
||||
|
||||
StringArray headerLines;
|
||||
headerLines.addLines (headers);
|
||||
headerLines.removeEmptyStrings (true);
|
||||
|
||||
for (int i = 0; i < headerLines.size(); ++i)
|
||||
{
|
||||
const String key (headerLines[i].upToFirstOccurrenceOf (T(":"), false, false).trim());
|
||||
const String value (headerLines[i].fromFirstOccurrenceOf (T(":"), false, false).trim());
|
||||
|
||||
if (key.isNotEmpty() && value.isNotEmpty())
|
||||
[req addValue: juceStringToNS (value) forHTTPHeaderField: juceStringToNS (key)];
|
||||
}
|
||||
|
||||
if (isPost && postData.getSize() > 0)
|
||||
{
|
||||
[req setHTTPBody: [NSData dataWithBytes: postData.getData()
|
||||
length: postData.getSize()]];
|
||||
}
|
||||
|
||||
JuceURLConnection* const s = [[JuceURLConnection alloc] initWithRequest: req
|
||||
withCallback: callback
|
||||
withContext: callbackContext];
|
||||
|
||||
if ([s isOpen])
|
||||
return s;
|
||||
|
||||
[s release];
|
||||
return 0;
|
||||
}
|
||||
|
||||
void juce_closeInternetFile (void* handle)
|
||||
{
|
||||
JuceURLConnection* const s = (JuceURLConnection*) handle;
|
||||
|
||||
if (s != 0)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
[s stop];
|
||||
[s release];
|
||||
}
|
||||
}
|
||||
|
||||
int juce_readFromInternetFile (void* handle, void* buffer, int bytesToRead)
|
||||
{
|
||||
JuceURLConnection* const s = (JuceURLConnection*) handle;
|
||||
|
||||
if (s != 0)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
return [s read: (char*) buffer numBytes: bytesToRead];
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int juce_seekInInternetFile (void* handle, int newPosition)
|
||||
{
|
||||
JuceURLConnection* const s = (JuceURLConnection*) handle;
|
||||
|
||||
if (s != 0)
|
||||
return [s readPosition];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
235
build/macosx/platform_specific_code/juce_mac_OpenGLComponent.mm
Normal file
235
build/macosx/platform_specific_code/juce_mac_OpenGLComponent.mm
Normal file
|
|
@ -0,0 +1,235 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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).
|
||||
#if JUCE_INCLUDED_FILE && JUCE_OPENGL
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class WindowedGLContext : public OpenGLContext
|
||||
{
|
||||
public:
|
||||
WindowedGLContext (Component* const component,
|
||||
const OpenGLPixelFormat& pixelFormat_,
|
||||
NSOpenGLContext* sharedContext)
|
||||
: renderContext (0),
|
||||
pixelFormat (pixelFormat_)
|
||||
{
|
||||
jassert (component != 0);
|
||||
|
||||
NSOpenGLPixelFormatAttribute attribs [64];
|
||||
int n = 0;
|
||||
attribs[n++] = NSOpenGLPFADoubleBuffer;
|
||||
attribs[n++] = NSOpenGLPFAAccelerated;
|
||||
attribs[n++] = NSOpenGLPFAColorSize;
|
||||
attribs[n++] = (NSOpenGLPixelFormatAttribute) jmax (pixelFormat.redBits,
|
||||
pixelFormat.greenBits,
|
||||
pixelFormat.blueBits);
|
||||
attribs[n++] = NSOpenGLPFAAlphaSize;
|
||||
attribs[n++] = (NSOpenGLPixelFormatAttribute) pixelFormat.alphaBits;
|
||||
attribs[n++] = NSOpenGLPFADepthSize;
|
||||
attribs[n++] = (NSOpenGLPixelFormatAttribute) pixelFormat.depthBufferBits;
|
||||
attribs[n++] = NSOpenGLPFAStencilSize;
|
||||
attribs[n++] = (NSOpenGLPixelFormatAttribute) pixelFormat.stencilBufferBits;
|
||||
attribs[n++] = NSOpenGLPFAAccumSize;
|
||||
attribs[n++] = (NSOpenGLPixelFormatAttribute) jmax (pixelFormat.accumulationBufferRedBits,
|
||||
pixelFormat.accumulationBufferGreenBits,
|
||||
pixelFormat.accumulationBufferBlueBits,
|
||||
pixelFormat.accumulationBufferAlphaBits);
|
||||
|
||||
// xxx not sure how to do fullSceneAntiAliasingNumSamples..
|
||||
|
||||
attribs[n++] = NSOpenGLPFASampleBuffers;
|
||||
attribs[n++] = (NSOpenGLPixelFormatAttribute) 1;
|
||||
attribs[n++] = NSOpenGLPFAClosestPolicy;
|
||||
attribs[n++] = NSOpenGLPFANoRecovery;
|
||||
attribs[n++] = (NSOpenGLPixelFormatAttribute) 0;
|
||||
|
||||
NSOpenGLPixelFormat* format
|
||||
= [[NSOpenGLPixelFormat alloc] initWithAttributes: attribs];
|
||||
|
||||
NSOpenGLView* view
|
||||
= [[NSOpenGLView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f)
|
||||
pixelFormat: format];
|
||||
|
||||
renderContext = [view openGLContext];
|
||||
[format release];
|
||||
|
||||
viewHolder = new NSViewComponentInternal (view, component);
|
||||
}
|
||||
|
||||
~WindowedGLContext()
|
||||
{
|
||||
makeInactive();
|
||||
[renderContext setView: nil];
|
||||
delete viewHolder;
|
||||
}
|
||||
|
||||
bool makeActive() const throw()
|
||||
{
|
||||
jassert (renderContext != 0);
|
||||
[renderContext makeCurrentContext];
|
||||
return renderContext != 0;
|
||||
}
|
||||
|
||||
bool makeInactive() const throw()
|
||||
{
|
||||
if (! isActive())
|
||||
[NSOpenGLContext clearCurrentContext];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool isActive() const throw()
|
||||
{
|
||||
return [NSOpenGLContext currentContext] == renderContext;
|
||||
}
|
||||
|
||||
const OpenGLPixelFormat getPixelFormat() const { return pixelFormat; }
|
||||
void* getRawContext() const throw() { return renderContext; }
|
||||
|
||||
void updateWindowPosition (int x, int y, int w, int h, int outerWindowHeight)
|
||||
{
|
||||
}
|
||||
|
||||
void swapBuffers()
|
||||
{
|
||||
glFlush();
|
||||
[renderContext flushBuffer];
|
||||
}
|
||||
|
||||
bool setSwapInterval (const int numFramesPerSwap)
|
||||
{
|
||||
[renderContext setValues: (const GLint*) &numFramesPerSwap
|
||||
forParameter: NSOpenGLCPSwapInterval];
|
||||
return true;
|
||||
}
|
||||
|
||||
int getSwapInterval() const
|
||||
{
|
||||
GLint numFrames = 0;
|
||||
[renderContext getValues: &numFrames
|
||||
forParameter: NSOpenGLCPSwapInterval];
|
||||
return numFrames;
|
||||
}
|
||||
|
||||
void repaint()
|
||||
{
|
||||
// we need to invalidate the juce view that holds this gl view, to make it
|
||||
// cause a repaint callback
|
||||
NSView* v = (NSView*) viewHolder->view;
|
||||
NSRect r = [v frame];
|
||||
|
||||
// bit of a bodge here.. if we only invalidate the area of the gl component,
|
||||
// it's completely covered by the NSOpenGLView, so the OS throws away the
|
||||
// repaint message, thus never causing our paint() callback, and never repainting
|
||||
// the comp. So invalidating just a little bit around the edge helps..
|
||||
[[v superview] setNeedsDisplayInRect: NSInsetRect (r, -2.0f, -2.0f)];
|
||||
}
|
||||
|
||||
void* getNativeWindowHandle() const { return viewHolder->view; }
|
||||
|
||||
//==============================================================================
|
||||
juce_UseDebuggingNewOperator
|
||||
|
||||
NSOpenGLContext* renderContext;
|
||||
|
||||
private:
|
||||
OpenGLPixelFormat pixelFormat;
|
||||
NSViewComponentInternal* viewHolder;
|
||||
|
||||
//==============================================================================
|
||||
WindowedGLContext (const WindowedGLContext&);
|
||||
const WindowedGLContext& operator= (const WindowedGLContext&);
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
OpenGLContext* OpenGLContext::createContextForWindow (Component* const component,
|
||||
const OpenGLPixelFormat& pixelFormat,
|
||||
const OpenGLContext* const contextToShareWith)
|
||||
{
|
||||
WindowedGLContext* c = new WindowedGLContext (component, pixelFormat,
|
||||
contextToShareWith != 0 ? (NSOpenGLContext*) contextToShareWith->getRawContext() : 0);
|
||||
|
||||
if (c->renderContext == 0)
|
||||
deleteAndZero (c);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
void* OpenGLComponent::getNativeWindowHandle() const
|
||||
{
|
||||
return context != 0 ? ((WindowedGLContext*) context)->getNativeWindowHandle()
|
||||
: 0;
|
||||
}
|
||||
|
||||
void juce_glViewport (const int w, const int h)
|
||||
{
|
||||
glViewport (0, 0, w, h);
|
||||
}
|
||||
|
||||
void OpenGLPixelFormat::getAvailablePixelFormats (Component* /*component*/,
|
||||
OwnedArray <OpenGLPixelFormat>& results)
|
||||
{
|
||||
/* GLint attribs [64];
|
||||
int n = 0;
|
||||
attribs[n++] = AGL_RGBA;
|
||||
attribs[n++] = AGL_DOUBLEBUFFER;
|
||||
attribs[n++] = AGL_ACCELERATED;
|
||||
attribs[n++] = AGL_NO_RECOVERY;
|
||||
attribs[n++] = AGL_NONE;
|
||||
|
||||
AGLPixelFormat p = aglChoosePixelFormat (0, 0, attribs);
|
||||
|
||||
while (p != 0)
|
||||
{
|
||||
OpenGLPixelFormat* const pf = new OpenGLPixelFormat();
|
||||
pf->redBits = getAGLAttribute (p, AGL_RED_SIZE);
|
||||
pf->greenBits = getAGLAttribute (p, AGL_GREEN_SIZE);
|
||||
pf->blueBits = getAGLAttribute (p, AGL_BLUE_SIZE);
|
||||
pf->alphaBits = getAGLAttribute (p, AGL_ALPHA_SIZE);
|
||||
pf->depthBufferBits = getAGLAttribute (p, AGL_DEPTH_SIZE);
|
||||
pf->stencilBufferBits = getAGLAttribute (p, AGL_STENCIL_SIZE);
|
||||
pf->accumulationBufferRedBits = getAGLAttribute (p, AGL_ACCUM_RED_SIZE);
|
||||
pf->accumulationBufferGreenBits = getAGLAttribute (p, AGL_ACCUM_GREEN_SIZE);
|
||||
pf->accumulationBufferBlueBits = getAGLAttribute (p, AGL_ACCUM_BLUE_SIZE);
|
||||
pf->accumulationBufferAlphaBits = getAGLAttribute (p, AGL_ACCUM_ALPHA_SIZE);
|
||||
|
||||
results.add (pf);
|
||||
|
||||
p = aglNextPixelFormat (p);
|
||||
}*/
|
||||
|
||||
//jassertfalse //xxx can't see how you do this in cocoa!
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,294 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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).
|
||||
#if JUCE_INCLUDED_FILE && JUCE_QUICKTIME
|
||||
|
||||
#define theMovie ((QTMovie*) movie)
|
||||
|
||||
//==============================================================================
|
||||
QuickTimeMovieComponent::QuickTimeMovieComponent()
|
||||
: movie (0)
|
||||
{
|
||||
setOpaque (true);
|
||||
setVisible (true);
|
||||
|
||||
QTMovieView* view = [[QTMovieView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f)];
|
||||
setView (view);
|
||||
}
|
||||
|
||||
QuickTimeMovieComponent::~QuickTimeMovieComponent()
|
||||
{
|
||||
closeMovie();
|
||||
setView (0);
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isQuickTimeAvailable() throw()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::loadMovie (InputStream* movieStream,
|
||||
const bool controllerVisible)
|
||||
{
|
||||
closeMovie();
|
||||
|
||||
if (getPeer() == 0)
|
||||
{
|
||||
// To open a movie, this component must be visible inside a functioning window, so that
|
||||
// the QT control can be assigned to the window.
|
||||
jassertfalse
|
||||
return false;
|
||||
}
|
||||
|
||||
FileInputStream* const fin = dynamic_cast <FileInputStream*> (movieStream);
|
||||
|
||||
if (fin != 0)
|
||||
{
|
||||
movieFile = fin->getFile();
|
||||
movie = [QTMovie movieWithFile: juceStringToNS (movieFile.getFullPathName())
|
||||
error: nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
MemoryBlock temp;
|
||||
movieStream->readIntoMemoryBlock (temp);
|
||||
|
||||
movie = [QTMovie movieWithData: [NSData dataWithBytes: temp.getData()
|
||||
length: temp.getSize()]
|
||||
error: nil];
|
||||
}
|
||||
|
||||
[theMovie retain];
|
||||
QTMovieView* view = (QTMovieView*) getView();
|
||||
[view setMovie: theMovie];
|
||||
[view setControllerVisible: controllerVisible];
|
||||
setLooping (looping);
|
||||
|
||||
return movie != nil;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::closeMovie()
|
||||
{
|
||||
stop();
|
||||
QTMovieView* view = (QTMovieView*) getView();
|
||||
[view setMovie: nil];
|
||||
[theMovie release];
|
||||
movie = 0;
|
||||
movieFile = File::nonexistent;
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isMovieOpen() const
|
||||
{
|
||||
return movie != nil;
|
||||
}
|
||||
|
||||
const File QuickTimeMovieComponent::getCurrentMovieFile() const
|
||||
{
|
||||
return movieFile;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::play()
|
||||
{
|
||||
[theMovie play];
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::stop()
|
||||
{
|
||||
[theMovie stop];
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isPlaying() const
|
||||
{
|
||||
return movie != 0 && [theMovie rate] != 0;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setPosition (const double seconds)
|
||||
{
|
||||
if (movie != 0)
|
||||
{
|
||||
QTTime t;
|
||||
t.timeValue = (uint64) (100000.0 * seconds);
|
||||
t.timeScale = 100000;
|
||||
t.flags = 0;
|
||||
|
||||
[theMovie setCurrentTime: t];
|
||||
}
|
||||
}
|
||||
|
||||
double QuickTimeMovieComponent::getPosition() const
|
||||
{
|
||||
if (movie == 0)
|
||||
return 0.0;
|
||||
|
||||
QTTime t = [theMovie currentTime];
|
||||
return t.timeValue / (double) t.timeScale;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setSpeed (const float newSpeed)
|
||||
{
|
||||
[theMovie setRate: newSpeed];
|
||||
}
|
||||
|
||||
double QuickTimeMovieComponent::getMovieDuration() const
|
||||
{
|
||||
if (movie == 0)
|
||||
return 0.0;
|
||||
|
||||
QTTime t = [theMovie duration];
|
||||
return t.timeValue / (double) t.timeScale;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setLooping (const bool shouldLoop)
|
||||
{
|
||||
looping = shouldLoop;
|
||||
|
||||
[theMovie setAttribute: [NSNumber numberWithBool: shouldLoop]
|
||||
forKey: QTMovieLoopsAttribute];
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isLooping() const
|
||||
{
|
||||
return looping;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setMovieVolume (const float newVolume)
|
||||
{
|
||||
[theMovie setVolume: newVolume];
|
||||
}
|
||||
|
||||
float QuickTimeMovieComponent::getMovieVolume() const
|
||||
{
|
||||
return movie != 0 ? [theMovie volume] : 0.0f;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::getMovieNormalSize (int& width, int& height) const
|
||||
{
|
||||
width = 0;
|
||||
height = 0;
|
||||
|
||||
if (movie != 0)
|
||||
{
|
||||
NSSize s = [[theMovie attributeForKey: QTMovieNaturalSizeAttribute] sizeValue];
|
||||
width = s.width;
|
||||
height = s.height;
|
||||
}
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::paint (Graphics& g)
|
||||
{
|
||||
if (movie == 0)
|
||||
g.fillAll (Colours::black);
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isControllerVisible() const
|
||||
{
|
||||
return controllerVisible;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool QuickTimeMovieComponent::loadMovie (const File& movieFile_,
|
||||
const bool isControllerVisible)
|
||||
{
|
||||
const bool ok = loadMovie ((InputStream*) movieFile_.createInputStream(), isControllerVisible);
|
||||
movieFile = movieFile_;
|
||||
return ok;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::goToStart()
|
||||
{
|
||||
setPosition (0.0);
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setBoundsWithCorrectAspectRatio (const Rectangle& spaceToFitWithin,
|
||||
const RectanglePlacement& placement)
|
||||
{
|
||||
int normalWidth, normalHeight;
|
||||
getMovieNormalSize (normalWidth, normalHeight);
|
||||
|
||||
if (normalWidth > 0 && normalHeight > 0 && ! spaceToFitWithin.isEmpty())
|
||||
{
|
||||
double x = 0.0, y = 0.0, w = normalWidth, h = normalHeight;
|
||||
|
||||
placement.applyTo (x, y, w, h,
|
||||
spaceToFitWithin.getX(), spaceToFitWithin.getY(),
|
||||
spaceToFitWithin.getWidth(), spaceToFitWithin.getHeight());
|
||||
|
||||
if (w > 0 && h > 0)
|
||||
{
|
||||
setBounds (roundDoubleToInt (x), roundDoubleToInt (y),
|
||||
roundDoubleToInt (w), roundDoubleToInt (h));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
setBounds (spaceToFitWithin);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
#if ! (JUCE_MAC && JUCE_64BIT)
|
||||
|
||||
bool juce_OpenQuickTimeMovieFromStream (InputStream* movieStream, Movie& result, Handle& dataHandle)
|
||||
{
|
||||
if (movieStream == 0)
|
||||
return false;
|
||||
|
||||
QTMovie* movie = nil;
|
||||
|
||||
FileInputStream* const fin = dynamic_cast <FileInputStream*> (movieStream);
|
||||
|
||||
if (fin != 0)
|
||||
{
|
||||
movie = [QTMovie movieWithFile: juceStringToNS (fin->getFile().getFullPathName())
|
||||
error: nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
MemoryBlock temp;
|
||||
movieStream->readIntoMemoryBlock (temp);
|
||||
|
||||
movie = [QTMovie movieWithData: [NSData dataWithBytes: temp.getData()
|
||||
length: temp.getSize()]
|
||||
error: nil];
|
||||
}
|
||||
|
||||
if (movie != nil)
|
||||
result = [movie quickTimeMovie];
|
||||
|
||||
return movie != nil;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
186
build/macosx/platform_specific_code/juce_mac_Strings.mm
Normal file
186
build/macosx/platform_specific_code/juce_mac_Strings.mm
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
//==============================================================================
|
||||
static const String nsStringToJuce (NSString* s)
|
||||
{
|
||||
return String::fromUTF8 ((uint8*) [s UTF8String]);
|
||||
}
|
||||
|
||||
static NSString* juceStringToNS (const String& s)
|
||||
{
|
||||
return [NSString stringWithUTF8String: (const char*) s.toUTF8()];
|
||||
}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
static const String convertUTF16ToString (const UniChar* utf16)
|
||||
{
|
||||
String s;
|
||||
|
||||
while (*utf16 != 0)
|
||||
s += (juce_wchar) *utf16++;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
const String PlatformUtilities::cfStringToJuceString (CFStringRef cfString)
|
||||
{
|
||||
String result;
|
||||
|
||||
if (cfString != 0)
|
||||
{
|
||||
#if JUCE_STRINGS_ARE_UNICODE
|
||||
CFRange range = { 0, CFStringGetLength (cfString) };
|
||||
UniChar* const u = (UniChar*) juce_malloc (sizeof (UniChar) * (range.length + 1));
|
||||
|
||||
CFStringGetCharacters (cfString, range, u);
|
||||
u[range.length] = 0;
|
||||
|
||||
result = convertUTF16ToString (u);
|
||||
|
||||
juce_free (u);
|
||||
#else
|
||||
const int len = CFStringGetLength (cfString);
|
||||
char* buffer = (char*) juce_malloc (len + 1);
|
||||
CFStringGetCString (cfString, buffer, len + 1, CFStringGetSystemEncoding());
|
||||
result = buffer;
|
||||
juce_free (buffer);
|
||||
#endif
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
CFStringRef PlatformUtilities::juceStringToCFString (const String& s)
|
||||
{
|
||||
#if JUCE_STRINGS_ARE_UNICODE
|
||||
const int len = s.length();
|
||||
const juce_wchar* t = (const juce_wchar*) s;
|
||||
|
||||
UniChar* temp = (UniChar*) juce_malloc (sizeof (UniChar) * len + 4);
|
||||
|
||||
for (int i = 0; i <= len; ++i)
|
||||
temp[i] = t[i];
|
||||
|
||||
CFStringRef result = CFStringCreateWithCharacters (kCFAllocatorDefault, temp, len);
|
||||
juce_free (temp);
|
||||
|
||||
return result;
|
||||
|
||||
#else
|
||||
return CFStringCreateWithCString (kCFAllocatorDefault,
|
||||
(const char*) s,
|
||||
CFStringGetSystemEncoding());
|
||||
#endif
|
||||
}
|
||||
|
||||
const String PlatformUtilities::convertToPrecomposedUnicode (const String& s)
|
||||
{
|
||||
UnicodeMapping map;
|
||||
|
||||
map.unicodeEncoding = CreateTextEncoding (kTextEncodingUnicodeDefault,
|
||||
kUnicodeNoSubset,
|
||||
kTextEncodingDefaultFormat);
|
||||
|
||||
map.otherEncoding = CreateTextEncoding (kTextEncodingUnicodeDefault,
|
||||
kUnicodeCanonicalCompVariant,
|
||||
kTextEncodingDefaultFormat);
|
||||
|
||||
map.mappingVersion = kUnicodeUseLatestMapping;
|
||||
|
||||
UnicodeToTextInfo conversionInfo = 0;
|
||||
String result;
|
||||
|
||||
if (CreateUnicodeToTextInfo (&map, &conversionInfo) == noErr)
|
||||
{
|
||||
const int len = s.length();
|
||||
|
||||
UniChar* const tempIn = (UniChar*) juce_calloc (sizeof (UniChar) * len + 4);
|
||||
UniChar* const tempOut = (UniChar*) juce_calloc (sizeof (UniChar) * len + 4);
|
||||
|
||||
for (int i = 0; i <= len; ++i)
|
||||
tempIn[i] = s[i];
|
||||
|
||||
ByteCount bytesRead = 0;
|
||||
ByteCount outputBufferSize = 0;
|
||||
|
||||
if (ConvertFromUnicodeToText (conversionInfo,
|
||||
len * sizeof (UniChar), tempIn,
|
||||
kUnicodeDefaultDirectionMask,
|
||||
0, 0, 0, 0,
|
||||
len * sizeof (UniChar), &bytesRead,
|
||||
&outputBufferSize, tempOut) == noErr)
|
||||
{
|
||||
result.preallocateStorage (bytesRead / sizeof (UniChar) + 2);
|
||||
|
||||
tchar* t = const_cast <tchar*> ((const tchar*) result);
|
||||
|
||||
int i;
|
||||
for (i = 0; i < bytesRead / sizeof (UniChar); ++i)
|
||||
t[i] = (tchar) tempOut[i];
|
||||
|
||||
t[i] = 0;
|
||||
}
|
||||
|
||||
juce_free (tempIn);
|
||||
juce_free (tempOut);
|
||||
|
||||
DisposeUnicodeToTextInfo (&conversionInfo);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void SystemClipboard::copyTextToClipboard (const String& text) throw()
|
||||
{
|
||||
[[NSPasteboard generalPasteboard] declareTypes: [NSArray arrayWithObject: NSStringPboardType]
|
||||
owner: nil];
|
||||
|
||||
[[NSPasteboard generalPasteboard] setString: juceStringToNS (text)
|
||||
forType: NSStringPboardType];
|
||||
}
|
||||
|
||||
const String SystemClipboard::getTextFromClipboard() throw()
|
||||
{
|
||||
NSString* text = [[NSPasteboard generalPasteboard] stringForType: NSStringPboardType];
|
||||
|
||||
return text == 0 ? String::empty
|
||||
: nsStringToJuce (text);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
@ -29,18 +29,9 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "juce_mac_NativeHeaders.h"
|
||||
#include <AppKit/AppKit.h>
|
||||
#include <CoreAudio/HostTime.h>
|
||||
#include <ctime>
|
||||
#include <sys/resource.h>
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_appframework/application/juce_Application.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
#include "../../../src/juce_core/basics/juce_Time.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
// (This file gets included by juce_mac_NativeCode.mm, rather than being
|
||||
// compiled on its own).
|
||||
#ifdef JUCE_INCLUDED_FILE
|
||||
|
||||
static int64 highResTimerFrequency;
|
||||
|
||||
|
|
@ -90,29 +81,74 @@ static CPUFlags cpuFlags;
|
|||
#endif
|
||||
|
||||
//==============================================================================
|
||||
void Logger::outputDebugString (const String& text) throw()
|
||||
void SystemStats::initialiseStats() throw()
|
||||
{
|
||||
String withLineFeed (text + T("\n"));
|
||||
const char* const utf8 = withLineFeed.toUTF8();
|
||||
fwrite (utf8, strlen (utf8), 1, stdout);
|
||||
static bool initialised = false;
|
||||
|
||||
if (! initialised)
|
||||
{
|
||||
initialised = true;
|
||||
|
||||
NSApplicationLoad();
|
||||
[NSApplication sharedApplication];
|
||||
|
||||
#if JUCE_INTEL
|
||||
{
|
||||
unsigned int familyModel, extFeatures;
|
||||
const unsigned int features = getCPUIDWord (familyModel, extFeatures);
|
||||
|
||||
cpuFlags.hasMMX = ((features & (1 << 23)) != 0);
|
||||
cpuFlags.hasSSE = ((features & (1 << 25)) != 0);
|
||||
cpuFlags.hasSSE2 = ((features & (1 << 26)) != 0);
|
||||
cpuFlags.has3DNow = ((extFeatures & (1 << 31)) != 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
highResTimerFrequency = (int64) AudioGetHostClockFrequency();
|
||||
|
||||
String s (SystemStats::getJUCEVersion());
|
||||
|
||||
rlimit lim;
|
||||
getrlimit (RLIMIT_NOFILE, &lim);
|
||||
lim.rlim_cur = lim.rlim_max = RLIM_INFINITY;
|
||||
setrlimit (RLIMIT_NOFILE, &lim);
|
||||
}
|
||||
}
|
||||
|
||||
void Logger::outputDebugPrintf (const tchar* format, ...) throw()
|
||||
static const String getCpuInfo (const char* key, bool lastOne = false) throw()
|
||||
{
|
||||
String text;
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
text.vprintf(format, args);
|
||||
outputDebugString (text);
|
||||
}
|
||||
String info;
|
||||
char buf [256];
|
||||
|
||||
int SystemStats::getMemorySizeInMegabytes() throw()
|
||||
{
|
||||
long bytes;
|
||||
if (Gestalt (gestaltPhysicalRAMSize, &bytes) == noErr)
|
||||
return (int) (((unsigned long) bytes) / (1024 * 1024));
|
||||
FILE* f = fopen ("/proc/cpuinfo", "r");
|
||||
|
||||
return 0;
|
||||
while (f != 0 && fgets (buf, sizeof(buf), f))
|
||||
{
|
||||
if (strncmp (buf, key, strlen (key)) == 0)
|
||||
{
|
||||
char* p = buf;
|
||||
|
||||
while (*p && *p != '\n')
|
||||
++p;
|
||||
|
||||
if (*p != 0)
|
||||
*p = 0;
|
||||
|
||||
p = buf;
|
||||
|
||||
while (*p != 0 && *p != ':')
|
||||
++p;
|
||||
|
||||
if (*p != 0 && *(p + 1) != 0)
|
||||
info = p + 2;
|
||||
|
||||
if (! lastOne)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose (f);
|
||||
return info;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -136,39 +172,17 @@ bool SystemStats::isOperatingSystem64Bit() throw()
|
|||
#endif
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void SystemStats::initialiseStats() throw()
|
||||
int SystemStats::getMemorySizeInMegabytes() throw()
|
||||
{
|
||||
static bool initialised = false;
|
||||
|
||||
if (! initialised)
|
||||
{
|
||||
initialised = true;
|
||||
|
||||
//[NSApplication sharedApplication];
|
||||
NSApplicationLoad();
|
||||
|
||||
#if JUCE_INTEL
|
||||
{
|
||||
unsigned int familyModel, extFeatures;
|
||||
const unsigned int features = getCPUIDWord (familyModel, extFeatures);
|
||||
|
||||
cpuFlags.hasMMX = ((features & (1 << 23)) != 0);
|
||||
cpuFlags.hasSSE = ((features & (1 << 25)) != 0);
|
||||
cpuFlags.hasSSE2 = ((features & (1 << 26)) != 0);
|
||||
cpuFlags.has3DNow = ((extFeatures & (1 << 31)) != 0);
|
||||
}
|
||||
#if MACOS_10_4_OR_EARLIER
|
||||
long bytes;
|
||||
if (Gestalt (gestaltPhysicalRAMSize, &bytes) == noErr)
|
||||
return (int) (((unsigned long) bytes) / (1024 * 1024));
|
||||
|
||||
return 0;
|
||||
#else
|
||||
return (int) ([[NSProcessInfo processInfo] physicalMemory] / (1024 * 1024));
|
||||
#endif
|
||||
|
||||
highResTimerFrequency = (int64) AudioGetHostClockFrequency();
|
||||
|
||||
String s (SystemStats::getJUCEVersion());
|
||||
|
||||
rlimit lim;
|
||||
getrlimit (RLIMIT_NOFILE, &lim);
|
||||
lim.rlim_cur = lim.rlim_max = RLIM_INFINITY;
|
||||
setrlimit (RLIMIT_NOFILE, &lim);
|
||||
}
|
||||
}
|
||||
|
||||
bool SystemStats::hasMMX() throw()
|
||||
|
|
@ -220,12 +234,20 @@ const String SystemStats::getCpuVendor() throw()
|
|||
|
||||
int SystemStats::getCpuSpeedInMegaherz() throw()
|
||||
{
|
||||
#if MACOS_10_4_OR_EARLIER
|
||||
return GetCPUSpeed();
|
||||
#else
|
||||
return roundDoubleToInt (getCpuInfo ("cpu MHz").getDoubleValue());
|
||||
#endif
|
||||
}
|
||||
|
||||
int SystemStats::getNumCpus() throw()
|
||||
{
|
||||
#if MACOS_10_4_OR_EARLIER
|
||||
return MPProcessors();
|
||||
#else
|
||||
return [[NSProcessInfo processInfo] activeProcessorCount];
|
||||
#endif
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -272,12 +294,12 @@ bool Time::setSystemTimeToThisTime() const throw()
|
|||
//==============================================================================
|
||||
int SystemStats::getPageSize() throw()
|
||||
{
|
||||
jassertfalse
|
||||
return 512; //xxx
|
||||
return NSPageSize();
|
||||
}
|
||||
|
||||
void PlatformUtilities::fpuReset()
|
||||
{
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,202 +1,202 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
#include <pthread.h>
|
||||
#include <sched.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/threads/juce_CriticalSection.h"
|
||||
#include "../../../src/juce_core/threads/juce_WaitableEvent.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
#include "../../../src/juce_core/threads/juce_Process.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
#include "../../../src/juce_core/io/files/juce_File.h"
|
||||
|
||||
//==============================================================================
|
||||
/*
|
||||
Note that a lot of methods that you'd expect to find in this file actually
|
||||
live in juce_posix_SharedCode.h!
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
void JUCE_API juce_threadEntryPoint (void*);
|
||||
|
||||
void* threadEntryProc (void* userData) throw()
|
||||
{
|
||||
juce_threadEntryPoint (userData);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* juce_createThread (void* userData) throw()
|
||||
{
|
||||
pthread_t handle = 0;
|
||||
|
||||
if (pthread_create (&handle, 0, threadEntryProc, userData) == 0)
|
||||
{
|
||||
pthread_detach (handle);
|
||||
return (void*) handle;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void juce_killThread (void* handle) throw()
|
||||
{
|
||||
if (handle != 0)
|
||||
pthread_cancel ((pthread_t) handle);
|
||||
}
|
||||
|
||||
void juce_setCurrentThreadName (const String& /*name*/) throw()
|
||||
{
|
||||
}
|
||||
|
||||
int Thread::getCurrentThreadId() throw()
|
||||
{
|
||||
return (int) pthread_self();
|
||||
}
|
||||
|
||||
void juce_setThreadPriority (void* handle, int priority) throw()
|
||||
{
|
||||
if (handle == 0)
|
||||
handle = (void*) pthread_self();
|
||||
|
||||
struct sched_param param;
|
||||
int policy;
|
||||
pthread_getschedparam ((pthread_t) handle, &policy, ¶m);
|
||||
param.sched_priority = jlimit (1, 127, 1 + (priority * 126) / 11);
|
||||
pthread_setschedparam ((pthread_t) handle, policy, ¶m);
|
||||
}
|
||||
|
||||
void Thread::yield() throw()
|
||||
{
|
||||
sched_yield();
|
||||
}
|
||||
|
||||
void Thread::setCurrentThreadAffinityMask (const uint32 affinityMask) throw()
|
||||
{
|
||||
// xxx
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool JUCE_CALLTYPE juce_isRunningUnderDebugger() throw()
|
||||
{
|
||||
static char testResult = 0;
|
||||
|
||||
if (testResult == 0)
|
||||
{
|
||||
struct kinfo_proc info;
|
||||
int m[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() };
|
||||
size_t sz = sizeof (info);
|
||||
sysctl (m, 4, &info, &sz, 0, 0);
|
||||
testResult = ((info.kp_proc.p_flag & P_TRACED) != 0) ? 1 : -1;
|
||||
}
|
||||
|
||||
return testResult > 0;
|
||||
}
|
||||
|
||||
bool JUCE_CALLTYPE Process::isRunningUnderDebugger() throw()
|
||||
{
|
||||
return juce_isRunningUnderDebugger();
|
||||
}
|
||||
|
||||
void Process::raisePrivilege()
|
||||
{
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
void Process::lowerPrivilege()
|
||||
{
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
void Process::terminate()
|
||||
{
|
||||
exit (0);
|
||||
}
|
||||
|
||||
void Process::setPriority (ProcessPriority p)
|
||||
{
|
||||
// xxx
|
||||
}
|
||||
|
||||
void* Process::loadDynamicLibrary (const String& name)
|
||||
{
|
||||
// xxx needs to use bundles
|
||||
|
||||
FSSpec fs;
|
||||
if (PlatformUtilities::makeFSSpecFromPath (&fs, name))
|
||||
{
|
||||
CFragConnectionID connID;
|
||||
Ptr mainPtr;
|
||||
Str255 errorMessage;
|
||||
Str63 nm;
|
||||
PlatformUtilities::copyToStr63 (nm, name);
|
||||
|
||||
const OSErr err = GetDiskFragment (&fs, 0, kCFragGoesToEOF, nm, kReferenceCFrag, &connID, &mainPtr, errorMessage);
|
||||
if (err == noErr)
|
||||
return (void*)connID;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Process::freeDynamicLibrary (void* handle)
|
||||
{
|
||||
if (handle != 0)
|
||||
CloseConnection ((CFragConnectionID*)&handle);
|
||||
}
|
||||
|
||||
void* Process::getProcedureEntryPoint (void* h, const String& procedureName)
|
||||
{
|
||||
if (h != 0)
|
||||
{
|
||||
CFragSymbolClass cl;
|
||||
Ptr ptr;
|
||||
Str255 name;
|
||||
PlatformUtilities::copyToStr255 (name, procedureName);
|
||||
|
||||
if (FindSymbol ((CFragConnectionID) h, name, &ptr, &cl) == noErr)
|
||||
{
|
||||
return ptr;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
#include <pthread.h>
|
||||
#include <sched.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/threads/juce_CriticalSection.h"
|
||||
#include "../../../src/juce_core/threads/juce_WaitableEvent.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
#include "../../../src/juce_core/threads/juce_Process.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
#include "../../../src/juce_core/io/files/juce_File.h"
|
||||
|
||||
//==============================================================================
|
||||
/*
|
||||
Note that a lot of methods that you'd expect to find in this file actually
|
||||
live in juce_posix_SharedCode.h!
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
void JUCE_API juce_threadEntryPoint (void*);
|
||||
|
||||
void* threadEntryProc (void* userData) throw()
|
||||
{
|
||||
juce_threadEntryPoint (userData);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* juce_createThread (void* userData) throw()
|
||||
{
|
||||
pthread_t handle = 0;
|
||||
|
||||
if (pthread_create (&handle, 0, threadEntryProc, userData) == 0)
|
||||
{
|
||||
pthread_detach (handle);
|
||||
return (void*) handle;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void juce_killThread (void* handle) throw()
|
||||
{
|
||||
if (handle != 0)
|
||||
pthread_cancel ((pthread_t) handle);
|
||||
}
|
||||
|
||||
void juce_setCurrentThreadName (const String& /*name*/) throw()
|
||||
{
|
||||
}
|
||||
|
||||
int Thread::getCurrentThreadId() throw()
|
||||
{
|
||||
return (int) pthread_self();
|
||||
}
|
||||
|
||||
void juce_setThreadPriority (void* handle, int priority) throw()
|
||||
{
|
||||
if (handle == 0)
|
||||
handle = (void*) pthread_self();
|
||||
|
||||
struct sched_param param;
|
||||
int policy;
|
||||
pthread_getschedparam ((pthread_t) handle, &policy, ¶m);
|
||||
param.sched_priority = jlimit (1, 127, 1 + (priority * 126) / 11);
|
||||
pthread_setschedparam ((pthread_t) handle, policy, ¶m);
|
||||
}
|
||||
|
||||
void Thread::yield() throw()
|
||||
{
|
||||
sched_yield();
|
||||
}
|
||||
|
||||
void Thread::setCurrentThreadAffinityMask (const uint32 affinityMask) throw()
|
||||
{
|
||||
// xxx
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool JUCE_CALLTYPE juce_isRunningUnderDebugger() throw()
|
||||
{
|
||||
static char testResult = 0;
|
||||
|
||||
if (testResult == 0)
|
||||
{
|
||||
struct kinfo_proc info;
|
||||
int m[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() };
|
||||
size_t sz = sizeof (info);
|
||||
sysctl (m, 4, &info, &sz, 0, 0);
|
||||
testResult = ((info.kp_proc.p_flag & P_TRACED) != 0) ? 1 : -1;
|
||||
}
|
||||
|
||||
return testResult > 0;
|
||||
}
|
||||
|
||||
bool JUCE_CALLTYPE Process::isRunningUnderDebugger() throw()
|
||||
{
|
||||
return juce_isRunningUnderDebugger();
|
||||
}
|
||||
|
||||
void Process::raisePrivilege()
|
||||
{
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
void Process::lowerPrivilege()
|
||||
{
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
void Process::terminate()
|
||||
{
|
||||
exit (0);
|
||||
}
|
||||
|
||||
void Process::setPriority (ProcessPriority p)
|
||||
{
|
||||
// xxx
|
||||
}
|
||||
|
||||
void* Process::loadDynamicLibrary (const String& name)
|
||||
{
|
||||
// xxx needs to use bundles
|
||||
|
||||
FSSpec fs;
|
||||
if (PlatformUtilities::makeFSSpecFromPath (&fs, name))
|
||||
{
|
||||
CFragConnectionID connID;
|
||||
Ptr mainPtr;
|
||||
Str255 errorMessage;
|
||||
Str63 nm;
|
||||
PlatformUtilities::copyToStr63 (nm, name);
|
||||
|
||||
const OSErr err = GetDiskFragment (&fs, 0, kCFragGoesToEOF, nm, kReferenceCFrag, &connID, &mainPtr, errorMessage);
|
||||
if (err == noErr)
|
||||
return (void*)connID;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Process::freeDynamicLibrary (void* handle)
|
||||
{
|
||||
if (handle != 0)
|
||||
CloseConnection ((CFragConnectionID*)&handle);
|
||||
}
|
||||
|
||||
void* Process::getProcedureEntryPoint (void* h, const String& procedureName)
|
||||
{
|
||||
if (h != 0)
|
||||
{
|
||||
CFragSymbolClass cl;
|
||||
Ptr ptr;
|
||||
Str255 name;
|
||||
PlatformUtilities::copyToStr255 (name, procedureName);
|
||||
|
||||
if (FindSymbol ((CFragConnectionID) h, name, &ptr, &cl) == noErr)
|
||||
{
|
||||
return ptr;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
|
|
|||
129
build/macosx/platform_specific_code/juce_mac_Threads.mm
Normal file
129
build/macosx/platform_specific_code/juce_mac_Threads.mm
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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
|
||||
|
||||
//==============================================================================
|
||||
/*
|
||||
Note that a lot of methods that you'd expect to find in this file actually
|
||||
live in juce_posix_SharedCode.h!
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
void JUCE_API juce_threadEntryPoint (void*);
|
||||
|
||||
void* threadEntryProc (void* userData) throw()
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
juce_threadEntryPoint (userData);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* juce_createThread (void* userData) throw()
|
||||
{
|
||||
pthread_t handle = 0;
|
||||
|
||||
if (pthread_create (&handle, 0, threadEntryProc, userData) == 0)
|
||||
{
|
||||
pthread_detach (handle);
|
||||
return (void*) handle;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void juce_killThread (void* handle) throw()
|
||||
{
|
||||
if (handle != 0)
|
||||
pthread_cancel ((pthread_t) handle);
|
||||
}
|
||||
|
||||
void juce_setCurrentThreadName (const String& /*name*/) throw()
|
||||
{
|
||||
}
|
||||
|
||||
int64 Thread::getCurrentThreadId() throw()
|
||||
{
|
||||
return (int64) pthread_self();
|
||||
}
|
||||
|
||||
void juce_setThreadPriority (void* handle, int priority) throw()
|
||||
{
|
||||
if (handle == 0)
|
||||
handle = (void*) pthread_self();
|
||||
|
||||
struct sched_param param;
|
||||
int policy;
|
||||
pthread_getschedparam ((pthread_t) handle, &policy, ¶m);
|
||||
param.sched_priority = jlimit (1, 127, 1 + (priority * 126) / 11);
|
||||
pthread_setschedparam ((pthread_t) handle, policy, ¶m);
|
||||
}
|
||||
|
||||
void Thread::yield() throw()
|
||||
{
|
||||
sched_yield();
|
||||
}
|
||||
|
||||
void Thread::setCurrentThreadAffinityMask (const uint32 affinityMask) throw()
|
||||
{
|
||||
// xxx
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool Process::isForegroundProcess() throw()
|
||||
{
|
||||
return [NSApp isActive];
|
||||
}
|
||||
|
||||
void Process::raisePrivilege()
|
||||
{
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
void Process::lowerPrivilege()
|
||||
{
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
void Process::terminate()
|
||||
{
|
||||
exit (0);
|
||||
}
|
||||
|
||||
void Process::setPriority (ProcessPriority p)
|
||||
{
|
||||
// xxx
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -1,443 +1,258 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
#include <Cocoa/Cocoa.h>
|
||||
#include <WebKit/WebKit.h>
|
||||
#include <WebKit/HIWebView.h>
|
||||
#include <WebKit/WebPolicyDelegate.h>
|
||||
#include <WebKit/CarbonUtils.h>
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
#include "../../../src/juce_appframework/events/juce_Timer.h"
|
||||
#include "../../../src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h"
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
//==============================================================================
|
||||
@interface DownloadClickDetector : NSObject
|
||||
{
|
||||
JUCE_NAMESPACE::WebBrowserComponent* ownerComponent;
|
||||
}
|
||||
|
||||
- (DownloadClickDetector*) initWithOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent;
|
||||
|
||||
- (void) webView: (WebView*) webView decidePolicyForNavigationAction: (NSDictionary*) actionInformation
|
||||
request: (NSURLRequest*) request
|
||||
frame: (WebFrame*) frame
|
||||
decisionListener: (id<WebPolicyDecisionListener>) listener;
|
||||
@end
|
||||
|
||||
//==============================================================================
|
||||
@implementation DownloadClickDetector
|
||||
|
||||
- (DownloadClickDetector*) initWithOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent_
|
||||
{
|
||||
[super init];
|
||||
ownerComponent = ownerComponent_;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) webView: (WebView*) sender decidePolicyForNavigationAction: (NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener
|
||||
{
|
||||
NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"];
|
||||
|
||||
if (ownerComponent->pageAboutToLoad (JUCE_NAMESPACE::String::fromUTF8 ((const JUCE_NAMESPACE::uint8*) [[url absoluteString] UTF8String])))
|
||||
[listener use];
|
||||
else
|
||||
[listener ignore];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
//==============================================================================
|
||||
class WebBrowserComponentInternal : public Timer
|
||||
{
|
||||
public:
|
||||
WebBrowserComponentInternal (WebBrowserComponent* owner_)
|
||||
: owner (owner_),
|
||||
view (0),
|
||||
webView (0)
|
||||
{
|
||||
HIWebViewCreate (&view);
|
||||
|
||||
ComponentPeer* const peer = owner_->getPeer();
|
||||
jassert (peer != 0);
|
||||
|
||||
if (view != 0 && peer != 0)
|
||||
{
|
||||
WindowRef parentWindow = (WindowRef) peer->getNativeHandle();
|
||||
|
||||
WindowAttributes attributes;
|
||||
GetWindowAttributes (parentWindow, &attributes);
|
||||
|
||||
HIViewRef parentView = 0;
|
||||
|
||||
if ((attributes & kWindowCompositingAttribute) != 0)
|
||||
{
|
||||
HIViewRef root = HIViewGetRoot (parentWindow);
|
||||
HIViewFindByID (root, kHIViewWindowContentID, &parentView);
|
||||
|
||||
if (parentView == 0)
|
||||
parentView = root;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetRootControl (parentWindow, (ControlRef*) &parentView);
|
||||
|
||||
if (parentView == 0)
|
||||
CreateRootControl (parentWindow, (ControlRef*) &parentView);
|
||||
}
|
||||
|
||||
HIViewAddSubview (parentView, view);
|
||||
updateBounds();
|
||||
show();
|
||||
|
||||
webView = HIWebViewGetWebView (view);
|
||||
|
||||
clickListener = [[DownloadClickDetector alloc] initWithOwner: owner_];
|
||||
[webView setPolicyDelegate: clickListener];
|
||||
}
|
||||
|
||||
startTimer (500);
|
||||
}
|
||||
|
||||
~WebBrowserComponentInternal()
|
||||
{
|
||||
[webView setPolicyDelegate: nil];
|
||||
[clickListener release];
|
||||
|
||||
if (view != 0)
|
||||
CFRelease (view);
|
||||
}
|
||||
|
||||
// Horrific bodge-workaround for the fact that the webview somehow hangs onto key
|
||||
// focus when you pop up a new window, no matter what that window does to
|
||||
// try to grab focus for itself. This catches such a situation and forces
|
||||
// focus away from the webview, then back to the place it should be..
|
||||
void timerCallback()
|
||||
{
|
||||
WindowRef viewWindow = HIViewGetWindow (view);
|
||||
WindowRef focusedWindow = GetUserFocusWindow();
|
||||
|
||||
if (focusedWindow != viewWindow)
|
||||
{
|
||||
if (HIViewSubtreeContainsFocus (view))
|
||||
{
|
||||
HIViewAdvanceFocus (HIViewGetRoot (viewWindow), 0);
|
||||
HIViewAdvanceFocus (HIViewGetRoot (focusedWindow), 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void show()
|
||||
{
|
||||
HIViewSetVisible (view, true);
|
||||
}
|
||||
|
||||
void hide()
|
||||
{
|
||||
HIViewSetVisible (view, false);
|
||||
}
|
||||
|
||||
void goToURL (const String& url,
|
||||
const StringArray* headers,
|
||||
const MemoryBlock* postData)
|
||||
{
|
||||
char** headerNamesAsChars = 0;
|
||||
char** headerValuesAsChars = 0;
|
||||
int numHeaders = 0;
|
||||
|
||||
if (headers != 0)
|
||||
{
|
||||
numHeaders = headers->size();
|
||||
|
||||
headerNamesAsChars = (char**) juce_malloc (sizeof (char*) * numHeaders);
|
||||
headerValuesAsChars = (char**) juce_malloc (sizeof (char*) * numHeaders);
|
||||
|
||||
int i;
|
||||
for (i = 0; i < numHeaders; ++i)
|
||||
{
|
||||
const String headerName ((*headers)[i].upToFirstOccurrenceOf (T(":"), false, false).trim());
|
||||
headerNamesAsChars[i] = (char*) juce_calloc (headerName.copyToUTF8 (0));
|
||||
headerName.copyToUTF8 ((JUCE_NAMESPACE::uint8*) headerNamesAsChars[i]);
|
||||
|
||||
const String headerValue ((*headers)[i].fromFirstOccurrenceOf (T(":"), false, false).trim());
|
||||
headerValuesAsChars[i] = (char*) juce_calloc (headerValue.copyToUTF8 (0));
|
||||
headerValue.copyToUTF8 ((JUCE_NAMESPACE::uint8*) headerValuesAsChars[i]);
|
||||
}
|
||||
}
|
||||
|
||||
sendWebViewToURL ((const char*) url.toUTF8(),
|
||||
(const char**) headerNamesAsChars,
|
||||
(const char**) headerValuesAsChars,
|
||||
numHeaders,
|
||||
postData != 0 ? (const char*) postData->getData() : 0,
|
||||
postData != 0 ? postData->getSize() : 0);
|
||||
|
||||
for (int i = 0; i < numHeaders; ++i)
|
||||
{
|
||||
juce_free (headerNamesAsChars[i]);
|
||||
juce_free (headerValuesAsChars[i]);
|
||||
}
|
||||
|
||||
juce_free (headerNamesAsChars);
|
||||
juce_free (headerValuesAsChars);
|
||||
}
|
||||
|
||||
void goBack()
|
||||
{
|
||||
[webView goBack];
|
||||
}
|
||||
|
||||
void goForward()
|
||||
{
|
||||
[webView goForward];
|
||||
}
|
||||
|
||||
void stop()
|
||||
{
|
||||
[webView stopLoading: nil];
|
||||
}
|
||||
|
||||
void updateBounds()
|
||||
{
|
||||
HIRect r;
|
||||
r.origin.x = (float) owner->getScreenX() - owner->getTopLevelComponent()->getScreenX();
|
||||
r.origin.y = (float) owner->getScreenY() - owner->getTopLevelComponent()->getScreenY();
|
||||
r.size.width = (float) owner->getWidth();
|
||||
r.size.height = (float) owner->getHeight();
|
||||
HIViewSetFrame (view, &r);
|
||||
}
|
||||
|
||||
private:
|
||||
WebBrowserComponent* const owner;
|
||||
HIViewRef view;
|
||||
WebView* webView;
|
||||
DownloadClickDetector* clickListener;
|
||||
|
||||
void sendWebViewToURL (const char* utf8URL,
|
||||
const char** headerNames,
|
||||
const char** headerValues,
|
||||
int numHeaders,
|
||||
const char* postData,
|
||||
int postDataSize)
|
||||
{
|
||||
NSMutableURLRequest* r = [NSMutableURLRequest
|
||||
requestWithURL: [NSURL URLWithString: [NSString stringWithUTF8String: utf8URL]]
|
||||
cachePolicy: NSURLRequestUseProtocolCachePolicy
|
||||
timeoutInterval: 30.0];
|
||||
|
||||
if (postDataSize > 0)
|
||||
{
|
||||
[ r setHTTPMethod: @"POST"];
|
||||
[ r setHTTPBody: [NSData dataWithBytes: postData length: postDataSize]];
|
||||
}
|
||||
|
||||
int i;
|
||||
for (i = 0; i < numHeaders; ++i)
|
||||
{
|
||||
[ r setValue: [NSString stringWithUTF8String: headerValues[i]]
|
||||
forHTTPHeaderField: [NSString stringWithUTF8String: headerNames[i]]];
|
||||
}
|
||||
|
||||
[[webView mainFrame] stopLoading ];
|
||||
[[webView mainFrame] loadRequest: r];
|
||||
}
|
||||
|
||||
WebBrowserComponentInternal (const WebBrowserComponentInternal&);
|
||||
const WebBrowserComponentInternal& operator= (const WebBrowserComponentInternal&);
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
WebBrowserComponent::WebBrowserComponent()
|
||||
: browser (0),
|
||||
associatedWindow (0),
|
||||
blankPageShown (false)
|
||||
{
|
||||
setOpaque (true);
|
||||
}
|
||||
|
||||
WebBrowserComponent::~WebBrowserComponent()
|
||||
{
|
||||
deleteBrowser();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void WebBrowserComponent::goToURL (const String& url,
|
||||
const StringArray* headers,
|
||||
const MemoryBlock* postData)
|
||||
{
|
||||
lastURL = url;
|
||||
|
||||
lastHeaders.clear();
|
||||
if (headers != 0)
|
||||
lastHeaders = *headers;
|
||||
|
||||
lastPostData.setSize (0);
|
||||
if (postData != 0)
|
||||
lastPostData = *postData;
|
||||
|
||||
blankPageShown = false;
|
||||
|
||||
if (browser != 0)
|
||||
browser->goToURL (url, headers, postData);
|
||||
}
|
||||
|
||||
void WebBrowserComponent::stop()
|
||||
{
|
||||
if (browser != 0)
|
||||
browser->stop();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::goBack()
|
||||
{
|
||||
lastURL = String::empty;
|
||||
blankPageShown = false;
|
||||
|
||||
if (browser != 0)
|
||||
browser->goBack();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::goForward()
|
||||
{
|
||||
lastURL = String::empty;
|
||||
|
||||
if (browser != 0)
|
||||
browser->goForward();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void WebBrowserComponent::paint (Graphics& g)
|
||||
{
|
||||
if (browser == 0)
|
||||
g.fillAll (Colours::white);
|
||||
}
|
||||
|
||||
void WebBrowserComponent::checkWindowAssociation()
|
||||
{
|
||||
void* const window = getWindowHandle();
|
||||
|
||||
if (window != associatedWindow
|
||||
|| (browser == 0 && window != 0))
|
||||
{
|
||||
associatedWindow = window;
|
||||
|
||||
deleteBrowser();
|
||||
createBrowser();
|
||||
}
|
||||
|
||||
if (browser != 0)
|
||||
{
|
||||
if (associatedWindow != 0 && isShowing())
|
||||
{
|
||||
browser->show();
|
||||
|
||||
if (blankPageShown)
|
||||
goBack();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! blankPageShown)
|
||||
{
|
||||
// when the component becomes invisible, some stuff like flash
|
||||
// carries on playing audio, so we need to force it onto a blank
|
||||
// page to avoid this..
|
||||
|
||||
blankPageShown = true;
|
||||
browser->goToURL ("about:blank", 0, 0);
|
||||
}
|
||||
|
||||
browser->hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WebBrowserComponent::createBrowser()
|
||||
{
|
||||
deleteBrowser();
|
||||
|
||||
if (isShowing())
|
||||
{
|
||||
WebInitForCarbon();
|
||||
browser = new WebBrowserComponentInternal (this);
|
||||
reloadLastURL();
|
||||
}
|
||||
}
|
||||
|
||||
void WebBrowserComponent::deleteBrowser()
|
||||
{
|
||||
deleteAndZero (browser);
|
||||
}
|
||||
|
||||
void WebBrowserComponent::reloadLastURL()
|
||||
{
|
||||
if (lastURL.isNotEmpty())
|
||||
{
|
||||
goToURL (lastURL, &lastHeaders, &lastPostData);
|
||||
lastURL = String::empty;
|
||||
}
|
||||
}
|
||||
|
||||
void WebBrowserComponent::updateBrowserPosition()
|
||||
{
|
||||
if (getPeer() != 0 && browser != 0)
|
||||
browser->updateBounds();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::parentHierarchyChanged()
|
||||
{
|
||||
checkWindowAssociation();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::moved()
|
||||
{
|
||||
updateBrowserPosition();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::resized()
|
||||
{
|
||||
updateBrowserPosition();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::visibilityChanged()
|
||||
{
|
||||
checkWindowAssociation();
|
||||
}
|
||||
|
||||
bool WebBrowserComponent::pageAboutToLoad (const String& url)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
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).
|
||||
#if JUCE_INCLUDED_FILE && JUCE_WEB_BROWSER
|
||||
|
||||
//==============================================================================
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
@interface DownloadClickDetector : NSObject
|
||||
{
|
||||
JUCE_NAMESPACE::WebBrowserComponent* ownerComponent;
|
||||
}
|
||||
|
||||
- (DownloadClickDetector*) initWithWebBrowserOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent;
|
||||
|
||||
- (void) webView: (WebView*) webView decidePolicyForNavigationAction: (NSDictionary*) actionInformation
|
||||
request: (NSURLRequest*) request
|
||||
frame: (WebFrame*) frame
|
||||
decisionListener: (id<WebPolicyDecisionListener>) listener;
|
||||
@end
|
||||
|
||||
//==============================================================================
|
||||
@implementation DownloadClickDetector
|
||||
|
||||
- (DownloadClickDetector*) initWithWebBrowserOwner: (JUCE_NAMESPACE::WebBrowserComponent*) ownerComponent_
|
||||
{
|
||||
[super init];
|
||||
ownerComponent = ownerComponent_;
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) webView: (WebView*) sender decidePolicyForNavigationAction: (NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener
|
||||
{
|
||||
NSURL* url = [actionInformation valueForKey: @"WebActionOriginalURLKey"];
|
||||
|
||||
if (ownerComponent->pageAboutToLoad (JUCE_NAMESPACE::String::fromUTF8 ((const JUCE_NAMESPACE::uint8*) [[url absoluteString] UTF8String])))
|
||||
[listener use];
|
||||
else
|
||||
[listener ignore];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
//==============================================================================
|
||||
class WebBrowserComponentInternal : public NSViewComponent
|
||||
{
|
||||
public:
|
||||
WebBrowserComponentInternal (WebBrowserComponent* owner)
|
||||
{
|
||||
webView = [[WebView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f)
|
||||
frameName: @""
|
||||
groupName: @""];
|
||||
setView (webView);
|
||||
|
||||
clickListener = [[DownloadClickDetector alloc] initWithWebBrowserOwner: owner];
|
||||
[webView setPolicyDelegate: clickListener];
|
||||
}
|
||||
|
||||
~WebBrowserComponentInternal()
|
||||
{
|
||||
[webView setPolicyDelegate: nil];
|
||||
[clickListener release];
|
||||
setView (0);
|
||||
}
|
||||
|
||||
void goToURL (const String& url,
|
||||
const StringArray* headers,
|
||||
const MemoryBlock* postData)
|
||||
{
|
||||
NSMutableURLRequest* r
|
||||
= [NSMutableURLRequest requestWithURL: [NSURL URLWithString: juceStringToNS (url)]
|
||||
cachePolicy: NSURLRequestUseProtocolCachePolicy
|
||||
timeoutInterval: 30.0];
|
||||
|
||||
if (postData != 0 && postData->getSize() > 0)
|
||||
{
|
||||
[r setHTTPMethod: @"POST"];
|
||||
[r setHTTPBody: [NSData dataWithBytes: postData->getData()
|
||||
length: postData->getSize()]];
|
||||
}
|
||||
|
||||
if (headers != 0)
|
||||
{
|
||||
for (int i = 0; i < headers->size(); ++i)
|
||||
{
|
||||
const String headerName ((*headers)[i].upToFirstOccurrenceOf (T(":"), false, false).trim());
|
||||
const String headerValue ((*headers)[i].fromFirstOccurrenceOf (T(":"), false, false).trim());
|
||||
|
||||
[r setValue: juceStringToNS (headerValue)
|
||||
forHTTPHeaderField: juceStringToNS (headerName)];
|
||||
}
|
||||
}
|
||||
|
||||
stop();
|
||||
[[webView mainFrame] loadRequest: r];
|
||||
}
|
||||
|
||||
void goBack()
|
||||
{
|
||||
[webView goBack];
|
||||
}
|
||||
|
||||
void goForward()
|
||||
{
|
||||
[webView goForward];
|
||||
}
|
||||
|
||||
void stop()
|
||||
{
|
||||
[webView stopLoading: nil];
|
||||
}
|
||||
|
||||
private:
|
||||
WebView* webView;
|
||||
DownloadClickDetector* clickListener;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
WebBrowserComponent::WebBrowserComponent()
|
||||
: browser (0),
|
||||
blankPageShown (false)
|
||||
{
|
||||
setOpaque (true);
|
||||
|
||||
addAndMakeVisible (browser = new WebBrowserComponentInternal (this));
|
||||
}
|
||||
|
||||
WebBrowserComponent::~WebBrowserComponent()
|
||||
{
|
||||
deleteAndZero (browser);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void WebBrowserComponent::goToURL (const String& url,
|
||||
const StringArray* headers,
|
||||
const MemoryBlock* postData)
|
||||
{
|
||||
lastURL = url;
|
||||
|
||||
lastHeaders.clear();
|
||||
if (headers != 0)
|
||||
lastHeaders = *headers;
|
||||
|
||||
lastPostData.setSize (0);
|
||||
if (postData != 0)
|
||||
lastPostData = *postData;
|
||||
|
||||
blankPageShown = false;
|
||||
|
||||
browser->goToURL (url, headers, postData);
|
||||
}
|
||||
|
||||
void WebBrowserComponent::stop()
|
||||
{
|
||||
browser->stop();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::goBack()
|
||||
{
|
||||
lastURL = String::empty;
|
||||
blankPageShown = false;
|
||||
browser->goBack();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::goForward()
|
||||
{
|
||||
lastURL = String::empty;
|
||||
browser->goForward();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void WebBrowserComponent::paint (Graphics& g)
|
||||
{
|
||||
}
|
||||
|
||||
void WebBrowserComponent::checkWindowAssociation()
|
||||
{
|
||||
// when the component becomes invisible, some stuff like flash
|
||||
// carries on playing audio, so we need to force it onto a blank
|
||||
// page to avoid this, (and send it back when it's made visible again).
|
||||
|
||||
if (isShowing())
|
||||
{
|
||||
if (blankPageShown)
|
||||
goBack();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! blankPageShown)
|
||||
{
|
||||
blankPageShown = true;
|
||||
browser->goToURL ("about:blank", 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WebBrowserComponent::reloadLastURL()
|
||||
{
|
||||
if (lastURL.isNotEmpty())
|
||||
{
|
||||
goToURL (lastURL, &lastHeaders, &lastPostData);
|
||||
lastURL = String::empty;
|
||||
}
|
||||
}
|
||||
|
||||
void WebBrowserComponent::parentHierarchyChanged()
|
||||
{
|
||||
checkWindowAssociation();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::resized()
|
||||
{
|
||||
browser->setSize (getWidth(), getHeight());
|
||||
}
|
||||
|
||||
void WebBrowserComponent::visibilityChanged()
|
||||
{
|
||||
checkWindowAssociation();
|
||||
}
|
||||
|
||||
bool WebBrowserComponent::pageAboutToLoad (const String& url)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -29,56 +29,12 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "win32_headers.h"
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE && JUCE_ASIO
|
||||
|
||||
#undef WINDOWS
|
||||
|
||||
#if JUCE_ASIO
|
||||
|
||||
//==============================================================================
|
||||
/*
|
||||
This is very frustrating - we only need to use a handful of definitions from
|
||||
a couple of the header files in Steinberg's ASIO SDK, and it'd be easy to copy
|
||||
about 30 lines of code into this cpp file to create a fully stand-alone ASIO
|
||||
implementation...
|
||||
|
||||
..unfortunately that would break Steinberg's license agreement for use of
|
||||
their SDK, so I'm not allowed to do this.
|
||||
|
||||
This means that anyone who wants to use JUCE's ASIO abilities will have to:
|
||||
|
||||
1) Agree to Steinberg's licensing terms and download the ASIO SDK
|
||||
(see www.steinberg.net/Steinberg/Developers.asp).
|
||||
|
||||
2) Rebuild the whole of JUCE, setting the global definition JUCE_ASIO (you
|
||||
can un-comment the "#define JUCE_ASIO" line in juce_Config.h
|
||||
if you prefer). Make sure that your header search path will find the
|
||||
iasiodrv.h file that comes with the SDK. (Only about 2-3 of the SDK header
|
||||
files are actually needed - so to simplify things, you could just copy
|
||||
these into your JUCE directory).
|
||||
*/
|
||||
#include "iasiodrv.h" // if you're compiling and this line causes an error because
|
||||
// you don't have the ASIO SDK installed, you can disable ASIO
|
||||
// support by commenting-out the "#define JUCE_ASIO" line in
|
||||
// juce_Config.h
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_appframework/audio/devices/juce_AudioIODeviceType.h"
|
||||
#include "../../../src/juce_appframework/audio/devices/juce_AudioDeviceManager.h"
|
||||
#include "../../../src/juce_appframework/gui/components/buttons/juce_TextButton.h"
|
||||
#include "../../../src/juce_appframework/gui/components/lookandfeel/juce_LookAndFeel.h"
|
||||
#include "../../../src/juce_core/threads/juce_ScopedLock.h"
|
||||
#include "../../../src/juce_core/basics/juce_Time.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
#include "../../../src/juce_appframework/events/juce_Timer.h"
|
||||
#include "../../../src/juce_appframework/events/juce_MessageManager.h"
|
||||
#include "../../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h"
|
||||
#include "../../../src/juce_appframework/gui/components/controls/juce_ListBox.h"
|
||||
#include "../../../src/juce_core/text/juce_LocalisedStrings.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// #define ASIO_DEBUGGING
|
||||
|
||||
|
|
@ -1806,7 +1762,7 @@ public:
|
|||
|
||||
#if JUCE_DEBUG
|
||||
if (deviceNames.size() > 1 && deviceNames[0].containsIgnoreCase (T("digidesign")))
|
||||
return 1; // (the digi m-box driver crashes the app when you run
|
||||
return 1; // (the digi m-box driver crashes the app when you run
|
||||
// it in the debugger, which can be a bit annoying)
|
||||
#endif
|
||||
|
||||
|
|
@ -1974,7 +1930,7 @@ AudioIODeviceType* juce_createASIOAudioIODeviceType()
|
|||
return new ASIOAudioIODeviceType();
|
||||
}
|
||||
|
||||
AudioIODevice* juce_createASIOAudioIODeviceForGUID (const String& name,
|
||||
AudioIODevice* juce_createASIOAudioIODeviceForGUID (const String& name,
|
||||
void* guid)
|
||||
{
|
||||
const int freeSlot = ASIOAudioIODeviceType::findFreeSlot();
|
||||
|
|
@ -1985,9 +1941,6 @@ AudioIODevice* juce_createASIOAudioIODeviceForGUID (const String& name,
|
|||
return new ASIOAudioIODevice (name, *(CLSID*) guid, freeSlot);
|
||||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
#undef log
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,552 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class JuceIStorage : public IStorage
|
||||
{
|
||||
int refCount;
|
||||
|
||||
public:
|
||||
JuceIStorage() : refCount (1) {}
|
||||
|
||||
virtual ~JuceIStorage()
|
||||
{
|
||||
jassert (refCount == 0);
|
||||
}
|
||||
|
||||
HRESULT __stdcall QueryInterface (REFIID id, void __RPC_FAR* __RPC_FAR* result)
|
||||
{
|
||||
if (id == IID_IUnknown || id == IID_IStorage)
|
||||
{
|
||||
AddRef();
|
||||
*result = this;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*result = 0;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG __stdcall AddRef() { return ++refCount; }
|
||||
ULONG __stdcall Release() { const int r = --refCount; if (r == 0) delete this; return r; }
|
||||
|
||||
HRESULT __stdcall CreateStream (const WCHAR*, DWORD, DWORD, DWORD, IStream**) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall OpenStream (const WCHAR*, void*, DWORD, DWORD, IStream**) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall CreateStorage (const WCHAR*, DWORD, DWORD, DWORD, IStorage**) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall OpenStorage (const WCHAR*, IStorage*, DWORD, SNB, DWORD, IStorage**) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall CopyTo (DWORD, IID const*, SNB, IStorage*) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall MoveElementTo (const OLECHAR*,IStorage*, const OLECHAR*, DWORD) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall Commit (DWORD) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall Revert() { return E_NOTIMPL; }
|
||||
HRESULT __stdcall EnumElements (DWORD, void*, DWORD, IEnumSTATSTG**) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall DestroyElement (const OLECHAR*) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall RenameElement (const WCHAR*, const WCHAR*) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall SetElementTimes (const WCHAR*, FILETIME const*, FILETIME const*, FILETIME const*) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall SetClass (REFCLSID) { return S_OK; }
|
||||
HRESULT __stdcall SetStateBits (DWORD, DWORD) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall Stat (STATSTG*, DWORD) { return E_NOTIMPL; }
|
||||
|
||||
juce_UseDebuggingNewOperator
|
||||
};
|
||||
|
||||
|
||||
class JuceOleInPlaceFrame : public IOleInPlaceFrame
|
||||
{
|
||||
int refCount;
|
||||
HWND window;
|
||||
|
||||
public:
|
||||
JuceOleInPlaceFrame (HWND window_)
|
||||
: refCount (1),
|
||||
window (window_)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~JuceOleInPlaceFrame()
|
||||
{
|
||||
jassert (refCount == 0);
|
||||
}
|
||||
|
||||
HRESULT __stdcall QueryInterface (REFIID id, void __RPC_FAR* __RPC_FAR* result)
|
||||
{
|
||||
if (id == IID_IUnknown || id == IID_IOleInPlaceFrame)
|
||||
{
|
||||
AddRef();
|
||||
*result = this;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*result = 0;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG __stdcall AddRef() { return ++refCount; }
|
||||
ULONG __stdcall Release() { const int r = --refCount; if (r == 0) delete this; return r; }
|
||||
|
||||
HRESULT __stdcall GetWindow (HWND* lphwnd) { *lphwnd = window; return S_OK; }
|
||||
HRESULT __stdcall ContextSensitiveHelp (BOOL) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall GetBorder (LPRECT) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall RequestBorderSpace (LPCBORDERWIDTHS) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall SetBorderSpace (LPCBORDERWIDTHS) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall SetActiveObject (IOleInPlaceActiveObject*, LPCOLESTR) { return S_OK; }
|
||||
HRESULT __stdcall InsertMenus (HMENU, LPOLEMENUGROUPWIDTHS) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall SetMenu (HMENU, HOLEMENU, HWND) { return S_OK; }
|
||||
HRESULT __stdcall RemoveMenus (HMENU) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall SetStatusText (LPCOLESTR) { return S_OK; }
|
||||
HRESULT __stdcall EnableModeless (BOOL) { return S_OK; }
|
||||
HRESULT __stdcall TranslateAccelerator(LPMSG, WORD) { return E_NOTIMPL; }
|
||||
|
||||
juce_UseDebuggingNewOperator
|
||||
};
|
||||
|
||||
|
||||
class JuceIOleInPlaceSite : public IOleInPlaceSite
|
||||
{
|
||||
int refCount;
|
||||
HWND window;
|
||||
JuceOleInPlaceFrame* frame;
|
||||
|
||||
public:
|
||||
JuceIOleInPlaceSite (HWND window_)
|
||||
: refCount (1),
|
||||
window (window_)
|
||||
{
|
||||
frame = new JuceOleInPlaceFrame (window);
|
||||
}
|
||||
|
||||
virtual ~JuceIOleInPlaceSite()
|
||||
{
|
||||
jassert (refCount == 0);
|
||||
frame->Release();
|
||||
}
|
||||
|
||||
HRESULT __stdcall QueryInterface (REFIID id, void __RPC_FAR* __RPC_FAR* result)
|
||||
{
|
||||
if (id == IID_IUnknown || id == IID_IOleInPlaceSite)
|
||||
{
|
||||
AddRef();
|
||||
*result = this;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*result = 0;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG __stdcall AddRef() { return ++refCount; }
|
||||
ULONG __stdcall Release() { const int r = --refCount; if (r == 0) delete this; return r; }
|
||||
|
||||
HRESULT __stdcall GetWindow (HWND* lphwnd) { *lphwnd = window; return S_OK; }
|
||||
HRESULT __stdcall ContextSensitiveHelp (BOOL) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall CanInPlaceActivate() { return S_OK; }
|
||||
HRESULT __stdcall OnInPlaceActivate() { return S_OK; }
|
||||
HRESULT __stdcall OnUIActivate() { return S_OK; }
|
||||
|
||||
HRESULT __stdcall GetWindowContext (LPOLEINPLACEFRAME* lplpFrame, LPOLEINPLACEUIWINDOW* lplpDoc, LPRECT, LPRECT, LPOLEINPLACEFRAMEINFO lpFrameInfo)
|
||||
{
|
||||
frame->AddRef();
|
||||
*lplpFrame = frame;
|
||||
*lplpDoc = 0;
|
||||
lpFrameInfo->fMDIApp = FALSE;
|
||||
lpFrameInfo->hwndFrame = window;
|
||||
lpFrameInfo->haccel = 0;
|
||||
lpFrameInfo->cAccelEntries = 0;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT __stdcall Scroll (SIZE) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall OnUIDeactivate (BOOL) { return S_OK; }
|
||||
HRESULT __stdcall OnInPlaceDeactivate() { return S_OK; }
|
||||
HRESULT __stdcall DiscardUndoState() { return E_NOTIMPL; }
|
||||
HRESULT __stdcall DeactivateAndUndo() { return E_NOTIMPL; }
|
||||
HRESULT __stdcall OnPosRectChange (LPCRECT) { return S_OK; }
|
||||
|
||||
juce_UseDebuggingNewOperator
|
||||
};
|
||||
|
||||
|
||||
class JuceIOleClientSite : public IOleClientSite
|
||||
{
|
||||
int refCount;
|
||||
JuceIOleInPlaceSite* inplaceSite;
|
||||
|
||||
public:
|
||||
JuceIOleClientSite (HWND window)
|
||||
: refCount (1)
|
||||
{
|
||||
inplaceSite = new JuceIOleInPlaceSite (window);
|
||||
}
|
||||
|
||||
virtual ~JuceIOleClientSite()
|
||||
{
|
||||
jassert (refCount == 0);
|
||||
inplaceSite->Release();
|
||||
}
|
||||
|
||||
HRESULT __stdcall QueryInterface (REFIID id, void __RPC_FAR* __RPC_FAR* result)
|
||||
{
|
||||
if (id == IID_IUnknown || id == IID_IOleClientSite)
|
||||
{
|
||||
AddRef();
|
||||
*result = this;
|
||||
return S_OK;
|
||||
}
|
||||
else if (id == IID_IOleInPlaceSite)
|
||||
{
|
||||
inplaceSite->AddRef();
|
||||
*result = inplaceSite;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*result = 0;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG __stdcall AddRef() { return ++refCount; }
|
||||
ULONG __stdcall Release() { const int r = --refCount; if (r == 0) delete this; return r; }
|
||||
|
||||
HRESULT __stdcall SaveObject() { return E_NOTIMPL; }
|
||||
HRESULT __stdcall GetMoniker (DWORD, DWORD, IMoniker**) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall GetContainer (LPOLECONTAINER* ppContainer) { *ppContainer = 0; return E_NOINTERFACE; }
|
||||
HRESULT __stdcall ShowObject() { return S_OK; }
|
||||
HRESULT __stdcall OnShowWindow (BOOL) { return E_NOTIMPL; }
|
||||
HRESULT __stdcall RequestNewObjectLayout() { return E_NOTIMPL; }
|
||||
|
||||
juce_UseDebuggingNewOperator
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class ActiveXControlData : public ComponentMovementWatcher
|
||||
{
|
||||
ActiveXControlComponent* const owner;
|
||||
bool wasShowing;
|
||||
|
||||
public:
|
||||
HWND controlHWND;
|
||||
IStorage* storage;
|
||||
IOleClientSite* clientSite;
|
||||
IOleObject* control;
|
||||
|
||||
//==============================================================================
|
||||
ActiveXControlData (HWND hwnd,
|
||||
ActiveXControlComponent* const owner_)
|
||||
: ComponentMovementWatcher (owner_),
|
||||
owner (owner_),
|
||||
wasShowing (owner_ != 0 && owner_->isShowing()),
|
||||
controlHWND (0),
|
||||
storage (new JuceIStorage()),
|
||||
clientSite (new JuceIOleClientSite (hwnd)),
|
||||
control (0)
|
||||
{
|
||||
}
|
||||
|
||||
~ActiveXControlData()
|
||||
{
|
||||
if (control != 0)
|
||||
{
|
||||
control->Close (OLECLOSE_NOSAVE);
|
||||
control->Release();
|
||||
}
|
||||
|
||||
clientSite->Release();
|
||||
storage->Release();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/)
|
||||
{
|
||||
Component* const topComp = owner->getTopLevelComponent();
|
||||
|
||||
if (topComp->getPeer() != 0)
|
||||
{
|
||||
int x = 0, y = 0;
|
||||
owner->relativePositionToOtherComponent (topComp, x, y);
|
||||
|
||||
owner->setControlBounds (Rectangle (x, y, owner->getWidth(), owner->getHeight()));
|
||||
}
|
||||
}
|
||||
|
||||
void componentPeerChanged()
|
||||
{
|
||||
const bool isShowingNow = owner->isShowing();
|
||||
|
||||
if (wasShowing != isShowingNow)
|
||||
{
|
||||
wasShowing = isShowingNow;
|
||||
|
||||
owner->setControlVisible (isShowingNow);
|
||||
}
|
||||
}
|
||||
|
||||
void componentVisibilityChanged (Component&)
|
||||
{
|
||||
componentPeerChanged();
|
||||
}
|
||||
|
||||
static bool doesWindowMatch (const ActiveXControlComponent* const ax, HWND hwnd)
|
||||
{
|
||||
return ((ActiveXControlData*) ax->control) != 0
|
||||
&& ((ActiveXControlData*) ax->control)->controlHWND == hwnd;
|
||||
}
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
static VoidArray activeXComps;
|
||||
|
||||
static HWND getHWND (const ActiveXControlComponent* const component)
|
||||
{
|
||||
HWND hwnd = 0;
|
||||
|
||||
const IID iid = IID_IOleWindow;
|
||||
IOleWindow* const window = (IOleWindow*) component->queryInterface (&iid);
|
||||
|
||||
if (window != 0)
|
||||
{
|
||||
window->GetWindow (&hwnd);
|
||||
window->Release();
|
||||
}
|
||||
|
||||
return hwnd;
|
||||
}
|
||||
|
||||
static void offerActiveXMouseEventToPeer (ComponentPeer* const peer, HWND hwnd, UINT message, LPARAM lParam)
|
||||
{
|
||||
RECT activeXRect, peerRect;
|
||||
GetWindowRect (hwnd, &activeXRect);
|
||||
GetWindowRect ((HWND) peer->getNativeHandle(), &peerRect);
|
||||
|
||||
const int mx = GET_X_LPARAM (lParam) + activeXRect.left - peerRect.left;
|
||||
const int my = GET_Y_LPARAM (lParam) + activeXRect.top - peerRect.top;
|
||||
const int64 mouseEventTime = getMouseEventTime();
|
||||
|
||||
const int oldModifiers = currentModifiers;
|
||||
ModifierKeys::getCurrentModifiersRealtime(); // to update the mouse button flags
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_MOUSEMOVE:
|
||||
if (ModifierKeys (currentModifiers).isAnyMouseButtonDown())
|
||||
peer->handleMouseDrag (mx, my, mouseEventTime);
|
||||
else
|
||||
peer->handleMouseMove (mx, my, mouseEventTime);
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_MBUTTONDOWN:
|
||||
case WM_RBUTTONDOWN:
|
||||
peer->handleMouseDown (mx, my, mouseEventTime);
|
||||
break;
|
||||
|
||||
case WM_LBUTTONUP:
|
||||
case WM_MBUTTONUP:
|
||||
case WM_RBUTTONUP:
|
||||
peer->handleMouseUp (oldModifiers, mx, my, mouseEventTime);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// intercepts events going to an activeX control, so we can sneakily use the mouse events
|
||||
static LRESULT CALLBACK activeXHookWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
for (int i = activeXComps.size(); --i >= 0;)
|
||||
{
|
||||
const ActiveXControlComponent* const ax = (const ActiveXControlComponent*) activeXComps.getUnchecked(i);
|
||||
|
||||
if (ActiveXControlData::doesWindowMatch (ax, hwnd))
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_MOUSEMOVE:
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_MBUTTONDOWN:
|
||||
case WM_RBUTTONDOWN:
|
||||
case WM_LBUTTONUP:
|
||||
case WM_MBUTTONUP:
|
||||
case WM_RBUTTONUP:
|
||||
case WM_LBUTTONDBLCLK:
|
||||
case WM_MBUTTONDBLCLK:
|
||||
case WM_RBUTTONDBLCLK:
|
||||
if (ax->isShowing())
|
||||
{
|
||||
ComponentPeer* const peer = ax->getPeer();
|
||||
|
||||
if (peer != 0)
|
||||
{
|
||||
offerActiveXMouseEventToPeer (peer, hwnd, message, lParam);
|
||||
|
||||
if (! ax->areMouseEventsAllowed())
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return CallWindowProc ((WNDPROC) (ax->originalWndProc), hwnd, message, wParam, lParam);
|
||||
}
|
||||
}
|
||||
|
||||
return DefWindowProc (hwnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
ActiveXControlComponent::ActiveXControlComponent()
|
||||
: originalWndProc (0),
|
||||
control (0),
|
||||
mouseEventsAllowed (true)
|
||||
{
|
||||
activeXComps.add (this);
|
||||
}
|
||||
|
||||
ActiveXControlComponent::~ActiveXControlComponent()
|
||||
{
|
||||
deleteControl();
|
||||
activeXComps.removeValue (this);
|
||||
}
|
||||
|
||||
void ActiveXControlComponent::paint (Graphics& g)
|
||||
{
|
||||
if (control == 0)
|
||||
g.fillAll (Colours::lightgrey);
|
||||
}
|
||||
|
||||
bool ActiveXControlComponent::createControl (const void* controlIID)
|
||||
{
|
||||
deleteControl();
|
||||
ComponentPeer* const peer = getPeer();
|
||||
|
||||
// the component must have already been added to a real window when you call this!
|
||||
jassert (dynamic_cast <Win32ComponentPeer*> (peer) != 0);
|
||||
|
||||
if (dynamic_cast <Win32ComponentPeer*> (peer) != 0)
|
||||
{
|
||||
int x = 0, y = 0;
|
||||
relativePositionToOtherComponent (getTopLevelComponent(), x, y);
|
||||
|
||||
HWND hwnd = (HWND) peer->getNativeHandle();
|
||||
|
||||
ActiveXControlData* const info = new ActiveXControlData (hwnd, this);
|
||||
|
||||
HRESULT hr;
|
||||
if ((hr = OleCreate (*(const IID*) controlIID, IID_IOleObject, 1 /*OLERENDER_DRAW*/, 0,
|
||||
info->clientSite, info->storage,
|
||||
(void**) &(info->control))) == S_OK)
|
||||
{
|
||||
info->control->SetHostNames (L"Juce", 0);
|
||||
|
||||
if (OleSetContainedObject (info->control, TRUE) == S_OK)
|
||||
{
|
||||
RECT rect;
|
||||
rect.left = x;
|
||||
rect.top = y;
|
||||
rect.right = x + getWidth();
|
||||
rect.bottom = y + getHeight();
|
||||
|
||||
if (info->control->DoVerb (OLEIVERB_SHOW, 0, info->clientSite, 0, hwnd, &rect) == S_OK)
|
||||
{
|
||||
control = info;
|
||||
setControlBounds (Rectangle (x, y, getWidth(), getHeight()));
|
||||
|
||||
info->controlHWND = getHWND (this);
|
||||
|
||||
if (info->controlHWND != 0)
|
||||
{
|
||||
originalWndProc = (void*) GetWindowLongPtr ((HWND) info->controlHWND, GWLP_WNDPROC);
|
||||
SetWindowLongPtr ((HWND) info->controlHWND, GWLP_WNDPROC, (LONG_PTR) activeXHookWndProc);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete info;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void ActiveXControlComponent::deleteControl()
|
||||
{
|
||||
ActiveXControlData* const info = (ActiveXControlData*) control;
|
||||
|
||||
if (info != 0)
|
||||
{
|
||||
delete info;
|
||||
control = 0;
|
||||
originalWndProc = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void* ActiveXControlComponent::queryInterface (const void* iid) const
|
||||
{
|
||||
ActiveXControlData* const info = (ActiveXControlData*) control;
|
||||
|
||||
void* result = 0;
|
||||
|
||||
if (info != 0 && info->control != 0
|
||||
&& info->control->QueryInterface (*(const IID*) iid, &result) == S_OK)
|
||||
return result;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ActiveXControlComponent::setControlBounds (const Rectangle& newBounds) const
|
||||
{
|
||||
HWND hwnd = ((ActiveXControlData*) control)->controlHWND;
|
||||
|
||||
if (hwnd != 0)
|
||||
MoveWindow (hwnd, newBounds.getX(), newBounds.getY(), newBounds.getWidth(), newBounds.getHeight(), TRUE);
|
||||
}
|
||||
|
||||
void ActiveXControlComponent::setControlVisible (const bool shouldBeVisible) const
|
||||
{
|
||||
HWND hwnd = ((ActiveXControlData*) control)->controlHWND;
|
||||
|
||||
if (hwnd != 0)
|
||||
ShowWindow (hwnd, shouldBeVisible ? SW_SHOWNA : SW_HIDE);
|
||||
}
|
||||
|
||||
void ActiveXControlComponent::setMouseEventsAllowed (const bool eventsCanReachControl)
|
||||
{
|
||||
mouseEventsAllowed = eventsCanReachControl;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -29,37 +29,10 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable: 4514)
|
||||
#pragma warning (push)
|
||||
#endif
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE && JUCE_USE_CDBURNER
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#include "../../../juce_Config.h"
|
||||
|
||||
#if JUCE_USE_CDBURNER
|
||||
// you'll need the Platform SDK for these headers - if you don't have it and don't
|
||||
// need to use CD-burning, then you might just want to disable the JUCE_USE_CDBURNER
|
||||
// flag in juce_Config.h to avoid these includes.
|
||||
#include <imapi.h>
|
||||
#include <imapierror.h>
|
||||
#endif
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDReader.h"
|
||||
#include "../../../src/juce_appframework/audio/audio_file_formats/juce_AudioCDBurner.h"
|
||||
#include "../../../src/juce_appframework/events/juce_Timer.h"
|
||||
#include "../../../src/juce_appframework/application/juce_DeletedAtShutdown.h"
|
||||
#include "../../../src/juce_appframework/audio/dsp/juce_AudioDataConverters.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
|
||||
//***************************************************************************
|
||||
// %%% TARGET STATUS VALUES %%%
|
||||
|
|
@ -2122,8 +2095,6 @@ void AudioCDReader::ejectDisk()
|
|||
}
|
||||
|
||||
|
||||
#if JUCE_USE_CDBURNER
|
||||
|
||||
//==============================================================================
|
||||
static IDiscRecorder* enumCDBurners (StringArray* list, int indexToOpen, IDiscMaster** master)
|
||||
{
|
||||
|
|
@ -2445,5 +2416,3 @@ bool AudioCDBurner::addAudioTrack (AudioSource* source, int numSamples)
|
|||
}
|
||||
|
||||
#endif
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -29,10 +29,13 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
//==============================================================================
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
extern "C"
|
||||
{
|
||||
|
||||
|
|
@ -524,7 +527,7 @@ public:
|
|||
bytesPerBuffer,
|
||||
(void**) &lpbuf1, &dwSize1,
|
||||
(void**) &lpbuf2, &dwSize2, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (hr == S_OK)
|
||||
{
|
||||
|
|
@ -1216,41 +1219,17 @@ private:
|
|||
|
||||
void resync()
|
||||
{
|
||||
int i;
|
||||
for (i = outChans.size(); --i >= 0;)
|
||||
outChans.getUnchecked(i)->close();
|
||||
|
||||
for (i = inChans.size(); --i >= 0;)
|
||||
inChans.getUnchecked(i)->close();
|
||||
|
||||
if (threadShouldExit())
|
||||
return;
|
||||
|
||||
// boost our priority while opening the devices to try to get better sync between them
|
||||
const int oldThreadPri = GetThreadPriority (GetCurrentThread());
|
||||
const int oldProcPri = GetPriorityClass (GetCurrentProcess());
|
||||
SetThreadPriority (GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
|
||||
SetPriorityClass (GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
|
||||
|
||||
for (i = outChans.size(); --i >= 0;)
|
||||
outChans.getUnchecked(i)->open();
|
||||
|
||||
for (i = inChans.size(); --i >= 0;)
|
||||
inChans.getUnchecked(i)->open();
|
||||
|
||||
if (! threadShouldExit())
|
||||
{
|
||||
sleep (5);
|
||||
|
||||
int i;
|
||||
for (i = 0; i < outChans.size(); ++i)
|
||||
outChans.getUnchecked(i)->synchronisePosition();
|
||||
|
||||
for (i = 0; i < inChans.size(); ++i)
|
||||
inChans.getUnchecked(i)->synchronisePosition();
|
||||
}
|
||||
|
||||
SetThreadPriority (GetCurrentThread(), oldThreadPri);
|
||||
SetPriorityClass (GetCurrentProcess(), oldProcPri);
|
||||
}
|
||||
|
||||
public:
|
||||
|
|
@ -1435,8 +1414,8 @@ public:
|
|||
const int inputIndex = inputDeviceNames.indexOf (inputDeviceName);
|
||||
|
||||
if (outputIndex >= 0 || inputIndex >= 0)
|
||||
return new DSoundAudioIODevice (outputDeviceName.isNotEmpty() ? outputDeviceName
|
||||
: inputDeviceName,
|
||||
return new DSoundAudioIODevice (outputDeviceName.isNotEmpty() ? outputDeviceName
|
||||
: inputDeviceName,
|
||||
outputIndex, inputIndex);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1676,4 +1655,4 @@ const String DSoundAudioIODevice::openDevice (const BitArray& inputChannels,
|
|||
|
||||
#undef log
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,12 +29,10 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/text/juce_String.h"
|
||||
#include "juce_win32_DynamicLibraryLoader.h"
|
||||
|
||||
|
||||
|
|
@ -54,4 +52,5 @@ void* DynamicLibraryLoader::findProcAddress (const String& functionName)
|
|||
return (void*) GetProcAddress ((HMODULE) libHandle, functionName);
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,25 +29,10 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable: 4514)
|
||||
#pragma warning (push)
|
||||
#endif
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include <shlobj.h>
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_appframework/gui/components/filebrowser/juce_FileChooser.h"
|
||||
#include "../../../src/juce_appframework/gui/components/juce_Desktop.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
static const void* defaultDirPath = 0;
|
||||
|
|
@ -355,4 +340,4 @@ void FileChooser::showPlatformDialog (OwnedArray<File>& results,
|
|||
}
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,21 +29,12 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable: 4514)
|
||||
#pragma warning (push)
|
||||
#endif
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
#include <ctime>
|
||||
|
||||
#ifndef _WIN32_IE
|
||||
#define _WIN32_IE 0x0400
|
||||
#endif
|
||||
#include <shlobj.h>
|
||||
|
||||
//==============================================================================
|
||||
#ifndef CSIDL_MYMUSIC
|
||||
#define CSIDL_MYMUSIC 0x000d
|
||||
#endif
|
||||
|
|
@ -52,19 +43,6 @@
|
|||
#define CSIDL_MYVIDEO 0x000e
|
||||
#endif
|
||||
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/io/files/juce_File.h"
|
||||
#include "../../../src/juce_core/io/network/juce_URL.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
#include "../../../src/juce_core/io/files/juce_NamedPipe.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
const tchar File::separator = T('\\');
|
||||
const tchar* File::separatorString = T("\\");
|
||||
|
|
@ -711,7 +689,8 @@ bool NamedPipe::openInternal (const String& pipeName, const bool createPipe)
|
|||
if (createPipe)
|
||||
{
|
||||
intern->pipeH = CreateNamedPipe (file, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, 0,
|
||||
1, 64, 64, 0, NULL);
|
||||
PIPE_UNLIMITED_INSTANCES,
|
||||
4096, 4096, 0, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -758,20 +737,24 @@ int NamedPipe::read (void* destBuffer, int maxBytesToRead, int timeOutMillisecon
|
|||
else if (GetLastError() == ERROR_IO_PENDING)
|
||||
{
|
||||
HANDLE handles[] = { over.hEvent, intern->cancelEvent };
|
||||
|
||||
if (WaitForMultipleObjects (2, handles, FALSE,
|
||||
timeOutMilliseconds >= 0 ? timeOutMilliseconds
|
||||
: INFINITE) == WAIT_OBJECT_0)
|
||||
DWORD waitResult = WaitForMultipleObjects (2, handles, FALSE,
|
||||
timeOutMilliseconds >= 0 ? timeOutMilliseconds
|
||||
: INFINITE);
|
||||
if (waitResult != WAIT_OBJECT_0)
|
||||
{
|
||||
if (GetOverlappedResult (intern->pipeH, &over, &numRead, FALSE))
|
||||
{
|
||||
bytesRead = (int) numRead;
|
||||
}
|
||||
else if (GetLastError() == ERROR_BROKEN_PIPE && intern->createdPipe)
|
||||
{
|
||||
intern->disconnect();
|
||||
waitAgain = true;
|
||||
}
|
||||
// if the operation timed out, let's cancel it...
|
||||
CancelIo (intern->pipeH);
|
||||
WaitForSingleObject (over.hEvent, INFINITE); // makes sure cancel is complete
|
||||
}
|
||||
|
||||
if (GetOverlappedResult (intern->pipeH, &over, &numRead, FALSE))
|
||||
{
|
||||
bytesRead = (int) numRead;
|
||||
}
|
||||
else if (GetLastError() == ERROR_BROKEN_PIPE && intern->createdPipe)
|
||||
{
|
||||
intern->disconnect();
|
||||
waitAgain = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -810,18 +793,25 @@ int NamedPipe::write (const void* sourceBuffer, int numBytesToWrite, int timeOut
|
|||
else if (GetLastError() == ERROR_IO_PENDING)
|
||||
{
|
||||
HANDLE handles[] = { over.hEvent, intern->cancelEvent };
|
||||
DWORD waitResult;
|
||||
|
||||
if (WaitForMultipleObjects (2, handles, FALSE, timeOutMilliseconds >= 0 ? timeOutMilliseconds
|
||||
: INFINITE) == WAIT_OBJECT_0)
|
||||
waitResult = WaitForMultipleObjects (2, handles, FALSE,
|
||||
timeOutMilliseconds >= 0 ? timeOutMilliseconds
|
||||
: INFINITE);
|
||||
|
||||
if (waitResult != WAIT_OBJECT_0)
|
||||
{
|
||||
if (GetOverlappedResult (intern->pipeH, &over, &numWritten, FALSE))
|
||||
{
|
||||
bytesWritten = (int) numWritten;
|
||||
}
|
||||
else if (GetLastError() == ERROR_BROKEN_PIPE && intern->createdPipe)
|
||||
{
|
||||
intern->disconnect();
|
||||
}
|
||||
CancelIo (intern->pipeH);
|
||||
WaitForSingleObject (over.hEvent, INFINITE);
|
||||
}
|
||||
|
||||
if (GetOverlappedResult (intern->pipeH, &over, &numWritten, FALSE))
|
||||
{
|
||||
bytesWritten = (int) numWritten;
|
||||
}
|
||||
else if (GetLastError() == ERROR_BROKEN_PIPE && intern->createdPipe)
|
||||
{
|
||||
intern->disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -840,4 +830,4 @@ void NamedPipe::cancelPendingReads()
|
|||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,16 +29,9 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_appframework/gui/graphics/fonts/juce_Font.h"
|
||||
#include "../../../src/juce_appframework/application/juce_DeletedAtShutdown.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
#include "../../../src/juce_core/basics/juce_Singleton.h"
|
||||
#include "../../../src/juce_appframework/gui/graphics/imaging/juce_Image.h"
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -506,4 +499,4 @@ void Typeface::initialiseTypefaceCharacteristics (const String& fontName,
|
|||
}
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,16 +29,9 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_appframework/events/juce_MessageManager.h"
|
||||
#include "../../../src/juce_appframework/application/juce_Application.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
#include "../../../src/juce_core/basics/juce_Time.h"
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -250,4 +243,5 @@ void MessageManager::doPlatformSpecificShutdown()
|
|||
OleUninitialize();
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,22 +29,9 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_appframework/audio/devices/juce_MidiOutput.h"
|
||||
#include "../../../src/juce_appframework/audio/devices/juce_MidiInput.h"
|
||||
#include "../../../src/juce_core/basics/juce_Time.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
#include "../../../src/juce_core/containers/juce_MemoryBlock.h"
|
||||
|
||||
#if JUCE_MSVC
|
||||
#pragma warning (disable: 4312)
|
||||
#endif
|
||||
|
||||
using ::free;
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
//==============================================================================
|
||||
static const int midiBufferSize = 1024 * 10;
|
||||
|
|
@ -52,6 +39,8 @@ static const int numInHeaders = 32;
|
|||
static const int inBufferSize = 256;
|
||||
static Array <void*, CriticalSection> activeMidiThreads;
|
||||
|
||||
using ::free;
|
||||
|
||||
class MidiInThread : public Thread
|
||||
{
|
||||
public:
|
||||
|
|
@ -644,4 +633,4 @@ void MidiOutput::sendMessageNow (const MidiMessage& message)
|
|||
}
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,44 +29,12 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "win32_headers.h"
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
#include "../../../src/juce_appframework/application/juce_SystemClipboard.h"
|
||||
#include "../../../src/juce_appframework/gui/components/windows/juce_AlertWindow.h"
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
|
||||
//==============================================================================
|
||||
#if ! JUCE_ONLY_BUILD_CORE_LIBRARY
|
||||
bool AlertWindow::showNativeDialogBox (const String& title,
|
||||
const String& bodyText,
|
||||
bool isOkCancel)
|
||||
{
|
||||
return MessageBox (0, bodyText, title,
|
||||
MB_SETFOREGROUND | (isOkCancel ? MB_OKCANCEL
|
||||
: MB_OK)) == IDOK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
void PlatformUtilities::beep()
|
||||
{
|
||||
MessageBeep (MB_OK);
|
||||
}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_MSVC
|
||||
#pragma warning (disable : 4127) // "Conditional expression is constant" warning
|
||||
#endif
|
||||
|
||||
#if ! JUCE_ONLY_BUILD_CORE_LIBRARY
|
||||
|
||||
void SystemClipboard::copyTextToClipboard (const String& text) throw()
|
||||
{
|
||||
if (OpenClipboard (0) != 0)
|
||||
|
|
@ -121,6 +89,5 @@ const String SystemClipboard::getTextFromClipboard() throw()
|
|||
return result;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
156
build/win32/platform_specific_code/juce_win32_NativeIncludes.h
Normal file
156
build/win32/platform_specific_code/juce_win32_NativeIncludes.h
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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 __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__
|
||||
#define __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__
|
||||
|
||||
|
||||
#include "../../../juce_Config.h"
|
||||
|
||||
#ifndef STRICT
|
||||
#define STRICT 1
|
||||
#endif
|
||||
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN 1
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (push)
|
||||
#pragma warning (disable : 4100 4201 4514 4312)
|
||||
#endif
|
||||
|
||||
#define _WIN32_WINNT 0x0500
|
||||
#define _UNICODE 1
|
||||
#define UNICODE 1
|
||||
|
||||
#ifndef _WIN32_IE
|
||||
#define _WIN32_IE 0x0400
|
||||
#endif
|
||||
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
#include <commdlg.h>
|
||||
#include <shellapi.h>
|
||||
#include <mmsystem.h>
|
||||
#include <vfw.h>
|
||||
#include <tchar.h>
|
||||
#include <stddef.h>
|
||||
#include <ctime>
|
||||
#include <wininet.h>
|
||||
#include <nb30.h>
|
||||
#include <iphlpapi.h>
|
||||
#include <mapi.h>
|
||||
#include <float.h>
|
||||
#include <crtdbg.h>
|
||||
#include <process.h>
|
||||
#include <comutil.h>
|
||||
#include <Exdisp.h>
|
||||
#include <exdispid.h>
|
||||
#include <shlobj.h>
|
||||
|
||||
#if JUCE_OPENGL
|
||||
#include <gl/gl.h>
|
||||
#endif
|
||||
|
||||
#undef PACKED
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_ASIO
|
||||
/*
|
||||
This is very frustrating - we only need to use a handful of definitions from
|
||||
a couple of the header files in Steinberg's ASIO SDK, and it'd be easy to copy
|
||||
about 30 lines of code into this cpp file to create a fully stand-alone ASIO
|
||||
implementation...
|
||||
|
||||
..unfortunately that would break Steinberg's license agreement for use of
|
||||
their SDK, so I'm not allowed to do this.
|
||||
|
||||
This means that anyone who wants to use JUCE's ASIO abilities will have to:
|
||||
|
||||
1) Agree to Steinberg's licensing terms and download the ASIO SDK
|
||||
(see www.steinberg.net/Steinberg/Developers.asp).
|
||||
|
||||
2) Rebuild the whole of JUCE, setting the global definition JUCE_ASIO (you
|
||||
can un-comment the "#define JUCE_ASIO" line in juce_Config.h
|
||||
if you prefer). Make sure that your header search path will find the
|
||||
iasiodrv.h file that comes with the SDK. (Only about 2-3 of the SDK header
|
||||
files are actually needed - so to simplify things, you could just copy
|
||||
these into your JUCE directory).
|
||||
|
||||
If you're compiling and you get an error here because you don't have the
|
||||
ASIO SDK installed, you can disable ASIO support by commenting-out the
|
||||
"#define JUCE_ASIO" line in juce_Config.h, and rebuild your Juce library.
|
||||
*/
|
||||
#include "iasiodrv.h"
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_USE_CDBURNER
|
||||
|
||||
/* You'll need the Platform SDK for these headers - if you don't have it and don't
|
||||
need to use CD-burning, then you might just want to disable the JUCE_USE_CDBURNER
|
||||
flag in juce_Config.h to avoid these includes.
|
||||
*/
|
||||
#include <imapi.h>
|
||||
#include <imapierror.h>
|
||||
#endif
|
||||
|
||||
|
||||
//==============================================================================
|
||||
#if JUCE_QUICKTIME
|
||||
|
||||
/* If you've got an include error here, you probably need to install the QuickTime SDK and
|
||||
add its header directory to your include path.
|
||||
|
||||
Alternatively, if you don't need any QuickTime services, just turn off the JUCE_QUICKTIME
|
||||
flag in juce_Config.h
|
||||
*/
|
||||
#include <Movies.h>
|
||||
#include <QTML.h>
|
||||
#include <QuickTimeComponents.h>
|
||||
#include <MediaHandlers.h>
|
||||
#include <ImageCodec.h>
|
||||
|
||||
/* If you've got QuickTime 7 installed, then these COM objects should be found in
|
||||
the "\Program Files\Quicktime" directory. You'll need to add this directory to
|
||||
your include search path to make these import statements work.
|
||||
*/
|
||||
#import <QTOLibrary.dll>
|
||||
#import <QTOControl.dll>
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
|
||||
#endif // __JUCE_WIN32_NATIVEINCLUDES_JUCEHEADER__
|
||||
|
|
@ -29,35 +29,15 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable: 4514)
|
||||
#pragma warning (push)
|
||||
#endif
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include <wininet.h>
|
||||
#include <nb30.h>
|
||||
#include <iphlpapi.h>
|
||||
#include <mapi.h>
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/text/juce_String.h"
|
||||
#include "juce_win32_DynamicLibraryLoader.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
#include "../../../src/juce_core/containers/juce_MemoryBlock.h"
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
#include "../../../src/juce_core/io/network/juce_URL.h"
|
||||
|
||||
#ifndef INTERNET_FLAG_NEED_FILE
|
||||
#define INTERNET_FLAG_NEED_FILE 0x00000010
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
bool juce_isOnLine()
|
||||
{
|
||||
|
|
@ -417,4 +397,4 @@ bool PlatformUtilities::launchEmailWithAttachments (const String& targetEmailAdd
|
|||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,23 +29,9 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable: 4514)
|
||||
#pragma warning (push)
|
||||
#endif
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include <float.h>
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/misc/juce_PlatformUtilities.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -219,4 +205,11 @@ void PlatformUtilities::fpuReset()
|
|||
#endif
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
//==============================================================================
|
||||
void PlatformUtilities::beep()
|
||||
{
|
||||
MessageBeep (MB_OK);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,517 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE && JUCE_QUICKTIME
|
||||
|
||||
using namespace QTOLibrary;
|
||||
using namespace QTOControlLib;
|
||||
|
||||
bool juce_OpenQuickTimeMovieFromStream (InputStream* input, Movie& movie, Handle& dataHandle);
|
||||
|
||||
static bool hasLoadedQT = false;
|
||||
static bool isQTAvailable = false;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
struct QTMovieCompInternal
|
||||
{
|
||||
QTMovieCompInternal()
|
||||
: dataHandle (0)
|
||||
{
|
||||
}
|
||||
|
||||
~QTMovieCompInternal()
|
||||
{
|
||||
clearHandle();
|
||||
}
|
||||
|
||||
IQTControlPtr qtControlInternal;
|
||||
IQTMoviePtr qtMovieInternal;
|
||||
|
||||
Handle dataHandle;
|
||||
|
||||
void clearHandle()
|
||||
{
|
||||
if (dataHandle != 0)
|
||||
{
|
||||
DisposeHandle (dataHandle);
|
||||
dataHandle = 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#define qtControl (((QTMovieCompInternal*) internal)->qtControlInternal)
|
||||
#define qtMovie (((QTMovieCompInternal*) internal)->qtMovieInternal)
|
||||
|
||||
//==============================================================================
|
||||
QuickTimeMovieComponent::QuickTimeMovieComponent()
|
||||
: movieLoaded (false),
|
||||
controllerVisible (true)
|
||||
{
|
||||
internal = new QTMovieCompInternal();
|
||||
setMouseEventsAllowed (false);
|
||||
}
|
||||
|
||||
QuickTimeMovieComponent::~QuickTimeMovieComponent()
|
||||
{
|
||||
closeMovie();
|
||||
qtControl = 0;
|
||||
|
||||
deleteControl();
|
||||
|
||||
delete internal;
|
||||
internal = 0;
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isQuickTimeAvailable() throw()
|
||||
{
|
||||
if (! hasLoadedQT)
|
||||
{
|
||||
hasLoadedQT = true;
|
||||
|
||||
isQTAvailable = (InitializeQTML (0) == noErr)
|
||||
&& (EnterMovies() == noErr);
|
||||
}
|
||||
|
||||
return isQTAvailable;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void QuickTimeMovieComponent::createControlIfNeeded()
|
||||
{
|
||||
if (isShowing() && ! isControlCreated())
|
||||
{
|
||||
const IID qtIID = __uuidof (QTControl);
|
||||
|
||||
if (createControl (&qtIID))
|
||||
{
|
||||
const IID qtInterfaceIID = __uuidof (IQTControl);
|
||||
qtControl = (IQTControl*) queryInterface (&qtInterfaceIID);
|
||||
|
||||
if (qtControl != 0)
|
||||
{
|
||||
qtControl->Release(); // it has one ref too many at this point
|
||||
|
||||
qtControl->QuickTimeInitialize();
|
||||
qtControl->PutSizing (qtMovieFitsControl);
|
||||
|
||||
if (movieFile != File::nonexistent)
|
||||
loadMovie (movieFile, controllerVisible);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isControlCreated() const
|
||||
{
|
||||
return isControlOpen();
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::loadMovie (InputStream* movieStream,
|
||||
const bool isControllerVisible)
|
||||
{
|
||||
movieFile = File::nonexistent;
|
||||
movieLoaded = false;
|
||||
qtMovie = 0;
|
||||
controllerVisible = isControllerVisible;
|
||||
createControlIfNeeded();
|
||||
|
||||
if (isControlCreated())
|
||||
{
|
||||
if (qtControl != 0)
|
||||
{
|
||||
qtControl->Put_MovieHandle (0);
|
||||
((QTMovieCompInternal*) internal)->clearHandle();
|
||||
|
||||
Movie movie;
|
||||
if (juce_OpenQuickTimeMovieFromStream (movieStream, movie, ((QTMovieCompInternal*) internal)->dataHandle))
|
||||
{
|
||||
qtControl->Put_MovieHandle ((long) (pointer_sized_int) movie);
|
||||
|
||||
qtMovie = qtControl->GetMovie();
|
||||
|
||||
if (qtMovie != 0)
|
||||
qtMovie->PutMovieControllerType (isControllerVisible ? qtMovieControllerTypeStandard
|
||||
: qtMovieControllerTypeNone);
|
||||
}
|
||||
|
||||
if (movie == 0)
|
||||
((QTMovieCompInternal*) internal)->clearHandle();
|
||||
}
|
||||
|
||||
movieLoaded = (qtMovie != 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// You're trying to open a movie when the control hasn't yet been created, probably because
|
||||
// you've not yet added this component to a Window and made the whole component hierarchy visible.
|
||||
jassertfalse
|
||||
}
|
||||
|
||||
delete movieStream;
|
||||
return movieLoaded;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::closeMovie()
|
||||
{
|
||||
stop();
|
||||
movieFile = File::nonexistent;
|
||||
movieLoaded = false;
|
||||
qtMovie = 0;
|
||||
|
||||
if (qtControl != 0)
|
||||
qtControl->Put_MovieHandle (0);
|
||||
|
||||
((QTMovieCompInternal*) internal)->clearHandle();
|
||||
}
|
||||
|
||||
const File QuickTimeMovieComponent::getCurrentMovieFile() const
|
||||
{
|
||||
return movieFile;
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isMovieOpen() const
|
||||
{
|
||||
return movieLoaded;
|
||||
}
|
||||
|
||||
double QuickTimeMovieComponent::getMovieDuration() const
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
return qtMovie->GetDuration() / (double) qtMovie->GetTimeScale();
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::getMovieNormalSize (int& width, int& height) const
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
{
|
||||
struct QTRECT r = qtMovie->GetNaturalRect();
|
||||
|
||||
width = r.right - r.left;
|
||||
height = r.bottom - r.top;
|
||||
}
|
||||
else
|
||||
{
|
||||
width = height = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::play()
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
qtMovie->Play();
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::stop()
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
qtMovie->Stop();
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isPlaying() const
|
||||
{
|
||||
return qtMovie != 0 && qtMovie->GetRate() != 0.0f;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setPosition (const double seconds)
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
qtMovie->PutTime ((long) (seconds * qtMovie->GetTimeScale()));
|
||||
}
|
||||
|
||||
double QuickTimeMovieComponent::getPosition() const
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
return qtMovie->GetTime() / (double) qtMovie->GetTimeScale();
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setSpeed (const float newSpeed)
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
qtMovie->PutRate (newSpeed);
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setMovieVolume (const float newVolume)
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
{
|
||||
qtMovie->PutAudioVolume (newVolume);
|
||||
qtMovie->PutAudioMute (newVolume <= 0);
|
||||
}
|
||||
}
|
||||
|
||||
float QuickTimeMovieComponent::getMovieVolume() const
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
return qtMovie->GetAudioVolume();
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setLooping (const bool shouldLoop)
|
||||
{
|
||||
if (qtMovie != 0)
|
||||
qtMovie->PutLoop (shouldLoop);
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isLooping() const
|
||||
{
|
||||
return qtMovie != 0 && qtMovie->GetLoop();
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::isControllerVisible() const
|
||||
{
|
||||
return controllerVisible;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::parentHierarchyChanged()
|
||||
{
|
||||
createControlIfNeeded();
|
||||
QTCompBaseClass::parentHierarchyChanged();
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::visibilityChanged()
|
||||
{
|
||||
createControlIfNeeded();
|
||||
QTCompBaseClass::visibilityChanged();
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::paint (Graphics& g)
|
||||
{
|
||||
if (! isControlCreated())
|
||||
g.fillAll (Colours::black);
|
||||
}
|
||||
|
||||
|
||||
//==============================================================================
|
||||
static Handle createHandleDataRef (Handle dataHandle, const char* fileName)
|
||||
{
|
||||
Handle dataRef = 0;
|
||||
OSStatus err = PtrToHand (&dataHandle, &dataRef, sizeof (Handle));
|
||||
if (err == noErr)
|
||||
{
|
||||
Str255 suffix;
|
||||
|
||||
CharacterFunctions::copy ((char*) suffix, fileName, 128);
|
||||
|
||||
StringPtr name = suffix;
|
||||
err = PtrAndHand (name, dataRef, name[0] + 1);
|
||||
|
||||
if (err == noErr)
|
||||
{
|
||||
long atoms[3];
|
||||
atoms[0] = EndianU32_NtoB (3 * sizeof (long));
|
||||
atoms[1] = EndianU32_NtoB (kDataRefExtensionMacOSFileType);
|
||||
atoms[2] = EndianU32_NtoB (MovieFileType);
|
||||
|
||||
err = PtrAndHand (atoms, dataRef, 3 * sizeof (long));
|
||||
|
||||
if (err == noErr)
|
||||
return dataRef;
|
||||
}
|
||||
|
||||
DisposeHandle (dataRef);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static CFStringRef juceStringToCFString (const String& s)
|
||||
{
|
||||
const int len = s.length();
|
||||
const juce_wchar* const t = (const juce_wchar*) s;
|
||||
|
||||
UniChar* temp = (UniChar*) juce_malloc (sizeof (UniChar) * len + 4);
|
||||
|
||||
for (int i = 0; i <= len; ++i)
|
||||
temp[i] = t[i];
|
||||
|
||||
CFStringRef result = CFStringCreateWithCharacters (kCFAllocatorDefault, temp, len);
|
||||
juce_free (temp);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static bool openMovie (QTNewMoviePropertyElement* props, int prop, Movie& movie)
|
||||
{
|
||||
Boolean trueBool = true;
|
||||
props[prop].propClass = kQTPropertyClass_MovieInstantiation;
|
||||
props[prop].propID = kQTMovieInstantiationPropertyID_DontResolveDataRefs;
|
||||
props[prop].propValueSize = sizeof (trueBool);
|
||||
props[prop].propValueAddress = &trueBool;
|
||||
++prop;
|
||||
|
||||
props[prop].propClass = kQTPropertyClass_MovieInstantiation;
|
||||
props[prop].propID = kQTMovieInstantiationPropertyID_AsyncOK;
|
||||
props[prop].propValueSize = sizeof (trueBool);
|
||||
props[prop].propValueAddress = &trueBool;
|
||||
++prop;
|
||||
|
||||
Boolean isActive = true;
|
||||
props[prop].propClass = kQTPropertyClass_NewMovieProperty;
|
||||
props[prop].propID = kQTNewMoviePropertyID_Active;
|
||||
props[prop].propValueSize = sizeof (isActive);
|
||||
props[prop].propValueAddress = &isActive;
|
||||
++prop;
|
||||
|
||||
MacSetPort (0);
|
||||
|
||||
jassert (prop <= 5);
|
||||
OSStatus err = NewMovieFromProperties (prop, props, 0, 0, &movie);
|
||||
|
||||
return err == noErr;
|
||||
}
|
||||
|
||||
bool juce_OpenQuickTimeMovieFromStream (InputStream* input, Movie& movie, Handle& dataHandle)
|
||||
{
|
||||
if (input == 0)
|
||||
return false;
|
||||
|
||||
dataHandle = 0;
|
||||
bool ok = false;
|
||||
|
||||
QTNewMoviePropertyElement props[5];
|
||||
zeromem (props, sizeof (props));
|
||||
int prop = 0;
|
||||
|
||||
DataReferenceRecord dr;
|
||||
props[prop].propClass = kQTPropertyClass_DataLocation;
|
||||
props[prop].propID = kQTDataLocationPropertyID_DataReference;
|
||||
props[prop].propValueSize = sizeof (dr);
|
||||
props[prop].propValueAddress = (void*) &dr;
|
||||
++prop;
|
||||
|
||||
FileInputStream* const fin = dynamic_cast <FileInputStream*> (input);
|
||||
|
||||
if (fin != 0)
|
||||
{
|
||||
CFStringRef filePath = juceStringToCFString (fin->getFile().getFullPathName());
|
||||
|
||||
QTNewDataReferenceFromFullPathCFString (filePath, (QTPathStyle) kQTNativeDefaultPathStyle, 0,
|
||||
&dr.dataRef, &dr.dataRefType);
|
||||
|
||||
|
||||
ok = openMovie (props, prop, movie);
|
||||
|
||||
DisposeHandle (dr.dataRef);
|
||||
CFRelease (filePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
// sanity-check because this currently needs to load the whole stream into memory..
|
||||
jassert (input->getTotalLength() < 50 * 1024 * 1024);
|
||||
|
||||
dataHandle = NewHandle ((Size) input->getTotalLength());
|
||||
HLock (dataHandle);
|
||||
// read the entire stream into memory - this is a pain, but can't get it to work
|
||||
// properly using a custom callback to supply the data.
|
||||
input->read (*dataHandle, (int) input->getTotalLength());
|
||||
HUnlock (dataHandle);
|
||||
|
||||
// different types to get QT to try. (We should really be a bit smarter here by
|
||||
// working out in advance which one the stream contains, rather than just trying
|
||||
// each one)
|
||||
const char* const suffixesToTry[] = { "\04.mov", "\04.mp3",
|
||||
"\04.avi", "\04.m4a" };
|
||||
|
||||
for (int i = 0; i < numElementsInArray (suffixesToTry) && ! ok; ++i)
|
||||
{
|
||||
/* // this fails for some bizarre reason - it can be bodged to work with
|
||||
// movies, but can't seem to do it for other file types..
|
||||
QTNewMovieUserProcRecord procInfo;
|
||||
procInfo.getMovieUserProc = NewGetMovieUPP (readMovieStreamProc);
|
||||
procInfo.getMovieUserProcRefcon = this;
|
||||
procInfo.defaultDataRef.dataRef = dataRef;
|
||||
procInfo.defaultDataRef.dataRefType = HandleDataHandlerSubType;
|
||||
|
||||
props[prop].propClass = kQTPropertyClass_DataLocation;
|
||||
props[prop].propID = kQTDataLocationPropertyID_MovieUserProc;
|
||||
props[prop].propValueSize = sizeof (procInfo);
|
||||
props[prop].propValueAddress = (void*) &procInfo;
|
||||
++prop; */
|
||||
|
||||
dr.dataRef = createHandleDataRef (dataHandle, suffixesToTry [i]);
|
||||
dr.dataRefType = HandleDataHandlerSubType;
|
||||
ok = openMovie (props, prop, movie);
|
||||
|
||||
DisposeHandle (dr.dataRef);
|
||||
}
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool QuickTimeMovieComponent::loadMovie (const File& movieFile_,
|
||||
const bool isControllerVisible)
|
||||
{
|
||||
const bool ok = loadMovie ((InputStream*) movieFile_.createInputStream(), isControllerVisible);
|
||||
movieFile = movieFile_;
|
||||
return ok;
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::goToStart()
|
||||
{
|
||||
setPosition (0.0);
|
||||
}
|
||||
|
||||
void QuickTimeMovieComponent::setBoundsWithCorrectAspectRatio (const Rectangle& spaceToFitWithin,
|
||||
const RectanglePlacement& placement)
|
||||
{
|
||||
int normalWidth, normalHeight;
|
||||
getMovieNormalSize (normalWidth, normalHeight);
|
||||
|
||||
if (normalWidth > 0 && normalHeight > 0 && ! spaceToFitWithin.isEmpty())
|
||||
{
|
||||
double x = 0.0, y = 0.0, w = normalWidth, h = normalHeight;
|
||||
|
||||
placement.applyTo (x, y, w, h,
|
||||
spaceToFitWithin.getX(), spaceToFitWithin.getY(),
|
||||
spaceToFitWithin.getWidth(), spaceToFitWithin.getHeight());
|
||||
|
||||
if (w > 0 && h > 0)
|
||||
{
|
||||
setBounds (roundDoubleToInt (x), roundDoubleToInt (y),
|
||||
roundDoubleToInt (w), roundDoubleToInt (h));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
setBounds (spaceToFitWithin);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -29,22 +29,9 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
|
||||
//==============================================================================
|
||||
// Auto-link the other win32 libs that are needed by library calls..
|
||||
#if defined (JUCE_DLL_BUILD) && JUCE_MSVC
|
||||
#include "juce_win32_AutoLinkLibraries.h"
|
||||
#endif
|
||||
|
||||
|
||||
//==============================================================================
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/io/files/juce_File.h"
|
||||
#include "../../../src/juce_core/basics/juce_SystemStats.h"
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
extern void juce_updateMultiMonitorInfo() throw();
|
||||
extern void juce_initialiseThreadEvents() throw();
|
||||
|
|
@ -487,4 +474,4 @@ int SystemStats::getPageSize() throw()
|
|||
return systemInfo.dwPageSize;
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,34 +29,14 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include "win32_headers.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable: 4514)
|
||||
#pragma warning (push)
|
||||
#include <crtdbg.h>
|
||||
#endif
|
||||
|
||||
#include <process.h>
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_core/text/juce_String.h"
|
||||
#include "../../../src/juce_core/threads/juce_CriticalSection.h"
|
||||
#include "../../../src/juce_core/threads/juce_WaitableEvent.h"
|
||||
#include "../../../src/juce_core/threads/juce_Thread.h"
|
||||
#include "../../../src/juce_core/threads/juce_Process.h"
|
||||
#include "../../../src/juce_core/threads/juce_InterProcessLock.h"
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE
|
||||
|
||||
#if ! JUCE_ONLY_BUILD_CORE_LIBRARY
|
||||
extern HWND juce_messageWindowHandle;
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
|
||||
|
||||
//==============================================================================
|
||||
CriticalSection::CriticalSection() throw()
|
||||
|
|
@ -129,7 +109,7 @@ static unsigned int __stdcall threadEntryProc (void* userData) throw()
|
|||
|
||||
juce_threadEntryPoint (userData);
|
||||
|
||||
_endthreadex(0);
|
||||
_endthreadex (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -188,7 +168,7 @@ void juce_setCurrentThreadName (const String& name) throw()
|
|||
#endif
|
||||
}
|
||||
|
||||
int Thread::getCurrentThreadId() throw()
|
||||
int64 Thread::getCurrentThreadId() throw()
|
||||
{
|
||||
return (int) GetCurrentThreadId();
|
||||
}
|
||||
|
|
@ -335,7 +315,8 @@ void Process::terminate()
|
|||
ExitProcess (0);
|
||||
}
|
||||
|
||||
void* Process::loadDynamicLibrary (const String& name)
|
||||
//==============================================================================
|
||||
void* PlatformUtilities::loadDynamicLibrary (const String& name)
|
||||
{
|
||||
void* result = 0;
|
||||
|
||||
|
|
@ -348,7 +329,7 @@ void* Process::loadDynamicLibrary (const String& name)
|
|||
return result;
|
||||
}
|
||||
|
||||
void Process::freeDynamicLibrary (void* h)
|
||||
void PlatformUtilities::freeDynamicLibrary (void* h)
|
||||
{
|
||||
JUCE_TRY
|
||||
{
|
||||
|
|
@ -358,7 +339,7 @@ void Process::freeDynamicLibrary (void* h)
|
|||
JUCE_CATCH_ALL
|
||||
}
|
||||
|
||||
void* Process::getProcedureEntryPoint (void* h, const String& name)
|
||||
void* PlatformUtilities::getProcedureEntryPoint (void* h, const String& name)
|
||||
{
|
||||
return (h != 0) ? (void*) GetProcAddress ((HMODULE) h, name)
|
||||
: 0;
|
||||
|
|
@ -411,5 +392,4 @@ void InterProcessLock::exit() throw()
|
|||
}
|
||||
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,29 +29,9 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (disable: 4514)
|
||||
#pragma warning (push)
|
||||
#endif
|
||||
|
||||
#include "win32_headers.h"
|
||||
#include <comutil.h>
|
||||
#include <Exdisp.h>
|
||||
#include <exdispid.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning (pop)
|
||||
#pragma warning (disable: 4312 4244)
|
||||
#endif
|
||||
|
||||
|
||||
#include "../../../src/juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "../../../src/juce_appframework/gui/components/special/juce_WebBrowserComponent.h"
|
||||
#include "../../../src/juce_appframework/gui/components/special/juce_ActiveXControlComponent.h"
|
||||
// (This file gets included by juce_win32_NativeCode.cpp, rather than being
|
||||
// compiled on its own).
|
||||
#if JUCE_INCLUDED_FILE && JUCE_WEB_BROWSER
|
||||
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -342,10 +322,6 @@ void WebBrowserComponent::parentHierarchyChanged()
|
|||
checkWindowAssociation();
|
||||
}
|
||||
|
||||
void WebBrowserComponent::moved()
|
||||
{
|
||||
}
|
||||
|
||||
void WebBrowserComponent::resized()
|
||||
{
|
||||
browser->setSize (getWidth(), getHeight());
|
||||
|
|
@ -361,4 +337,4 @@ bool WebBrowserComponent::pageAboutToLoad (const String&)
|
|||
return true;
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
#endif
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -3638,10 +3638,6 @@
|
|||
RelativePath="..\..\..\src\juce_appframework\gui\components\special\juce_PreferencesPanel.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\src\juce_appframework\gui\components\special\juce_QuickTimeMovieComponent.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\src\juce_appframework\gui\components\special\juce_QuickTimeMovieComponent.h"
|
||||
>
|
||||
|
|
@ -5673,6 +5669,10 @@
|
|||
<Filter
|
||||
Name="win32_code"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\platform_specific_code\juce_win32_ActiveXComponent.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\platform_specific_code\juce_win32_ASIO.cpp"
|
||||
>
|
||||
|
|
@ -5717,14 +5717,30 @@
|
|||
RelativePath="..\platform_specific_code\juce_win32_Misc.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\platform_specific_code\juce_win32_NativeCode.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\platform_specific_code\juce_win32_NativeIncludes.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\platform_specific_code\juce_win32_Network.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\platform_specific_code\juce_win32_OpenGLComponent.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\platform_specific_code\juce_win32_PlatformUtils.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\platform_specific_code\juce_win32_QuickTimeMovieComponent.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\platform_specific_code\juce_win32_SystemStats.cpp"
|
||||
>
|
||||
|
|
|
|||
|
|
@ -8,20 +8,18 @@
|
|||
|
||||
/* Begin PBXBuildFile section */
|
||||
84B59D6D0DE34F530041FA3D /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84B59D6C0DE34F530041FA3D /* juce_LibrarySource.mm */; };
|
||||
84C0A38F0DE2D5C700606895 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3810DE2D5C700606895 /* AGL.framework */; };
|
||||
84C0A3900DE2D5C700606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3820DE2D5C700606895 /* ApplicationServices.framework */; };
|
||||
84C0A3910DE2D5C700606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3830DE2D5C700606895 /* AudioUnit.framework */; };
|
||||
84C0A3920DE2D5C700606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3840DE2D5C700606895 /* Carbon.framework */; };
|
||||
84C0A3930DE2D5C700606895 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3850DE2D5C700606895 /* Cocoa.framework */; };
|
||||
84C0A3940DE2D5C700606895 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3860DE2D5C700606895 /* CoreAudio.framework */; };
|
||||
84C0A3950DE2D5C700606895 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3870DE2D5C700606895 /* CoreFoundation.framework */; };
|
||||
84C0A3960DE2D5C700606895 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3880DE2D5C700606895 /* CoreMIDI.framework */; };
|
||||
84C0A3970DE2D5C700606895 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3890DE2D5C700606895 /* CoreServices.framework */; };
|
||||
84C0A3980DE2D5C700606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38A0DE2D5C700606895 /* DiscRecording.framework */; };
|
||||
84C0A3990DE2D5C700606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38B0DE2D5C700606895 /* IOKit.framework */; };
|
||||
84C0A39A0DE2D5C700606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38C0DE2D5C700606895 /* OpenGL.framework */; };
|
||||
84C0A39B0DE2D5C700606895 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38D0DE2D5C700606895 /* QuickTime.framework */; };
|
||||
84C0A39C0DE2D5C700606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A38E0DE2D5C700606895 /* WebKit.framework */; };
|
||||
84D16CFE0E9A58CA00CB8B94 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D16CFD0E9A58CA00CB8B94 /* QTKit.framework */; };
|
||||
84F6F6160E8EDA7100AA911A /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F6F6150E8EDA7100AA911A /* Carbon.framework */; };
|
||||
84F8B6D70EB5FEF70020D98D /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F8B6D60EB5FEF70020D98D /* QuickTime.framework */; };
|
||||
84FC4CD90CD8894600850651 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 84FC4CD80CD8894600850651 /* juce.xcconfig */; };
|
||||
84FFAEAC0C6C8A6F009F6E72 /* FilterGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FFAE920C6C8A6F009F6E72 /* FilterGraph.cpp */; };
|
||||
84FFAEAD0C6C8A6F009F6E72 /* GraphEditorPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84FFAE940C6C8A6F009F6E72 /* GraphEditorPanel.cpp */; };
|
||||
|
|
@ -35,20 +33,18 @@
|
|||
84B59D6A0DE34F530041FA3D /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; };
|
||||
84B59D6B0DE34F530041FA3D /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; };
|
||||
84B59D6C0DE34F530041FA3D /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; };
|
||||
84C0A3810DE2D5C700606895 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3820DE2D5C700606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3830DE2D5C700606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3840DE2D5C700606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3850DE2D5C700606895 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3860DE2D5C700606895 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3870DE2D5C700606895 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3880DE2D5C700606895 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3890DE2D5C700606895 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
|
||||
84C0A38A0DE2D5C700606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; };
|
||||
84C0A38B0DE2D5C700606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A38C0DE2D5C700606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
|
||||
84C0A38D0DE2D5C700606895 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
84C0A38E0DE2D5C700606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
|
||||
84D16CFD0E9A58CA00CB8B94 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; };
|
||||
84F6F6150E8EDA7100AA911A /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
84F8B6D60EB5FEF70020D98D /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
84FC4CD80CD8894600850651 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; };
|
||||
84FFAE920C6C8A6F009F6E72 /* FilterGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = FilterGraph.cpp; path = ../../src/host/FilterGraph.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84FFAE930C6C8A6F009F6E72 /* FilterGraph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FilterGraph.h; path = ../../src/host/FilterGraph.h; sourceTree = SOURCE_ROOT; };
|
||||
|
|
@ -59,7 +55,7 @@
|
|||
84FFAE980C6C8A6F009F6E72 /* MainHostWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MainHostWindow.cpp; path = ../../src/host/MainHostWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84FFAE990C6C8A6F009F6E72 /* MainHostWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MainHostWindow.h; path = ../../src/host/MainHostWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
84FFAE9A0C6C8A6F009F6E72 /* HostStartup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = HostStartup.cpp; path = ../../src/HostStartup.cpp; sourceTree = SOURCE_ROOT; };
|
||||
8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
|
@ -67,20 +63,18 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
84C0A38F0DE2D5C700606895 /* AGL.framework in Frameworks */,
|
||||
84C0A3900DE2D5C700606895 /* ApplicationServices.framework in Frameworks */,
|
||||
84C0A3910DE2D5C700606895 /* AudioUnit.framework in Frameworks */,
|
||||
84C0A3920DE2D5C700606895 /* Carbon.framework in Frameworks */,
|
||||
84C0A3930DE2D5C700606895 /* Cocoa.framework in Frameworks */,
|
||||
84C0A3940DE2D5C700606895 /* CoreAudio.framework in Frameworks */,
|
||||
84C0A3950DE2D5C700606895 /* CoreFoundation.framework in Frameworks */,
|
||||
84C0A3960DE2D5C700606895 /* CoreMIDI.framework in Frameworks */,
|
||||
84C0A3970DE2D5C700606895 /* CoreServices.framework in Frameworks */,
|
||||
84C0A3980DE2D5C700606895 /* DiscRecording.framework in Frameworks */,
|
||||
84C0A3990DE2D5C700606895 /* IOKit.framework in Frameworks */,
|
||||
84C0A39A0DE2D5C700606895 /* OpenGL.framework in Frameworks */,
|
||||
84C0A39B0DE2D5C700606895 /* QuickTime.framework in Frameworks */,
|
||||
84C0A39C0DE2D5C700606895 /* WebKit.framework in Frameworks */,
|
||||
84F6F6160E8EDA7100AA911A /* Carbon.framework in Frameworks */,
|
||||
84D16CFE0E9A58CA00CB8B94 /* QTKit.framework in Frameworks */,
|
||||
84F8B6D70EB5FEF70020D98D /* QuickTime.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -137,19 +131,17 @@
|
|||
20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
84C0A3810DE2D5C700606895 /* AGL.framework */,
|
||||
84C0A3820DE2D5C700606895 /* ApplicationServices.framework */,
|
||||
84F6F6150E8EDA7100AA911A /* Carbon.framework */,
|
||||
84C0A3830DE2D5C700606895 /* AudioUnit.framework */,
|
||||
84C0A3840DE2D5C700606895 /* Carbon.framework */,
|
||||
84C0A3850DE2D5C700606895 /* Cocoa.framework */,
|
||||
84C0A3860DE2D5C700606895 /* CoreAudio.framework */,
|
||||
84C0A3870DE2D5C700606895 /* CoreFoundation.framework */,
|
||||
84C0A3880DE2D5C700606895 /* CoreMIDI.framework */,
|
||||
84C0A3890DE2D5C700606895 /* CoreServices.framework */,
|
||||
84C0A38A0DE2D5C700606895 /* DiscRecording.framework */,
|
||||
84C0A38B0DE2D5C700606895 /* IOKit.framework */,
|
||||
84F8B6D60EB5FEF70020D98D /* QuickTime.framework */,
|
||||
84C0A38C0DE2D5C700606895 /* OpenGL.framework */,
|
||||
84C0A38D0DE2D5C700606895 /* QuickTime.framework */,
|
||||
84D16CFD0E9A58CA00CB8B94 /* QTKit.framework */,
|
||||
84C0A38E0DE2D5C700606895 /* WebKit.framework */,
|
||||
);
|
||||
name = "External Frameworks and Libraries";
|
||||
|
|
@ -225,6 +217,8 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COPY_PHASE_STRIP = NO;
|
||||
KEEP_PRIVATE_EXTERNS = YES;
|
||||
STRIP_INSTALLED_PRODUCT = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,6 +75,8 @@ public:
|
|||
|
||||
commandManager->registerAllCommandsForTarget (this);
|
||||
commandManager->registerAllCommandsForTarget (mainWindow);
|
||||
|
||||
mainWindow->menuItemsChanged();
|
||||
}
|
||||
|
||||
void shutdown()
|
||||
|
|
|
|||
|
|
@ -100,12 +100,6 @@ MainHostWindow::MainHostWindow()
|
|||
|
||||
restoreWindowStateFromString (ApplicationProperties::getInstance()->getUserSettings()->getValue ("mainWindowPos"));
|
||||
|
||||
#if JUCE_MAC
|
||||
setMacMainMenu (this);
|
||||
#else
|
||||
setMenuBar (this);
|
||||
#endif
|
||||
|
||||
setVisible (true);
|
||||
|
||||
InternalPluginFormat internalFormat;
|
||||
|
|
@ -129,6 +123,12 @@ MainHostWindow::MainHostWindow()
|
|||
addKeyListener (commandManager->getKeyMappings());
|
||||
|
||||
Process::setPriority (Process::HighPriority);
|
||||
|
||||
#if JUCE_MAC
|
||||
setMacMainMenu (this);
|
||||
#else
|
||||
setMenuBar (this);
|
||||
#endif
|
||||
}
|
||||
|
||||
MainHostWindow::~MainHostWindow()
|
||||
|
|
@ -441,7 +441,7 @@ void MainHostWindow::showAudioSettings()
|
|||
AudioDeviceSelectorComponent audioSettingsComp (deviceManager,
|
||||
0, 256,
|
||||
0, 256,
|
||||
true, true, true);
|
||||
true, true, true, false);
|
||||
|
||||
audioSettingsComp.setSize (500, 450);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
#include "juce_AppConfig.h"
|
||||
#include "../../../juce_amalgamated.h"
|
||||
//#include "../../../juce_amalgamated.h"
|
||||
#include "../../../juce.h"
|
||||
using JUCE_NAMESPACE::uint32;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
#
|
||||
# This file must contain entries for the two AU entry points.
|
||||
#
|
||||
# Your JucePluginCharacteristics.h file must define the prefix used for these function names - for
|
||||
# more info, see the comments in JucePluginCharacteristics.h
|
||||
#
|
||||
|
||||
_JuceDemoAUEntry
|
||||
_JuceDemoAUViewEntry
|
||||
#
|
||||
# This file must contain the AU component's entry point.
|
||||
#
|
||||
# Your JucePluginCharacteristics.h file must define the prefix used for this
|
||||
# function name - for more info, see the comments in JucePluginCharacteristics.h
|
||||
#
|
||||
|
||||
_JuceDemoAUEntry
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */; };
|
||||
3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */; };
|
||||
3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */; };
|
||||
840BE1CD0EACFEC400824B1D /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840BE1CC0EACFEC400824B1D /* QTKit.framework */; };
|
||||
84581F8F0D917FC700AE1A4C /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F820D917FC700AE1A4C /* AUBase.cpp */; };
|
||||
84581F900D917FC700AE1A4C /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F830D917FC700AE1A4C /* AUBase.h */; };
|
||||
84581F910D917FC700AE1A4C /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F840D917FC700AE1A4C /* AUDispatch.cpp */; };
|
||||
|
|
@ -27,11 +28,11 @@
|
|||
84581F990D917FC700AE1A4C /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8C0D917FC700AE1A4C /* AUScopeElement.h */; };
|
||||
84581F9A0D917FC700AE1A4C /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */; };
|
||||
84581F9B0D917FC700AE1A4C /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84581F8E0D917FC700AE1A4C /* ComponentBase.h */; };
|
||||
846EC62C0EB601D80080CCFF /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846EC62B0EB601D80080CCFF /* QuickTime.framework */; };
|
||||
84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */; };
|
||||
84B4CDD20C7DD23B0083122F /* MusicDeviceBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */; };
|
||||
84C09D2A0DE2C52600606895 /* includes.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C09D290DE2C52600606895 /* includes.h */; };
|
||||
84C09D3F0DE2C57300606895 /* juce_amalgamated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84C09D3E0DE2C57300606895 /* juce_amalgamated.mm */; };
|
||||
84C0A2A10DE2C7BD00606895 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2930DE2C7BD00606895 /* AGL.framework */; };
|
||||
84C0A2A20DE2C7BD00606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2940DE2C7BD00606895 /* ApplicationServices.framework */; };
|
||||
84C0A2A30DE2C7BD00606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2950DE2C7BD00606895 /* AudioUnit.framework */; };
|
||||
84C0A2A40DE2C7BD00606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2960DE2C7BD00606895 /* Carbon.framework */; };
|
||||
|
|
@ -43,16 +44,11 @@
|
|||
84C0A2AA0DE2C7BD00606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29C0DE2C7BD00606895 /* DiscRecording.framework */; };
|
||||
84C0A2AB0DE2C7BD00606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29D0DE2C7BD00606895 /* IOKit.framework */; };
|
||||
84C0A2AC0DE2C7BD00606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29E0DE2C7BD00606895 /* OpenGL.framework */; };
|
||||
84C0A2AD0DE2C7BD00606895 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A29F0DE2C7BD00606895 /* QuickTime.framework */; };
|
||||
84C0A2AE0DE2C7BD00606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2A00DE2C7BD00606895 /* WebKit.framework */; };
|
||||
84C0A2B30DE2C80200606895 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2B20DE2C80200606895 /* AudioToolbox.framework */; };
|
||||
84CFAEFB090964560053C22C /* AUCarbonViewDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AAB03175F3201CA2136 /* AUCarbonViewDispatch.cpp */; };
|
||||
84CFAEFC090964560053C22C /* AUCarbonViewControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AA903175F3201CA2136 /* AUCarbonViewControl.cpp */; };
|
||||
84CFAEFD090964560053C22C /* AUCarbonViewBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AA703175F3201CA2136 /* AUCarbonViewBase.cpp */; };
|
||||
84CFAF0E090965080053C22C /* CarbonEventHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AB003175F3201CA2136 /* CarbonEventHandler.cpp */; };
|
||||
84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EF64FA42057BC39200D99563 /* CAAUParameter.cpp */; };
|
||||
84CFB029090968590053C22C /* DemoJuceAudioUnit.component in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3E8BF126079CA60300021B09 /* DemoJuceAudioUnit.component */; };
|
||||
84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp */; };
|
||||
84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm */; };
|
||||
84EB400C090A4A2C008FAC1B /* juce_AudioUnitWrapper.r in Rez */ = {isa = PBXBuildFile; fileRef = 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */; };
|
||||
84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4E5DC280898301D00589A5A /* CAVectorUnit.cpp */; };
|
||||
84EB404E090A5116008FAC1B /* JucePluginCharacteristics.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */; };
|
||||
|
|
@ -88,6 +84,7 @@
|
|||
7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; };
|
||||
7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; };
|
||||
7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; };
|
||||
840BE1CC0EACFEC400824B1D /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; };
|
||||
84581F820D917FC700AE1A4C /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.cpp; sourceTree = "<absolute>"; };
|
||||
84581F830D917FC700AE1A4C /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUBase.h; sourceTree = "<absolute>"; };
|
||||
84581F840D917FC700AE1A4C /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUDispatch.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUDispatch.cpp; sourceTree = "<absolute>"; };
|
||||
|
|
@ -101,11 +98,11 @@
|
|||
84581F8D0D917FC700AE1A4C /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ComponentBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.cpp; sourceTree = "<absolute>"; };
|
||||
84581F8E0D917FC700AE1A4C /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ComponentBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/ComponentBase.h; sourceTree = "<absolute>"; };
|
||||
845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; };
|
||||
846EC62B0EB601D80080CCFF /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.cpp; sourceTree = "<absolute>"; };
|
||||
84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MusicDeviceBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.h; sourceTree = "<absolute>"; };
|
||||
84C09D290DE2C52600606895 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; };
|
||||
84C09D3E0DE2C57300606895 /* juce_amalgamated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_amalgamated.mm; path = ../../../../../juce_amalgamated.mm; sourceTree = SOURCE_ROOT; };
|
||||
84C0A2930DE2C7BD00606895 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2940DE2C7BD00606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2950DE2C7BD00606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2960DE2C7BD00606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
|
|
@ -117,13 +114,12 @@
|
|||
84C0A29C0DE2C7BD00606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; };
|
||||
84C0A29D0DE2C7BD00606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A29E0DE2C7BD00606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
|
||||
84C0A29F0DE2C7BD00606895 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2A00DE2C7BD00606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2B20DE2C80200606895 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; };
|
||||
84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioUnitWrapper.cpp; path = ../../../wrapper/formats/AudioUnit/juce_AudioUnitWrapper.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 2; name = juce_AudioUnitWrapper.mm; path = ../../../wrapper/formats/AudioUnit/juce_AudioUnitWrapper.mm; sourceTree = SOURCE_ROOT; };
|
||||
84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = juce_AudioUnitWrapper.r; path = ../../../wrapper/formats/AudioUnit/juce_AudioUnitWrapper.r; sourceTree = SOURCE_ROOT; };
|
||||
84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; };
|
||||
84F05215090674BB00AEC8DB /* Info-JuceAU.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "Info-JuceAU.plist"; sourceTree = "<group>"; };
|
||||
84F05215090674BB00AEC8DB /* Info-JuceAU.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "Info-JuceAU.plist"; sourceTree = "<group>"; };
|
||||
84F05217090674BB00AEC8DB /* JuceAU.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = JuceAU.exp; sourceTree = "<group>"; };
|
||||
84F054E40906C8DD00AEC8DB /* AUMIDIBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.cpp; sourceTree = "<absolute>"; };
|
||||
84F054E50906C8DD00AEC8DB /* AUMIDIBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AUMIDIBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.h; sourceTree = "<absolute>"; };
|
||||
|
|
@ -146,13 +142,6 @@
|
|||
F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; };
|
||||
F5D19A0F03175E1E01CA2136 /* AUBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = "<group>"; };
|
||||
F5D19A6903175E8C01CA2136 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; };
|
||||
F5D19AA703175F3201CA2136 /* AUCarbonViewBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewBase.cpp; sourceTree = "<group>"; };
|
||||
F5D19AA803175F3201CA2136 /* AUCarbonViewBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUCarbonViewBase.h; sourceTree = "<group>"; };
|
||||
F5D19AA903175F3201CA2136 /* AUCarbonViewControl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewControl.cpp; sourceTree = "<group>"; };
|
||||
F5D19AAA03175F3201CA2136 /* AUCarbonViewControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUCarbonViewControl.h; sourceTree = "<group>"; };
|
||||
F5D19AAB03175F3201CA2136 /* AUCarbonViewDispatch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewDispatch.cpp; sourceTree = "<group>"; };
|
||||
F5D19AB003175F3201CA2136 /* CarbonEventHandler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CarbonEventHandler.cpp; sourceTree = "<group>"; };
|
||||
F5D19AB103175F3201CA2136 /* CarbonEventHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CarbonEventHandler.h; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
|
|
@ -160,7 +149,6 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
84C0A2A10DE2C7BD00606895 /* AGL.framework in Frameworks */,
|
||||
84C0A2A20DE2C7BD00606895 /* ApplicationServices.framework in Frameworks */,
|
||||
84C0A2A30DE2C7BD00606895 /* AudioUnit.framework in Frameworks */,
|
||||
84C0A2A40DE2C7BD00606895 /* Carbon.framework in Frameworks */,
|
||||
|
|
@ -172,9 +160,10 @@
|
|||
84C0A2AA0DE2C7BD00606895 /* DiscRecording.framework in Frameworks */,
|
||||
84C0A2AB0DE2C7BD00606895 /* IOKit.framework in Frameworks */,
|
||||
84C0A2AC0DE2C7BD00606895 /* OpenGL.framework in Frameworks */,
|
||||
84C0A2AD0DE2C7BD00606895 /* QuickTime.framework in Frameworks */,
|
||||
84C0A2AE0DE2C7BD00606895 /* WebKit.framework in Frameworks */,
|
||||
84C0A2B30DE2C80200606895 /* AudioToolbox.framework in Frameworks */,
|
||||
840BE1CD0EACFEC400824B1D /* QTKit.framework in Frameworks */,
|
||||
846EC62C0EB601D80080CCFF /* QuickTime.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -184,7 +173,7 @@
|
|||
84EB403B090A4ED3008FAC1B /* Juce AU Code */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp */,
|
||||
84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm */,
|
||||
84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */,
|
||||
);
|
||||
name = "Juce AU Code";
|
||||
|
|
@ -246,7 +235,6 @@
|
|||
children = (
|
||||
F5D199EB03175E1E01CA2136 /* AUBase */,
|
||||
A3C2CC6005B4A4BE000F141E /* AUViewBase */,
|
||||
F5D19AA603175F3201CA2136 /* AUCarbonViewBase */,
|
||||
F5D199FD03175E1E01CA2136 /* OtherBases */,
|
||||
F5D19A0C03175E1E01CA2136 /* Utility */,
|
||||
F5D19A3603175E8C01CA2136 /* PublicUtility */,
|
||||
|
|
@ -259,7 +247,6 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
84C0A2B20DE2C80200606895 /* AudioToolbox.framework */,
|
||||
84C0A2930DE2C7BD00606895 /* AGL.framework */,
|
||||
84C0A2940DE2C7BD00606895 /* ApplicationServices.framework */,
|
||||
84C0A2950DE2C7BD00606895 /* AudioUnit.framework */,
|
||||
84C0A2960DE2C7BD00606895 /* Carbon.framework */,
|
||||
|
|
@ -269,9 +256,10 @@
|
|||
84C0A29A0DE2C7BD00606895 /* CoreMIDI.framework */,
|
||||
84C0A29B0DE2C7BD00606895 /* CoreServices.framework */,
|
||||
84C0A29C0DE2C7BD00606895 /* DiscRecording.framework */,
|
||||
840BE1CC0EACFEC400824B1D /* QTKit.framework */,
|
||||
846EC62B0EB601D80080CCFF /* QuickTime.framework */,
|
||||
84C0A29D0DE2C7BD00606895 /* IOKit.framework */,
|
||||
84C0A29E0DE2C7BD00606895 /* OpenGL.framework */,
|
||||
84C0A29F0DE2C7BD00606895 /* QuickTime.framework */,
|
||||
84C0A2A00DE2C7BD00606895 /* WebKit.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
|
|
@ -349,20 +337,6 @@
|
|||
path = /Developer/Examples/CoreAudio/PublicUtility;
|
||||
sourceTree = "<absolute>";
|
||||
};
|
||||
F5D19AA603175F3201CA2136 /* AUCarbonViewBase */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F5D19AA703175F3201CA2136 /* AUCarbonViewBase.cpp */,
|
||||
F5D19AA803175F3201CA2136 /* AUCarbonViewBase.h */,
|
||||
F5D19AA903175F3201CA2136 /* AUCarbonViewControl.cpp */,
|
||||
F5D19AAA03175F3201CA2136 /* AUCarbonViewControl.h */,
|
||||
F5D19AAB03175F3201CA2136 /* AUCarbonViewDispatch.cpp */,
|
||||
F5D19AB003175F3201CA2136 /* CarbonEventHandler.cpp */,
|
||||
F5D19AB103175F3201CA2136 /* CarbonEventHandler.h */,
|
||||
);
|
||||
path = AUCarbonViewBase;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
|
|
@ -465,17 +439,13 @@
|
|||
3E8BF119079CA60300021B09 /* AUEffectBase.cpp in Sources */,
|
||||
3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */,
|
||||
3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */,
|
||||
84CFAF0E090965080053C22C /* CarbonEventHandler.cpp in Sources */,
|
||||
84CFAEFB090964560053C22C /* AUCarbonViewDispatch.cpp in Sources */,
|
||||
84CFAEFC090964560053C22C /* AUCarbonViewControl.cpp in Sources */,
|
||||
84CFAEFD090964560053C22C /* AUCarbonViewBase.cpp in Sources */,
|
||||
84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */,
|
||||
3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */,
|
||||
84F054E80906C8DD00AEC8DB /* AUMIDIBase.cpp in Sources */,
|
||||
84F054EA0906C8DD00AEC8DB /* AUMIDIEffectBase.cpp in Sources */,
|
||||
84F055010906E9EA00AEC8DB /* DemoEditorComponent.cpp in Sources */,
|
||||
84F055030906E9EA00AEC8DB /* DemoJuceFilter.cpp in Sources */,
|
||||
84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp in Sources */,
|
||||
84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.mm in Sources */,
|
||||
84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */,
|
||||
84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */,
|
||||
84581F8F0D917FC700AE1A4C /* AUBase.cpp in Sources */,
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@
|
|||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
84190D1A0EA5320900B939D0 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84190D190EA5320900B939D0 /* Carbon.framework */; };
|
||||
841E07300AF9F015005E6FCC /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E072B0AF9F015005E6FCC /* DemoEditorComponent.cpp */; };
|
||||
841E07310AF9F015005E6FCC /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E072D0AF9F015005E6FCC /* DemoJuceFilter.cpp */; };
|
||||
841E073D0AF9F099005E6FCC /* juce_RTASUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E073B0AF9F099005E6FCC /* juce_RTASUtilities.cpp */; };
|
||||
841E073E0AF9F099005E6FCC /* juce_RTASWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */; };
|
||||
846444EF0AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E20AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp */; };
|
||||
846444F00AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E30AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp */; };
|
||||
|
|
@ -21,23 +21,22 @@
|
|||
846444F60AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E90AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp */; };
|
||||
846444F70AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444EA0AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp */; };
|
||||
846444FA0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444EE0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp */; };
|
||||
84C0A3020DE2CBE500606895 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F40DE2CBE500606895 /* AGL.framework */; };
|
||||
846EC6670EB602B90080CCFF /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846EC6660EB602B90080CCFF /* QuickTime.framework */; };
|
||||
84C0A3030DE2CBE500606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F50DE2CBE500606895 /* ApplicationServices.framework */; };
|
||||
84C0A3040DE2CBE500606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F60DE2CBE500606895 /* AudioUnit.framework */; };
|
||||
84C0A3050DE2CBE500606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F70DE2CBE500606895 /* Carbon.framework */; };
|
||||
84C0A3060DE2CBE500606895 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F80DE2CBE500606895 /* Cocoa.framework */; };
|
||||
84C0A3070DE2CBE500606895 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2F90DE2CBE500606895 /* CoreAudio.framework */; };
|
||||
84C0A3080DE2CBE500606895 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FA0DE2CBE500606895 /* CoreFoundation.framework */; };
|
||||
84C0A3090DE2CBE500606895 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FB0DE2CBE500606895 /* CoreMIDI.framework */; };
|
||||
84C0A30A0DE2CBE500606895 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FC0DE2CBE500606895 /* CoreServices.framework */; };
|
||||
84C0A30B0DE2CBE500606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FD0DE2CBE500606895 /* DiscRecording.framework */; };
|
||||
84C0A30C0DE2CBE500606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FE0DE2CBE500606895 /* IOKit.framework */; };
|
||||
84C0A30D0DE2CBE600606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A2FF0DE2CBE500606895 /* OpenGL.framework */; };
|
||||
84C0A30E0DE2CBE600606895 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3000DE2CBE500606895 /* QuickTime.framework */; };
|
||||
84C0A30F0DE2CBE600606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3010DE2CBE500606895 /* WebKit.framework */; };
|
||||
84C0A3110DE2CC0600606895 /* juce_amalgamated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84C0A3100DE2CC0600606895 /* juce_amalgamated.mm */; };
|
||||
84C9D7FB0AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C9D7F90AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp */; };
|
||||
84C9D7FC0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C9D7FA0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp */; };
|
||||
84E903C00EA34FD70088E51C /* juce_RTASUtilities.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E903BF0EA34FD70088E51C /* juce_RTASUtilities.mm */; };
|
||||
84E904D00EA351E40088E51C /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E904CF0EA351E40088E51C /* QTKit.framework */; };
|
||||
84E907CB0EA396A50088E51C /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E907CA0EA396A50088E51C /* DiscRecording.framework */; };
|
||||
84E90C250EA399090088E51C /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E90C240EA399090088E51C /* WebKit.framework */; };
|
||||
84E90C2B0EA39A110088E51C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E90C2A0EA39A110088E51C /* OpenGL.framework */; };
|
||||
84EEB4180AFB6679009655FF /* DummyResourceFile.r in Rez */ = {isa = PBXBuildFile; fileRef = 84EEB4170AFB6679009655FF /* DummyResourceFile.r */; };
|
||||
84FAD77B0C7C89E100AF3028 /* libPluginLibrary.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FAD7770C7C897000AF3028 /* libPluginLibrary.a */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
|
@ -54,14 +53,14 @@
|
|||
|
||||
/* Begin PBXFileReference section */
|
||||
5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PluginLibrary.xcodeproj; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/PlugInLibrary/MacBuild/PluginLibrary.xcodeproj; sourceTree = "<absolute>"; };
|
||||
84190D190EA5320900B939D0 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
841E072B0AF9F015005E6FCC /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; };
|
||||
841E072C0AF9F015005E6FCC /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; };
|
||||
841E072D0AF9F015005E6FCC /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; };
|
||||
841E072E0AF9F015005E6FCC /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; };
|
||||
841E072F0AF9F015005E6FCC /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; };
|
||||
841E073B0AF9F099005E6FCC /* juce_RTASUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTASUtilities.cpp; path = ../../../wrapper/formats/RTAS/juce_RTASUtilities.cpp; sourceTree = SOURCE_ROOT; };
|
||||
841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTASWrapper.cpp; path = ../../../wrapper/formats/RTAS/juce_RTASWrapper.cpp; sourceTree = SOURCE_ROOT; };
|
||||
841E07420AF9F126005E6FCC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
841E07420AF9F126005E6FCC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
846444E20AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectGroup.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroup.cpp; sourceTree = SOURCE_ROOT; };
|
||||
846444E30AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectGroupMIDI.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroupMIDI.cpp; sourceTree = SOURCE_ROOT; };
|
||||
846444E40AFA005B00E7B2BE /* juce_Wrapper_CEffectMIDIUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectMIDIUtils.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectMIDIUtils.cpp; sourceTree = SOURCE_ROOT; };
|
||||
|
|
@ -73,26 +72,25 @@
|
|||
846444EA0AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_ChunkDataParser.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_ChunkDataParser.cpp; sourceTree = SOURCE_ROOT; };
|
||||
846444ED0AFA005B00E7B2BE /* juce_Wrapper_Header.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Wrapper_Header.h; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_Header.h; sourceTree = SOURCE_ROOT; };
|
||||
846444EE0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_PlugInUtils.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_PlugInUtils.cpp; sourceTree = SOURCE_ROOT; };
|
||||
846EC6660EB602B90080CCFF /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
8498C1430E06D7D200FC76A6 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; };
|
||||
84C0A2F40DE2CBE500606895 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2F50DE2CBE500606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2F60DE2CBE500606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2F70DE2CBE500606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2F80DE2CBE500606895 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2F90DE2CBE500606895 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2FA0DE2CBE500606895 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2FB0DE2CBE500606895 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2FC0DE2CBE500606895 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2FD0DE2CBE500606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2FE0DE2CBE500606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A2FF0DE2CBE500606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3000DE2CBE500606895 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3010DE2CBE500606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3100DE2CC0600606895 /* juce_amalgamated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_amalgamated.mm; path = ../../../../../juce_amalgamated.mm; sourceTree = SOURCE_ROOT; };
|
||||
84C442690B306D39003FCBFF /* CommonReleaseSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = CommonReleaseSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonReleaseSettings.xcconfig; sourceTree = "<absolute>"; };
|
||||
84C4426A0B306D39003FCBFF /* CommonDebugSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = CommonDebugSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonDebugSettings.xcconfig; sourceTree = "<absolute>"; };
|
||||
84C9D7F90AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_Dispatcher.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_Dispatcher.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84C9D7FA0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_PluginInitialize.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_PluginInitialize.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84E903BF0EA34FD70088E51C /* juce_RTASUtilities.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_RTASUtilities.mm; path = ../../../wrapper/formats/RTAS/juce_RTASUtilities.mm; sourceTree = SOURCE_ROOT; };
|
||||
84E904CF0EA351E40088E51C /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; };
|
||||
84E907CA0EA396A50088E51C /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; };
|
||||
84E90C240EA399090088E51C /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
|
||||
84E90C2A0EA39A110088E51C /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
|
||||
84EEB4170AFB6679009655FF /* DummyResourceFile.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = DummyResourceFile.r; path = ../../../wrapper/formats/RTAS/DummyResourceFile.r; sourceTree = SOURCE_ROOT; };
|
||||
84F5CF5F0B1B705E00A2E279 /* juce_RTASCompileFlags.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_RTASCompileFlags.h; path = ../../../wrapper/formats/RTAS/juce_RTASCompileFlags.h; sourceTree = SOURCE_ROOT; };
|
||||
8D01CCD20486CAD60068D4B7 /* JuceRTASDemo.dpm */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceRTASDemo.dpm; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
|
@ -104,20 +102,19 @@
|
|||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
84FAD77B0C7C89E100AF3028 /* libPluginLibrary.a in Frameworks */,
|
||||
84C0A3020DE2CBE500606895 /* AGL.framework in Frameworks */,
|
||||
84C0A3030DE2CBE500606895 /* ApplicationServices.framework in Frameworks */,
|
||||
84C0A3040DE2CBE500606895 /* AudioUnit.framework in Frameworks */,
|
||||
84C0A3050DE2CBE500606895 /* Carbon.framework in Frameworks */,
|
||||
84C0A3060DE2CBE500606895 /* Cocoa.framework in Frameworks */,
|
||||
84C0A3070DE2CBE500606895 /* CoreAudio.framework in Frameworks */,
|
||||
84C0A3080DE2CBE500606895 /* CoreFoundation.framework in Frameworks */,
|
||||
84C0A3090DE2CBE500606895 /* CoreMIDI.framework in Frameworks */,
|
||||
84C0A30A0DE2CBE500606895 /* CoreServices.framework in Frameworks */,
|
||||
84C0A30B0DE2CBE500606895 /* DiscRecording.framework in Frameworks */,
|
||||
84C0A30C0DE2CBE500606895 /* IOKit.framework in Frameworks */,
|
||||
84C0A30D0DE2CBE600606895 /* OpenGL.framework in Frameworks */,
|
||||
84C0A30E0DE2CBE600606895 /* QuickTime.framework in Frameworks */,
|
||||
84C0A30F0DE2CBE600606895 /* WebKit.framework in Frameworks */,
|
||||
84E904D00EA351E40088E51C /* QTKit.framework in Frameworks */,
|
||||
84E907CB0EA396A50088E51C /* DiscRecording.framework in Frameworks */,
|
||||
84E90C250EA399090088E51C /* WebKit.framework in Frameworks */,
|
||||
84E90C2B0EA39A110088E51C /* OpenGL.framework in Frameworks */,
|
||||
84190D1A0EA5320900B939D0 /* Carbon.framework in Frameworks */,
|
||||
846EC6670EB602B90080CCFF /* QuickTime.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -140,21 +137,20 @@
|
|||
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
84C0A2F40DE2CBE500606895 /* AGL.framework */,
|
||||
5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */,
|
||||
84C0A2F50DE2CBE500606895 /* ApplicationServices.framework */,
|
||||
84C0A2F60DE2CBE500606895 /* AudioUnit.framework */,
|
||||
84C0A2F70DE2CBE500606895 /* Carbon.framework */,
|
||||
84C0A2F80DE2CBE500606895 /* Cocoa.framework */,
|
||||
84190D190EA5320900B939D0 /* Carbon.framework */,
|
||||
84C0A2F90DE2CBE500606895 /* CoreAudio.framework */,
|
||||
84C0A2FA0DE2CBE500606895 /* CoreFoundation.framework */,
|
||||
84C0A2FB0DE2CBE500606895 /* CoreMIDI.framework */,
|
||||
84C0A2FC0DE2CBE500606895 /* CoreServices.framework */,
|
||||
84C0A2FD0DE2CBE500606895 /* DiscRecording.framework */,
|
||||
84E907CA0EA396A50088E51C /* DiscRecording.framework */,
|
||||
84C0A2FE0DE2CBE500606895 /* IOKit.framework */,
|
||||
84C0A2FF0DE2CBE500606895 /* OpenGL.framework */,
|
||||
84C0A3000DE2CBE500606895 /* QuickTime.framework */,
|
||||
84C0A3010DE2CBE500606895 /* WebKit.framework */,
|
||||
5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */,
|
||||
84E904CF0EA351E40088E51C /* QTKit.framework */,
|
||||
846EC6660EB602B90080CCFF /* QuickTime.framework */,
|
||||
84E90C240EA399090088E51C /* WebKit.framework */,
|
||||
84E90C2A0EA39A110088E51C /* OpenGL.framework */,
|
||||
);
|
||||
name = "External Frameworks and Libraries";
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -211,7 +207,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
846444E10AFA003B00E7B2BE /* Digi code wrappers */,
|
||||
841E073B0AF9F099005E6FCC /* juce_RTASUtilities.cpp */,
|
||||
84E903BF0EA34FD70088E51C /* juce_RTASUtilities.mm */,
|
||||
841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */,
|
||||
84F5CF5F0B1B705E00A2E279 /* juce_RTASCompileFlags.h */,
|
||||
);
|
||||
|
|
@ -318,7 +314,6 @@
|
|||
files = (
|
||||
841E07300AF9F015005E6FCC /* DemoEditorComponent.cpp in Sources */,
|
||||
841E07310AF9F015005E6FCC /* DemoJuceFilter.cpp in Sources */,
|
||||
841E073D0AF9F099005E6FCC /* juce_RTASUtilities.cpp in Sources */,
|
||||
841E073E0AF9F099005E6FCC /* juce_RTASWrapper.cpp in Sources */,
|
||||
846444EF0AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp in Sources */,
|
||||
846444F00AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp in Sources */,
|
||||
|
|
@ -333,6 +328,7 @@
|
|||
84C9D7FB0AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp in Sources */,
|
||||
84C9D7FC0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp in Sources */,
|
||||
84C0A3110DE2CC0600606895 /* juce_amalgamated.mm in Sources */,
|
||||
84E903C00EA34FD70088E51C /* juce_RTASUtilities.mm in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -7,9 +7,8 @@
|
|||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
845FAE4C0A5C09FA008C94D8 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */; };
|
||||
846EC67F0EB603BE0080CCFF /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846EC67E0EB603BE0080CCFF /* QuickTime.framework */; };
|
||||
84BACBD20987847C0073300C /* juce_VstWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */; };
|
||||
84C0A3530DE2D1FD00606895 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3450DE2D1FD00606895 /* AGL.framework */; };
|
||||
84C0A3540DE2D1FD00606895 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3460DE2D1FD00606895 /* ApplicationServices.framework */; };
|
||||
84C0A3550DE2D1FD00606895 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3470DE2D1FD00606895 /* AudioUnit.framework */; };
|
||||
84C0A3560DE2D1FD00606895 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3480DE2D1FD00606895 /* Carbon.framework */; };
|
||||
|
|
@ -21,20 +20,22 @@
|
|||
84C0A35C0DE2D1FD00606895 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A34E0DE2D1FD00606895 /* DiscRecording.framework */; };
|
||||
84C0A35D0DE2D1FD00606895 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A34F0DE2D1FD00606895 /* IOKit.framework */; };
|
||||
84C0A35E0DE2D1FD00606895 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3500DE2D1FD00606895 /* OpenGL.framework */; };
|
||||
84C0A35F0DE2D1FD00606895 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3510DE2D1FD00606895 /* QuickTime.framework */; };
|
||||
84C0A3600DE2D1FD00606895 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84C0A3520DE2D1FD00606895 /* WebKit.framework */; };
|
||||
84C0A3620DE2D24B00606895 /* juce_amalgamated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84C0A3610DE2D24B00606895 /* juce_amalgamated.mm */; };
|
||||
84E01FC70E9136C6003E41AF /* juce_VstWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84E01FC60E9136C6003E41AF /* juce_VstWrapper.mm */; };
|
||||
84E0200D0E923F75003E41AF /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E0200C0E923F75003E41AF /* QTKit.framework */; };
|
||||
84E1AE51089EBAAA00E85E4F /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1AE4D089EBAAA00E85E4F /* DemoEditorComponent.cpp */; };
|
||||
84E1AE52089EBAAA00E85E4F /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1AE4F089EBAAA00E85E4F /* DemoJuceFilter.cpp */; };
|
||||
84E1AF42089EBFD900E85E4F /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84E1AF41089EBFD900E85E4F /* Info.plist */; };
|
||||
84F5CF040B1B66B100A2E279 /* How to use this framework.txt in Resources */ = {isa = PBXBuildFile; fileRef = 84F5CF030B1B66B100A2E279 /* How to use this framework.txt */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
84551AA009BDB8F3009C9F3E /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; };
|
||||
845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; };
|
||||
846EC67E0EB603BE0080CCFF /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
846EC6820EB603FF0080CCFF /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; };
|
||||
84BACBD10987847C0073300C /* juce_VstWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_VstWrapper.cpp; path = ../../../wrapper/formats/VST/juce_VstWrapper.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84C0A3450DE2D1FD00606895 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
|
||||
84BE92BB0EA61E590079073F /* MacExportedSymbols.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = MacExportedSymbols.txt; path = ../../../wrapper/formats/VST/MacExportedSymbols.txt; sourceTree = SOURCE_ROOT; };
|
||||
84C0A3460DE2D1FD00606895 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3470DE2D1FD00606895 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3480DE2D1FD00606895 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
|
|
@ -46,15 +47,16 @@
|
|||
84C0A34E0DE2D1FD00606895 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; };
|
||||
84C0A34F0DE2D1FD00606895 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3500DE2D1FD00606895 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3510DE2D1FD00606895 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3520DE2D1FD00606895 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
|
||||
84C0A3610DE2D24B00606895 /* juce_amalgamated.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_amalgamated.mm; path = ../../../../../juce_amalgamated.mm; sourceTree = SOURCE_ROOT; };
|
||||
84E01FC60E9136C6003E41AF /* juce_VstWrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 2; name = juce_VstWrapper.mm; path = ../../../wrapper/formats/VST/juce_VstWrapper.mm; sourceTree = SOURCE_ROOT; };
|
||||
84E0200C0E923F75003E41AF /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; };
|
||||
84E1AE47089EBA6A00E85E4F /* JuceVST.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceVST.vst; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
84E1AE4D089EBAAA00E85E4F /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84E1AE4E089EBAAA00E85E4F /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; };
|
||||
84E1AE4F089EBAAA00E85E4F /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84E1AE50089EBAAA00E85E4F /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; };
|
||||
84E1AF41089EBFD900E85E4F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
|
||||
84E1AF41089EBFD900E85E4F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
|
||||
84F5CF030B1B66B100A2E279 /* How to use this framework.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "How to use this framework.txt"; path = "../../../How to use this framework.txt"; sourceTree = SOURCE_ROOT; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
|
|
@ -63,7 +65,6 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
84C0A3530DE2D1FD00606895 /* AGL.framework in Frameworks */,
|
||||
84C0A3540DE2D1FD00606895 /* ApplicationServices.framework in Frameworks */,
|
||||
84C0A3550DE2D1FD00606895 /* AudioUnit.framework in Frameworks */,
|
||||
84C0A3560DE2D1FD00606895 /* Carbon.framework in Frameworks */,
|
||||
|
|
@ -75,8 +76,9 @@
|
|||
84C0A35C0DE2D1FD00606895 /* DiscRecording.framework in Frameworks */,
|
||||
84C0A35D0DE2D1FD00606895 /* IOKit.framework in Frameworks */,
|
||||
84C0A35E0DE2D1FD00606895 /* OpenGL.framework in Frameworks */,
|
||||
84C0A35F0DE2D1FD00606895 /* QuickTime.framework in Frameworks */,
|
||||
84C0A3600DE2D1FD00606895 /* WebKit.framework in Frameworks */,
|
||||
84E0200D0E923F75003E41AF /* QTKit.framework in Frameworks */,
|
||||
846EC67F0EB603BE0080CCFF /* QuickTime.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -98,7 +100,6 @@
|
|||
089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
84C0A3450DE2D1FD00606895 /* AGL.framework */,
|
||||
84C0A3460DE2D1FD00606895 /* ApplicationServices.framework */,
|
||||
84C0A3470DE2D1FD00606895 /* AudioUnit.framework */,
|
||||
84C0A3480DE2D1FD00606895 /* Carbon.framework */,
|
||||
|
|
@ -109,8 +110,9 @@
|
|||
84C0A34D0DE2D1FD00606895 /* CoreServices.framework */,
|
||||
84C0A34E0DE2D1FD00606895 /* DiscRecording.framework */,
|
||||
84C0A34F0DE2D1FD00606895 /* IOKit.framework */,
|
||||
84E0200C0E923F75003E41AF /* QTKit.framework */,
|
||||
846EC67E0EB603BE0080CCFF /* QuickTime.framework */,
|
||||
84C0A3500DE2D1FD00606895 /* OpenGL.framework */,
|
||||
84C0A3510DE2D1FD00606895 /* QuickTime.framework */,
|
||||
84C0A3520DE2D1FD00606895 /* WebKit.framework */,
|
||||
);
|
||||
name = "External Frameworks and Libraries";
|
||||
|
|
@ -151,6 +153,7 @@
|
|||
84E1AE50089EBAAA00E85E4F /* DemoJuceFilter.h */,
|
||||
84551AA009BDB8F3009C9F3E /* JucePluginCharacteristics.h */,
|
||||
84C0A3610DE2D24B00606895 /* juce_amalgamated.mm */,
|
||||
846EC6820EB603FF0080CCFF /* includes.h */,
|
||||
);
|
||||
name = filter;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -158,7 +161,9 @@
|
|||
84E1AE53089EBACA00E85E4F /* wrapper code */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
84E01FC60E9136C6003E41AF /* juce_VstWrapper.mm */,
|
||||
84BACBD10987847C0073300C /* juce_VstWrapper.cpp */,
|
||||
84BE92BB0EA61E590079073F /* MacExportedSymbols.txt */,
|
||||
);
|
||||
name = "wrapper code";
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -206,8 +211,6 @@
|
|||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
84E1AF42089EBFD900E85E4F /* Info.plist in Resources */,
|
||||
845FAE4C0A5C09FA008C94D8 /* juce.xcconfig in Resources */,
|
||||
84F5CF040B1B66B100A2E279 /* How to use this framework.txt in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -222,6 +225,7 @@
|
|||
84E1AE52089EBAAA00E85E4F /* DemoJuceFilter.cpp in Sources */,
|
||||
84BACBD20987847C0073300C /* juce_VstWrapper.cpp in Sources */,
|
||||
84C0A3620DE2D24B00606895 /* juce_amalgamated.mm in Sources */,
|
||||
84E01FC70E9136C6003E41AF /* juce_VstWrapper.mm in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -257,12 +261,15 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COPY_PHASE_STRIP = NO;
|
||||
EXPORTED_SYMBOLS_FILE = ../../../wrapper/formats/VST/MacExportedSymbols.txt;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||
GENERATE_PKGINFO_FILE = YES;
|
||||
INFOPLIST_FILE = info.plist;
|
||||
INFOPLIST_PREPROCESS = YES;
|
||||
PRELINK_LIBS = libjucedebug;
|
||||
PRODUCT_NAME = JuceVST;
|
||||
SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
|
||||
SYMROOT = "$(HOME)/Library/Audio/Plug-Ins/VST";
|
||||
WARNING_CFLAGS = (
|
||||
"-Wmost",
|
||||
|
|
@ -277,6 +284,7 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COPY_PHASE_STRIP = YES;
|
||||
EXPORTED_SYMBOLS_FILE = ../../../wrapper/formats/VST/MacExportedSymbols.txt;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||
|
|
|
|||
|
|
@ -29,12 +29,15 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#include <Cocoa/Cocoa.h>
|
||||
#include <AudioUnit/AUCocoaUIView.h>
|
||||
#include <AudioUnit/AudioUnit.h>
|
||||
#include <AudioToolbox/AudioUnitUtilities.h>
|
||||
#include "AUMIDIEffectBase.h"
|
||||
#include "MusicDeviceBase.h"
|
||||
#include "AUCarbonViewBase.h"
|
||||
#include "../../juce_IncludeCharacteristics.h"
|
||||
#include "../../../../../juce_amalgamated.h"
|
||||
//#include "../../../../../juce_amalgamated.h"
|
||||
#include "../../../../../juce.h"
|
||||
|
||||
//==============================================================================
|
||||
#define juceFilterObjectPropertyID 0x1a45ffe9
|
||||
|
|
@ -60,10 +63,28 @@ END_JUCE_NAMESPACE
|
|||
extern AudioProcessor* JUCE_CALLTYPE createPluginFilter();
|
||||
class JuceAUView;
|
||||
|
||||
//==============================================================================
|
||||
#define CONCAT_MACRO(Part1, Part2) Part1 ## Part2
|
||||
#define JuceUICreationClass CONCAT_MACRO (JucePlugin_AUExportPrefix, _UICreationClass)
|
||||
|
||||
@interface JuceUICreationClass : NSObject <AUCocoaUIBase>
|
||||
{
|
||||
}
|
||||
|
||||
- (JuceUICreationClass*) init;
|
||||
- (void) dealloc;
|
||||
- (unsigned) interfaceVersion;
|
||||
- (NSString *) description;
|
||||
- (NSView*) uiViewForAudioUnit: (AudioUnit) inAudioUnit
|
||||
withSize: (NSSize) inPreferredSize;
|
||||
@end
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class JuceAU : public JuceAUBaseClass,
|
||||
public AudioProcessorListener,
|
||||
public AudioPlayHead
|
||||
public AudioPlayHead,
|
||||
public ComponentListener
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -73,14 +94,11 @@ public:
|
|||
#else
|
||||
: AUMIDIEffectBase (component),
|
||||
#endif
|
||||
currentView (0),
|
||||
juceFilter (0),
|
||||
bufferSpace (2, 16),
|
||||
channels (0),
|
||||
prepared (false)
|
||||
{
|
||||
CreateElements();
|
||||
|
||||
if (activePlugins.size() == 0)
|
||||
{
|
||||
initialiseJuce_GUI();
|
||||
|
|
@ -88,8 +106,6 @@ public:
|
|||
#ifdef JucePlugin_CFBundleIdentifier
|
||||
juce_setCurrentExecutableFileNameFromBundleId (JucePlugin_CFBundleIdentifier);
|
||||
#endif
|
||||
|
||||
MessageManager::getInstance()->setTimeBeforeShowingWaitCursor (0);
|
||||
}
|
||||
|
||||
juceFilter = createPluginFilter();
|
||||
|
|
@ -143,10 +159,16 @@ public:
|
|||
outDataSize = sizeof (UInt32);
|
||||
return noErr;
|
||||
}
|
||||
else if (inID == kMusicDeviceProperty_InstrumentCount)
|
||||
else if (inID == kMusicDeviceProperty_InstrumentCount)
|
||||
{
|
||||
outDataSize = sizeof (UInt32);
|
||||
outWritable = false;
|
||||
outDataSize = sizeof (UInt32);
|
||||
outWritable = false;
|
||||
return noErr;
|
||||
}
|
||||
else if (inID == kAudioUnitProperty_CocoaUI)
|
||||
{
|
||||
outDataSize = sizeof (AudioUnitCocoaViewInfo);
|
||||
outWritable = true;
|
||||
return noErr;
|
||||
}
|
||||
}
|
||||
|
|
@ -172,11 +194,21 @@ public:
|
|||
*(UInt32*) outData = (juceFilter != 0 && juceFilter->isNonRealtime()) ? 1 : 0;
|
||||
return noErr;
|
||||
}
|
||||
else if (inID == kMusicDeviceProperty_InstrumentCount)
|
||||
else if (inID == kMusicDeviceProperty_InstrumentCount)
|
||||
{
|
||||
*(UInt32*) outData = 1;
|
||||
return noErr;
|
||||
}
|
||||
else if (inID == kAudioUnitProperty_CocoaUI)
|
||||
{
|
||||
AudioUnitCocoaViewInfo* info = (AudioUnitCocoaViewInfo*) outData;
|
||||
NSBundle* b = [NSBundle bundleForClass: [JuceUICreationClass class]];
|
||||
|
||||
info->mCocoaAUViewClass[0] = (CFStringRef) [[[JuceUICreationClass class] className] retain];
|
||||
info->mCocoaAUViewBundleLocation = (CFURLRef) [[NSURL fileURLWithPath: [b bundlePath]] retain];
|
||||
|
||||
return noErr;
|
||||
}
|
||||
}
|
||||
|
||||
return JuceAUBaseClass::GetProperty (inID, inScope, inElement, outData);
|
||||
|
|
@ -370,18 +402,6 @@ public:
|
|||
return juceFilter->getLatencySamples() / GetSampleRate();
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
int GetNumCustomUIComponents() { return 1; }
|
||||
|
||||
void GetUIComponentDescs (ComponentDescription* inDescArray)
|
||||
{
|
||||
inDescArray[0].componentType = kAudioUnitCarbonViewComponentType;
|
||||
inDescArray[0].componentSubType = JucePlugin_AUSubType;
|
||||
inDescArray[0].componentManufacturer = JucePlugin_AUManufacturerCode;
|
||||
inDescArray[0].componentFlags = 0;
|
||||
inDescArray[0].componentFlagsMask = 0;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info)
|
||||
{
|
||||
|
|
@ -472,9 +492,6 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
// (can only be called immediately after sendAUEvent)
|
||||
void sendOldFashionedGestureEvent (const AudioUnitCarbonViewEventID gestureType);
|
||||
|
||||
void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue)
|
||||
{
|
||||
sendAUEvent (kAudioUnitEvent_ParameterValueChange, index);
|
||||
|
|
@ -483,13 +500,11 @@ public:
|
|||
void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index)
|
||||
{
|
||||
sendAUEvent (kAudioUnitEvent_BeginParameterChangeGesture, index);
|
||||
sendOldFashionedGestureEvent (kAudioUnitCarbonViewEvent_MouseDownInControl);
|
||||
}
|
||||
|
||||
void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index)
|
||||
{
|
||||
sendAUEvent (kAudioUnitEvent_EndParameterChangeGesture, index);
|
||||
sendOldFashionedGestureEvent (kAudioUnitCarbonViewEvent_MouseUpInControl);
|
||||
}
|
||||
|
||||
void audioProcessorChanged (AudioProcessor*)
|
||||
|
|
@ -820,10 +835,18 @@ protected:
|
|||
return noErr;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
public:
|
||||
JuceAUView* currentView;
|
||||
void componentMovedOrResized (Component& component, bool wasMoved, bool wasResized)
|
||||
{
|
||||
if (wasResized)
|
||||
{
|
||||
NSView* view = (NSView*) component.getWindowHandle();
|
||||
[[view superview] setFrameSize: NSMakeSize (component.getWidth(), component.getHeight())];
|
||||
[view setFrame: NSMakeRect (0, 0, component.getWidth(), component.getHeight())];
|
||||
[view setNeedsDisplay: YES];
|
||||
}
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
private:
|
||||
AudioProcessor* juceFilter;
|
||||
AudioSampleBuffer bufferSpace;
|
||||
|
|
@ -836,221 +859,130 @@ private:
|
|||
mutable MemoryBlock presetsArray;
|
||||
};
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class JuceAUComponentHolder : public Component
|
||||
@interface JuceUIViewClass : NSView
|
||||
{
|
||||
public:
|
||||
JuceAUComponentHolder (Component* const editorComp)
|
||||
{
|
||||
addAndMakeVisible (editorComp);
|
||||
setOpaque (true);
|
||||
setVisible (true);
|
||||
setBroughtToFrontOnMouseClick (true);
|
||||
|
||||
#if ! JucePlugin_EditorRequiresKeyboardFocus
|
||||
setWantsKeyboardFocus (false);
|
||||
#endif
|
||||
}
|
||||
|
||||
~JuceAUComponentHolder()
|
||||
{
|
||||
}
|
||||
|
||||
void resized()
|
||||
{
|
||||
if (getNumChildComponents() > 0)
|
||||
getChildComponent (0)->setBounds (0, 0, getWidth(), getHeight());
|
||||
}
|
||||
|
||||
void paint (Graphics& g)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class JuceAUView : public AUCarbonViewBase,
|
||||
public ComponentListener,
|
||||
public MouseListener,
|
||||
public Timer
|
||||
{
|
||||
AudioProcessor* juceFilter;
|
||||
AudioProcessor* filter;
|
||||
JuceAU* au;
|
||||
AudioProcessorEditor* editorComp;
|
||||
Component* windowComp;
|
||||
bool recursive;
|
||||
int mx, my;
|
||||
JuceAU* owner;
|
||||
}
|
||||
|
||||
public:
|
||||
JuceAUView (AudioUnitCarbonView auview)
|
||||
: AUCarbonViewBase (auview),
|
||||
juceFilter (0),
|
||||
editorComp (0),
|
||||
windowComp (0),
|
||||
recursive (false),
|
||||
mx (0),
|
||||
my (0),
|
||||
owner (0)
|
||||
{
|
||||
}
|
||||
- (JuceUIViewClass*) initWithFilter: (AudioProcessor*) filter
|
||||
withAU: (JuceAU*) au
|
||||
withComponent: (AudioProcessorEditor*) editorComp;
|
||||
- (void) dealloc;
|
||||
- (void) viewDidMoveToWindow;
|
||||
- (BOOL) mouseDownCanMoveWindow;
|
||||
|
||||
~JuceAUView()
|
||||
{
|
||||
if (owner->currentView == this)
|
||||
owner->currentView = 0;
|
||||
@end
|
||||
|
||||
deleteUI();
|
||||
}
|
||||
@implementation JuceUIViewClass
|
||||
|
||||
ComponentResult CreateUI (Float32 inXOffset, Float32 inYOffset)
|
||||
{
|
||||
if (juceFilter == 0)
|
||||
{
|
||||
void* pointers[2];
|
||||
UInt32 propertySize = sizeof (pointers);
|
||||
|
||||
AudioUnitGetProperty (GetEditAudioUnit(),
|
||||
juceFilterObjectPropertyID,
|
||||
kAudioUnitScope_Global,
|
||||
0,
|
||||
pointers,
|
||||
&propertySize);
|
||||
|
||||
juceFilter = (AudioProcessor*) pointers[0];
|
||||
|
||||
owner = (JuceAU*) pointers[1];
|
||||
owner->currentView = this;
|
||||
}
|
||||
|
||||
if (juceFilter != 0)
|
||||
{
|
||||
deleteUI();
|
||||
|
||||
editorComp = juceFilter->createEditorIfNeeded();
|
||||
|
||||
const int w = editorComp->getWidth();
|
||||
const int h = editorComp->getHeight();
|
||||
|
||||
editorComp->setOpaque (true);
|
||||
editorComp->setVisible (true);
|
||||
|
||||
windowComp = new JuceAUComponentHolder (editorComp);
|
||||
windowComp->setBounds ((int) inXOffset, (int) inYOffset, w, h);
|
||||
|
||||
windowComp->addToDesktop (0, (void*) mCarbonPane);
|
||||
SizeControl (mCarbonPane, w, h);
|
||||
|
||||
editorComp->addComponentListener (this);
|
||||
windowComp->addMouseListener (this, true);
|
||||
|
||||
startTimer (20);
|
||||
}
|
||||
else
|
||||
{
|
||||
jassertfalse // can't get a pointer to our effect
|
||||
}
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
void componentMovedOrResized (Component& component,
|
||||
bool wasMoved,
|
||||
bool wasResized)
|
||||
{
|
||||
if (! recursive)
|
||||
{
|
||||
recursive = true;
|
||||
|
||||
if (editorComp != 0 && wasResized)
|
||||
{
|
||||
const int w = jmax (32, editorComp->getWidth());
|
||||
const int h = jmax (32, editorComp->getHeight());
|
||||
|
||||
SizeControl (mCarbonPane, w, h);
|
||||
|
||||
if (windowComp->getWidth() != w
|
||||
|| windowComp->getHeight() != h)
|
||||
{
|
||||
windowComp->setSize (w, h);
|
||||
}
|
||||
|
||||
editorComp->repaint();
|
||||
}
|
||||
|
||||
recursive = false;
|
||||
}
|
||||
}
|
||||
|
||||
void timerCallback()
|
||||
{
|
||||
// for some stupid Apple-related reason, mouse move events just don't seem to get sent
|
||||
// to the windows in an AU, so we have to bodge it here and simulate them with a
|
||||
// timer..
|
||||
if (editorComp != 0)
|
||||
{
|
||||
int x, y;
|
||||
Desktop::getInstance().getMousePosition (x, y);
|
||||
|
||||
if (x != mx || y != my)
|
||||
{
|
||||
mx = x;
|
||||
my = y;
|
||||
|
||||
if (! ModifierKeys::getCurrentModifiers().isAnyMouseButtonDown())
|
||||
{
|
||||
for (int i = ComponentPeer::getNumPeers(); --i >= 0;)
|
||||
{
|
||||
ComponentPeer* const peer = ComponentPeer::getPeer (i);
|
||||
|
||||
int rx = x, ry = y;
|
||||
peer->getComponent()->globalPositionToRelative (rx, ry);
|
||||
|
||||
if (peer->contains (rx, ry, false) && peer->getComponent()->isShowing())
|
||||
{
|
||||
peer->handleMouseMove (rx, ry, Time::currentTimeMillis());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mouseMove (const MouseEvent& e)
|
||||
{
|
||||
Desktop::getInstance().getMousePosition (mx, my);
|
||||
startTimer (20);
|
||||
}
|
||||
|
||||
AudioUnitCarbonViewEventListener getEventListener() const throw() { return mEventListener; }
|
||||
void* getEventListenerUserData() const throw() { return mEventListenerUserData; }
|
||||
|
||||
private:
|
||||
void deleteUI()
|
||||
{
|
||||
PopupMenu::dismissAllActiveMenus();
|
||||
|
||||
// there's some kind of component currently modal, but the host
|
||||
// is trying to delete our plugin..
|
||||
jassert (Component::getCurrentlyModalComponent() == 0);
|
||||
|
||||
if (editorComp != 0)
|
||||
juceFilter->editorBeingDeleted (editorComp);
|
||||
|
||||
deleteAndZero (editorComp);
|
||||
deleteAndZero (windowComp);
|
||||
}
|
||||
};
|
||||
|
||||
void JuceAU::sendOldFashionedGestureEvent (const AudioUnitCarbonViewEventID gestureType)
|
||||
- (JuceUIViewClass*) initWithFilter: (AudioProcessor*) filter_
|
||||
withAU: (JuceAU*) au_
|
||||
withComponent: (AudioProcessorEditor*) editorComp_
|
||||
{
|
||||
if (currentView != 0 && currentView->getEventListener() != 0)
|
||||
filter = filter_;
|
||||
au = au_;
|
||||
editorComp = editorComp_;
|
||||
|
||||
[super initWithFrame: NSMakeRect (0, 0, editorComp_->getWidth(), editorComp_->getHeight())];
|
||||
[self setHidden: NO];
|
||||
[self setPostsFrameChangedNotifications: YES];
|
||||
|
||||
editorComp->addToDesktop (0, (void*) self);
|
||||
editorComp->setVisible (true);
|
||||
editorComp->addComponentListener (au);
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
// there's some kind of component currently modal, but the host
|
||||
// is trying to delete our plugin..
|
||||
jassert (Component::getCurrentlyModalComponent() == 0);
|
||||
|
||||
if (editorComp != 0)
|
||||
filter->editorBeingDeleted (editorComp);
|
||||
|
||||
deleteAndZero (editorComp);
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) viewDidMoveToWindow
|
||||
{
|
||||
if ([self window] != 0)
|
||||
{
|
||||
(*currentView->getEventListener()) (currentView->getEventListenerUserData(), currentView->GetComponentInstance(),
|
||||
&(auEvent.mArgument.mParameter), gestureType, 0);
|
||||
[[self window] setAcceptsMouseMovedEvents: YES];
|
||||
|
||||
if (editorComp != 0)
|
||||
[[self window] makeFirstResponder: (NSView*) editorComp->getWindowHandle()];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL) mouseDownCanMoveWindow
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation JuceUICreationClass
|
||||
|
||||
- (JuceUICreationClass*) init
|
||||
{
|
||||
return [super init];
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (unsigned) interfaceVersion
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (NSString*) description
|
||||
{
|
||||
return [NSString stringWithString: @JucePlugin_Name];
|
||||
}
|
||||
|
||||
- (NSView*) uiViewForAudioUnit: (AudioUnit) inAudioUnit
|
||||
withSize: (NSSize) inPreferredSize
|
||||
{
|
||||
void* pointers[2];
|
||||
UInt32 propertySize = sizeof (pointers);
|
||||
|
||||
if (AudioUnitGetProperty (inAudioUnit,
|
||||
juceFilterObjectPropertyID,
|
||||
kAudioUnitScope_Global,
|
||||
0,
|
||||
pointers,
|
||||
&propertySize) != noErr)
|
||||
return 0;
|
||||
|
||||
AudioProcessor* filter = (AudioProcessor*) pointers[0];
|
||||
JuceAU* au = (JuceAU*) pointers[1];
|
||||
|
||||
if (filter == 0)
|
||||
return 0;
|
||||
|
||||
AudioProcessorEditor* editorComp = filter->createEditorIfNeeded();
|
||||
|
||||
if (editorComp == 0)
|
||||
return 0;
|
||||
DBG (String (inPreferredSize.width) + " " + String (inPreferredSize.height));
|
||||
DBG (String (editorComp->getWidth()) + " " + String (editorComp->getHeight()));
|
||||
|
||||
return [[[JuceUIViewClass alloc] initWithFilter: filter
|
||||
withAU: au
|
||||
withComponent: editorComp] autorelease];
|
||||
}
|
||||
@end
|
||||
|
||||
//==============================================================================
|
||||
#define JUCE_COMPONENT_ENTRYX(Class, Name, Suffix) \
|
||||
|
|
@ -1063,4 +995,4 @@ extern "C" __attribute__((visibility("default"))) ComponentResult Name ## Suffix
|
|||
#define JUCE_COMPONENT_ENTRY(Class, Name, Suffix) JUCE_COMPONENT_ENTRYX(Class, Name, Suffix)
|
||||
|
||||
JUCE_COMPONENT_ENTRY (JuceAU, JucePlugin_AUExportPrefix, Entry)
|
||||
JUCE_COMPONENT_ENTRY (JuceAUView, JucePlugin_AUExportPrefix, ViewEntry)
|
||||
//JUCE_COMPONENT_ENTRY (JuceAUView, JucePlugin_AUExportPrefix, ViewEntry)
|
||||
|
|
@ -30,7 +30,6 @@
|
|||
*/
|
||||
|
||||
#include <AudioUnit/AudioUnit.r>
|
||||
#include <AudioUnit/AudioUnitCarbonView.r>
|
||||
|
||||
//==============================================================================
|
||||
/* The JucePluginCharacteristics.h file is supposed to live in your plugin-specific
|
||||
|
|
@ -56,15 +55,3 @@
|
|||
|
||||
#include "/Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUResources.r"
|
||||
|
||||
//==============================================================================
|
||||
// component resources for Audio Unit Carbon View
|
||||
#define RES_ID 2000
|
||||
#define COMP_TYPE kAudioUnitCarbonViewComponentType
|
||||
#define COMP_SUBTYPE JucePlugin_AUSubType
|
||||
#define COMP_MANUF JucePlugin_AUManufacturerCode
|
||||
#define VERSION JucePlugin_VersionCode
|
||||
#define NAME JucePlugin_Manufacturer ": " JucePlugin_Name " View"
|
||||
#define DESCRIPTION NAME
|
||||
#define ENTRY_POINT JucePlugin_AUExportPrefixQuoted "ViewEntry"
|
||||
|
||||
#include "/Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUResources.r"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#include <Cocoa/Cocoa.h>
|
||||
#include "../../../../../juce.h"
|
||||
|
||||
//==============================================================================
|
||||
void* attachSubWindow (void* hostWindowRef, Component* comp)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: hostWindowRef];
|
||||
[hostWindow retain];
|
||||
|
||||
NSView* content = [hostWindow contentView];
|
||||
NSRect f = [content frame];
|
||||
f.size.width = comp->getWidth();
|
||||
f.size.height = comp->getHeight();
|
||||
[content setFrame: f];
|
||||
|
||||
NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin];
|
||||
windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height);
|
||||
|
||||
comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y);
|
||||
|
||||
#if ! JucePlugin_EditorRequiresKeyboardFocus
|
||||
comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses);
|
||||
#else
|
||||
comp->addToDesktop (ComponentPeer::windowIsTemporary);
|
||||
#endif
|
||||
|
||||
comp->setVisible (true);
|
||||
|
||||
NSView* pluginView = (NSView*) comp->getWindowHandle();
|
||||
NSWindow* pluginWindow = [pluginView window];
|
||||
|
||||
[hostWindow addChildWindow: pluginWindow
|
||||
ordered: NSWindowAbove];
|
||||
[hostWindow orderFront: nil];
|
||||
return hostWindow;
|
||||
}
|
||||
|
||||
void removeSubWindow (void* nsWindow, Component* comp)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
NSView* pluginView = (NSView*) comp->getWindowHandle();
|
||||
NSWindow* hostWindow = (NSWindow*) nsWindow;
|
||||
NSWindow* pluginWindow = [pluginView window];
|
||||
|
||||
[hostWindow removeChildWindow: pluginWindow];
|
||||
comp->removeFromDesktop();
|
||||
[hostWindow release];
|
||||
}
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
#ifdef _MSC_VER
|
||||
#include "../../../../../juce.h"
|
||||
#else
|
||||
#include "../../../../../juce_amalgamated.h"
|
||||
#include "../../../../../juce.h"
|
||||
#endif
|
||||
|
||||
#include "../../juce_IncludeCharacteristics.h"
|
||||
|
|
@ -112,6 +112,9 @@
|
|||
#if ! JucePlugin_EditorRequiresKeyboardFocus
|
||||
extern void JUCE_CALLTYPE passFocusToHostWindow (void* hostWindow);
|
||||
#endif
|
||||
#else
|
||||
extern void* attachSubWindow (void* hostWindowRef, JUCE_NAMESPACE::Component* comp);
|
||||
extern void removeSubWindow (void* nsWindow, JUCE_NAMESPACE::Component* comp);
|
||||
#endif
|
||||
|
||||
const int midiBufferSize = 1024;
|
||||
|
|
@ -150,10 +153,10 @@ class JucePlugInProcess : public CEffectProcessMIDI,
|
|||
public:
|
||||
//==============================================================================
|
||||
JucePlugInProcess()
|
||||
: channels (0),
|
||||
prepared (false),
|
||||
midiBufferNode (0),
|
||||
: midiBufferNode (0),
|
||||
midiTransport (0),
|
||||
channels (0),
|
||||
prepared (false),
|
||||
sampleRate (44100.0)
|
||||
{
|
||||
juceFilter = createPluginFilter();
|
||||
|
|
@ -192,8 +195,8 @@ public:
|
|||
JucePlugInProcess* const process_)
|
||||
: filter (filter_),
|
||||
process (process_),
|
||||
editorComp (0),
|
||||
wrapper (0)
|
||||
wrapper (0),
|
||||
editorComp (0)
|
||||
{
|
||||
// setting the size in here crashes PT for some reason, so keep it simple..
|
||||
}
|
||||
|
|
@ -261,35 +264,21 @@ public:
|
|||
|
||||
void DrawContents (Rect*)
|
||||
{
|
||||
#if JUCE_WIN32
|
||||
if (wrapper != 0)
|
||||
{
|
||||
ComponentPeer* const peer = wrapper->getPeer();
|
||||
|
||||
if (peer != 0)
|
||||
{
|
||||
#if JUCE_WIN32
|
||||
// (seems to be required in PT6.4, but not in 7.x)
|
||||
peer->repaint (0, 0, wrapper->getWidth(), wrapper->getHeight());
|
||||
|
||||
#elif JUCE_PPC
|
||||
// This crap is needed because if you resize a window, PT doesn't
|
||||
// update its clip region, so only part of your new window gets drawn.
|
||||
// This overrides the clipping region that's being passed into the Draw
|
||||
// method.
|
||||
Rect visible;
|
||||
GetVisibleRect (&visible);
|
||||
|
||||
RestoreFocus();
|
||||
Focus (&visible);
|
||||
#endif
|
||||
peer->performAnyPendingRepaintsNow();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void DrawBackground (Rect* r)
|
||||
{
|
||||
}
|
||||
void DrawBackground (Rect*) {}
|
||||
|
||||
//==============================================================================
|
||||
private:
|
||||
|
|
@ -300,8 +289,11 @@ public:
|
|||
|
||||
void deleteEditorComp()
|
||||
{
|
||||
if (editorComp != 0)
|
||||
if (editorComp != 0 || wrapper != 0)
|
||||
{
|
||||
#if JUCE_MAC
|
||||
const ScopedAutoReleasePool pool;
|
||||
#endif
|
||||
PopupMenu::dismissAllActiveMenus();
|
||||
|
||||
JUCE_NAMESPACE::Component* const modalComponent = JUCE_NAMESPACE::Component::getCurrentlyModalComponent();
|
||||
|
|
@ -309,6 +301,7 @@ public:
|
|||
modalComponent->exitModalState (0);
|
||||
|
||||
filter->editorBeingDeleted (editorComp);
|
||||
|
||||
deleteAndZero (editorComp);
|
||||
deleteAndZero (wrapper);
|
||||
}
|
||||
|
|
@ -317,26 +310,23 @@ public:
|
|||
//==============================================================================
|
||||
// A component to hold the AudioProcessorEditor, and cope with some housekeeping
|
||||
// chores when it changes or repaints.
|
||||
class EditorCompWrapper : public JUCE_NAMESPACE::Component,
|
||||
#if JUCE_MAC
|
||||
public Timer
|
||||
#else
|
||||
public FocusChangeListener
|
||||
class EditorCompWrapper : public JUCE_NAMESPACE::Component
|
||||
#if ! JUCE_MAC
|
||||
, public FocusChangeListener
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
EditorCompWrapper (void* const hostWindow_,
|
||||
AudioProcessorEditor* const editorComp,
|
||||
Component* const editorComp,
|
||||
JuceCustomUIView* const owner_)
|
||||
: hostWindow (hostWindow_),
|
||||
owner (owner_),
|
||||
titleW (0),
|
||||
titleH (0)
|
||||
#if JUCE_MAC
|
||||
, forcedRepaintTimer (0)
|
||||
#endif
|
||||
{
|
||||
#if ! JucePlugin_EditorRequiresKeyboardFocus
|
||||
#if JucePlugin_EditorRequiresKeyboardFocus
|
||||
setWantsKeyboardFocus (true);
|
||||
#else
|
||||
setWantsKeyboardFocus (false);
|
||||
#endif
|
||||
setOpaque (true);
|
||||
|
|
@ -347,67 +337,10 @@ public:
|
|||
|
||||
#if JUCE_WIN32
|
||||
attachSubWindow (hostWindow, titleW, titleH, this);
|
||||
setVisible (true);
|
||||
#else
|
||||
SetAutomaticControlDragTrackingEnabledForWindow ((WindowRef) hostWindow_, true);
|
||||
|
||||
WindowAttributes attributes;
|
||||
GetWindowAttributes ((WindowRef) hostWindow_, &attributes);
|
||||
|
||||
parentView = 0;
|
||||
|
||||
if ((attributes & kWindowCompositingAttribute) != 0)
|
||||
{
|
||||
HIViewRef root = HIViewGetRoot ((WindowRef) hostWindow_);
|
||||
HIViewFindByID (root, kHIViewWindowContentID, &parentView);
|
||||
|
||||
if (parentView == 0)
|
||||
parentView = root;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetRootControl ((WindowRef) hostWindow_, (ControlRef*) &parentView);
|
||||
|
||||
if (parentView == 0)
|
||||
CreateRootControl ((WindowRef) hostWindow_, (ControlRef*) &parentView);
|
||||
}
|
||||
|
||||
jassert (parentView != 0);
|
||||
Rect clientRect;
|
||||
GetWindowBounds ((WindowRef) hostWindow, kWindowContentRgn, &clientRect);
|
||||
|
||||
titleW = clientRect.right - clientRect.left;
|
||||
titleH = jmax (0, (clientRect.bottom - clientRect.top) - getHeight());
|
||||
setTopLeftPosition (0, 0);
|
||||
|
||||
HIViewSetNeedsDisplay (parentView, true);
|
||||
|
||||
setVisible (true);
|
||||
addToDesktop (ComponentPeer::windowRepaintedExplictly, (void*) parentView);
|
||||
|
||||
HIViewRef pluginView = HIViewGetFirstSubview (parentView);
|
||||
|
||||
#if ! JucePlugin_EditorRequiresKeyboardFocus
|
||||
HIViewSetActivated (pluginView, false);
|
||||
#endif
|
||||
/* This is a convoluted and desperate workaround for a Digi (or maybe Apple)
|
||||
layout bug. Until the parent control gets some kind of mouse-move
|
||||
event, then our plugin's HIView remains stuck at (0, 0) in the
|
||||
window (despite drawing correctly), which blocks mouse events from
|
||||
getting to the widgets above it.
|
||||
|
||||
After days of frustration the only hack I can find that works
|
||||
is to use this arcane function to redirect mouse events to
|
||||
the parent, while running a timer to spot the moment when our
|
||||
view mysteriously snaps back to its correct location.
|
||||
|
||||
If anyone at Digi or Apple is reading this and they realise that it's
|
||||
their fault, could they please give me back the week of my life that
|
||||
they made me waste on this rubbish. Thankyou.
|
||||
*/
|
||||
SetControlSupervisor (pluginView, parentView);
|
||||
startTimer (150);
|
||||
nsWindow = attachSubWindow (hostWindow, this);
|
||||
#endif
|
||||
setVisible (true);
|
||||
|
||||
#if JUCE_WIN32 && ! JucePlugin_EditorRequiresKeyboardFocus
|
||||
Desktop::getInstance().addFocusChangeListener (this);
|
||||
|
|
@ -421,16 +354,12 @@ public:
|
|||
#endif
|
||||
|
||||
#if JUCE_MAC
|
||||
delete forcedRepaintTimer;
|
||||
removeSubWindow (nsWindow, this);
|
||||
#endif
|
||||
}
|
||||
|
||||
void paint (Graphics&)
|
||||
{
|
||||
#if JUCE_MAC
|
||||
if (forcedRepaintTimer != 0)
|
||||
forcedRepaintTimer->stopTimer();
|
||||
#endif
|
||||
}
|
||||
|
||||
void resized()
|
||||
|
|
@ -443,38 +372,6 @@ public:
|
|||
repaint();
|
||||
}
|
||||
|
||||
#if JUCE_MAC
|
||||
void timerCallback()
|
||||
{
|
||||
// Wait for the moment when PT deigns to allow our view to
|
||||
// take up its actual location (see rant above)
|
||||
HIViewRef content = 0;
|
||||
HIViewFindByID (HIViewGetRoot ((WindowRef) hostWindow), kHIViewWindowContentID, &content);
|
||||
HIPoint p = { 0.0f, 0.0f };
|
||||
|
||||
HIViewRef v = HIViewGetFirstSubview (parentView);
|
||||
HIViewConvertPoint (&p, v, content);
|
||||
|
||||
if (p.y > 12)
|
||||
{
|
||||
if (p.x != titleW || p.y != titleH)
|
||||
{
|
||||
GrafPtr oldport;
|
||||
GetPort (&oldport);
|
||||
SetPort (owner->GetViewPort());
|
||||
SetOrigin (-titleW, -titleH);
|
||||
SetPort (oldport);
|
||||
}
|
||||
|
||||
HIViewRef v = HIViewGetFirstSubview (parentView);
|
||||
SetControlSupervisor (v, 0);
|
||||
stopTimer();
|
||||
|
||||
forcedRepaintTimer = new RepaintCheckTimer (*this);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if JUCE_WIN32
|
||||
void globalFocusChanged (JUCE_NAMESPACE::Component*)
|
||||
{
|
||||
|
|
@ -492,72 +389,22 @@ public:
|
|||
|
||||
#if JUCE_WIN32
|
||||
resizeHostWindow (hostWindow, titleW, titleH, this);
|
||||
owner->updateSize();
|
||||
#else
|
||||
Rect r;
|
||||
GetWindowBounds ((WindowRef) hostWindow, kWindowContentRgn, &r);
|
||||
|
||||
HIRect p;
|
||||
zerostruct (p);
|
||||
HIViewConvertRect (&p, parentView, 0); // find the X position of our view in case there's space to the left of it
|
||||
|
||||
r.right = r.left + jmax (titleW, ((int) p.origin.x) + getWidth());
|
||||
r.bottom = r.top + getHeight() + titleH;
|
||||
|
||||
SetWindowBounds ((WindowRef) hostWindow, kWindowContentRgn, &r);
|
||||
|
||||
owner->updateSize();
|
||||
owner->Invalidate();
|
||||
#endif
|
||||
owner->updateSize();
|
||||
}
|
||||
|
||||
void userTriedToCloseWindow()
|
||||
{
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
juce_UseDebuggingNewOperator
|
||||
|
||||
#if JUCE_MAC
|
||||
protected:
|
||||
void internalRepaint (int x, int y, int w, int h)
|
||||
{
|
||||
Component::internalRepaint (x, y, w, h);
|
||||
owner->Invalidate();
|
||||
|
||||
if (forcedRepaintTimer != 0 && ! forcedRepaintTimer->isTimerRunning())
|
||||
forcedRepaintTimer->startTimer (1000 / 25);
|
||||
}
|
||||
|
||||
HIViewRef parentView;
|
||||
#endif
|
||||
|
||||
private:
|
||||
void* const hostWindow;
|
||||
void* nsWindow;
|
||||
JuceCustomUIView* const owner;
|
||||
int titleW, titleH;
|
||||
|
||||
#if JUCE_MAC
|
||||
// if PT makes us wait too long for a redraw after we've
|
||||
// asked for one, this should kick in and force one to happen
|
||||
class RepaintCheckTimer : public Timer
|
||||
{
|
||||
public:
|
||||
RepaintCheckTimer (EditorCompWrapper& owner_)
|
||||
: owner (owner_)
|
||||
{
|
||||
}
|
||||
|
||||
void timerCallback()
|
||||
{
|
||||
stopTimer();
|
||||
ComponentPeer* const peer = owner.getPeer();
|
||||
|
||||
if (peer != 0)
|
||||
peer->performAnyPendingRepaintsNow();
|
||||
}
|
||||
|
||||
EditorCompWrapper& owner;
|
||||
};
|
||||
|
||||
RepaintCheckTimer* forcedRepaintTimer;
|
||||
#endif
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -705,6 +552,7 @@ protected:
|
|||
|
||||
#if defined (JUCE_DEBUG) || JUCE_LOG_ASSERTIONS
|
||||
const int numMidiEventsComingIn = midiEvents.getNumEvents();
|
||||
(void) numMidiEventsComingIn;
|
||||
#endif
|
||||
|
||||
{
|
||||
|
|
@ -744,7 +592,7 @@ protected:
|
|||
if (! midiEvents.isEmpty())
|
||||
{
|
||||
#if JucePlugin_ProducesMidiOutput
|
||||
const uint8* midiEventData;
|
||||
const juce::uint8* midiEventData;
|
||||
int midiEventSize, midiEventPosition;
|
||||
MidiBuffer::Iterator i (midiEvents);
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
#
|
||||
# This file contains a list of the symbols that your VST plugin needs to export.
|
||||
#
|
||||
# It's very important that you refer to this file in your linker settings, under
|
||||
# the "Exported Symbols File" heading. If you don't specify that these are the
|
||||
# only two symbols exported, the linker will also export all the Obj-C symbols in
|
||||
# Juce, and this will create all sorts of dynamic link problems when you have
|
||||
# more than one juce-linked module loaded at the same time.
|
||||
#
|
||||
|
||||
_VSTPluginMain
|
||||
_main_macho
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
*** DON't EDIT THIS FILE!! ***
|
||||
*** DON'T EDIT THIS FILE!! ***
|
||||
|
||||
The idea is that everyone's plugins should share this same wrapper
|
||||
code, so if you start hacking around in here you're missing the point!
|
||||
|
|
@ -119,7 +119,8 @@
|
|||
#pragma pack (push, 8)
|
||||
#endif
|
||||
|
||||
#include "../../../../../juce_amalgamated.h"
|
||||
//#include "../../../../../juce_amalgamated.h"
|
||||
#include "../../../../../juce.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack (pop)
|
||||
|
|
@ -136,6 +137,10 @@ BEGIN_JUCE_NAMESPACE
|
|||
|
||||
#if JUCE_MAC
|
||||
extern void juce_setCurrentExecutableFileNameFromBundleId (const String& bundleId) throw();
|
||||
extern void* attachComponentToWindowRef (Component* component, void* windowRef);
|
||||
extern void detachComponentFromWindowRef (Component* component, void* nsWindow);
|
||||
extern void setNativeHostWindowSize (void* nsWindow, Component* editorComp, int newWidth, int newHeight);
|
||||
extern void checkWindowVisibility (void* nsWindow, Component* component);
|
||||
#endif
|
||||
|
||||
#if JUCE_LINUX
|
||||
|
|
@ -355,7 +360,6 @@ public:
|
|||
outgoingEventSize = 0;
|
||||
chunkMemoryTime = 0;
|
||||
isProcessing = false;
|
||||
firstResize = true;
|
||||
hasShutdown = false;
|
||||
firstProcessCallback = true;
|
||||
shouldDeleteEditor = false;
|
||||
|
|
@ -438,6 +442,18 @@ public:
|
|||
|
||||
void open()
|
||||
{
|
||||
if (editorComp == 0)
|
||||
{
|
||||
AudioProcessorEditor* const ed = filter->createEditorIfNeeded();
|
||||
|
||||
if (ed != 0)
|
||||
cEffect.flags |= effFlagsHasEditor;
|
||||
else
|
||||
cEffect.flags &= ~effFlagsHasEditor;
|
||||
|
||||
delete ed;
|
||||
}
|
||||
|
||||
startTimer (1000 / 4);
|
||||
}
|
||||
|
||||
|
|
@ -654,7 +670,7 @@ public:
|
|||
{
|
||||
if (outputs[j] == chan)
|
||||
{
|
||||
chan = juce_malloc (sizeof (float) * blockSize * 2);
|
||||
chan = (float*) juce_malloc (sizeof (float) * blockSize * 2);
|
||||
tempChannels.set (i, chan);
|
||||
break;
|
||||
}
|
||||
|
|
@ -1062,6 +1078,11 @@ public:
|
|||
chunkMemory.setSize (0);
|
||||
}
|
||||
|
||||
#if JUCE_MAC
|
||||
if (hostWindow != 0)
|
||||
checkWindowVisibility (hostWindow, editorComp);
|
||||
#endif
|
||||
|
||||
tryMasterIdle();
|
||||
}
|
||||
|
||||
|
|
@ -1117,13 +1138,18 @@ public:
|
|||
|
||||
if (ed != 0)
|
||||
{
|
||||
cEffect.flags |= effFlagsHasEditor;
|
||||
ed->setOpaque (true);
|
||||
ed->setVisible (true);
|
||||
|
||||
editorComp = new EditorCompWrapper (this, ed);
|
||||
}
|
||||
else
|
||||
{
|
||||
cEffect.flags &= ~effFlagsHasEditor;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
shouldDeleteEditor = false;
|
||||
}
|
||||
|
||||
|
|
@ -1144,7 +1170,7 @@ public:
|
|||
if (modalComponent != 0)
|
||||
{
|
||||
modalComponent->exitModalState (0);
|
||||
|
||||
|
||||
if (canDeleteLaterIfModal)
|
||||
{
|
||||
shouldDeleteEditor = true;
|
||||
|
|
@ -1152,6 +1178,11 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
#if JUCE_MAC
|
||||
detachComponentFromWindowRef (editorComp, hostWindow);
|
||||
hostWindow = 0;
|
||||
#endif
|
||||
|
||||
filter->editorBeingDeleted (editorComp->getEditorComp());
|
||||
|
||||
deleteAndZero (editorComp);
|
||||
|
|
@ -1161,7 +1192,7 @@ public:
|
|||
jassert (Component::getCurrentlyModalComponent() == 0);
|
||||
}
|
||||
|
||||
#if JUCE_MAC || JUCE_LINUX
|
||||
#if JUCE_LINUX
|
||||
hostWindow = 0;
|
||||
#endif
|
||||
|
||||
|
|
@ -1196,59 +1227,22 @@ public:
|
|||
|
||||
#if JUCE_WIN32
|
||||
editorComp->addToDesktop (0);
|
||||
|
||||
hostWindow = (HWND) ptr;
|
||||
HWND editorWnd = (HWND) editorComp->getWindowHandle();
|
||||
|
||||
SetParent (editorWnd, hostWindow);
|
||||
|
||||
DWORD val = GetWindowLong (editorWnd, GWL_STYLE);
|
||||
val = (val & ~WS_POPUP) | WS_CHILD;
|
||||
SetWindowLong (editorWnd, GWL_STYLE, val);
|
||||
|
||||
editorComp->setVisible (true);
|
||||
#elif JUCE_LINUX
|
||||
editorComp->addToDesktop (0);
|
||||
|
||||
hostWindow = (Window) ptr;
|
||||
|
||||
Window editorWnd = (Window) editorComp->getWindowHandle();
|
||||
|
||||
XReparentWindow (display, editorWnd, hostWindow, 0, 0);
|
||||
|
||||
editorComp->setVisible (true);
|
||||
#else
|
||||
hostWindow = (WindowRef) ptr;
|
||||
firstResize = true;
|
||||
|
||||
SetAutomaticControlDragTrackingEnabledForWindow (hostWindow, true);
|
||||
|
||||
WindowAttributes attributes;
|
||||
GetWindowAttributes (hostWindow, &attributes);
|
||||
|
||||
HIViewRef parentView = 0;
|
||||
|
||||
if ((attributes & kWindowCompositingAttribute) != 0)
|
||||
{
|
||||
HIViewRef root = HIViewGetRoot (hostWindow);
|
||||
HIViewFindByID (root, kHIViewWindowContentID, &parentView);
|
||||
|
||||
if (parentView == 0)
|
||||
parentView = root;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetRootControl (hostWindow, (ControlRef*) &parentView);
|
||||
|
||||
if (parentView == 0)
|
||||
CreateRootControl (hostWindow, (ControlRef*) &parentView);
|
||||
}
|
||||
|
||||
jassert (parentView != 0); // agh - the host has to provide a compositing window..
|
||||
|
||||
editorComp->setVisible (true);
|
||||
editorComp->addToDesktop (0, (void*) parentView);
|
||||
hostWindow = attachComponentToWindowRef (editorComp, (WindowRef) ptr);
|
||||
#endif
|
||||
editorComp->setVisible (true);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -1292,25 +1286,7 @@ public:
|
|||
{
|
||||
// some hosts don't support the sizeWindow call, so do it manually..
|
||||
#if JUCE_MAC
|
||||
Rect r;
|
||||
GetWindowBounds (hostWindow, kWindowContentRgn, &r);
|
||||
|
||||
if (firstResize)
|
||||
{
|
||||
diffW = (r.right - r.left) - editorComp->getWidth();
|
||||
diffH = (r.bottom - r.top) - editorComp->getHeight();
|
||||
firstResize = false;
|
||||
}
|
||||
|
||||
r.right = r.left + newWidth + diffW;
|
||||
r.bottom = r.top + newHeight + diffH;
|
||||
|
||||
SetWindowBounds (hostWindow, kWindowContentRgn, &r);
|
||||
|
||||
r.bottom -= r.top;
|
||||
r.right -= r.left;
|
||||
r.left = r.top = 0;
|
||||
InvalWindowRect (hostWindow, &r);
|
||||
setNativeHostWindowSize (hostWindow, editorComp, newWidth, newHeight);
|
||||
#elif JUCE_LINUX
|
||||
Window root;
|
||||
int x, y;
|
||||
|
|
@ -1394,7 +1370,6 @@ private:
|
|||
VstEvents* outgoingEvents;
|
||||
int outgoingEventSize;
|
||||
bool isProcessing;
|
||||
bool firstResize;
|
||||
bool hasShutdown;
|
||||
bool firstProcessCallback;
|
||||
int diffW, diffH;
|
||||
|
|
@ -1452,7 +1427,7 @@ private:
|
|||
}
|
||||
|
||||
#if JUCE_MAC
|
||||
WindowRef hostWindow;
|
||||
void* hostWindow;
|
||||
#elif JUCE_LINUX
|
||||
Window hostWindow;
|
||||
#else
|
||||
|
|
@ -1497,8 +1472,6 @@ static AEffect* pluginEntryPoint (audioMasterCallback audioMaster)
|
|||
juce_setCurrentExecutableFileNameFromBundleId (JucePlugin_CFBundleIdentifier);
|
||||
#endif
|
||||
|
||||
MessageManager::getInstance()->setTimeBeforeShowingWaitCursor (0);
|
||||
|
||||
try
|
||||
{
|
||||
if (audioMaster (0, audioMasterVersion, 0, 0, 0, 0) != 0)
|
||||
|
|
|
|||
111
extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.mm
Normal file
111
extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.mm
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
//==============================================================================
|
||||
#include <Cocoa/Cocoa.h>
|
||||
#include "../../../../../juce.h"
|
||||
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
void* attachComponentToWindowRef (Component* comp, void* windowRef)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: windowRef];
|
||||
[hostWindow retain];
|
||||
[hostWindow setCanHide: YES];
|
||||
[hostWindow setReleasedWhenClosed: YES];
|
||||
|
||||
NSView* content = [hostWindow contentView];
|
||||
NSRect f = [content frame];
|
||||
NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin];
|
||||
windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height);
|
||||
comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y);
|
||||
|
||||
#if ! JucePlugin_EditorRequiresKeyboardFocus
|
||||
comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses);
|
||||
#else
|
||||
comp->addToDesktop (ComponentPeer::windowIsTemporary);
|
||||
#endif
|
||||
|
||||
comp->setVisible (true);
|
||||
comp->toFront (false);
|
||||
|
||||
NSView* pluginView = (NSView*) comp->getWindowHandle();
|
||||
NSWindow* pluginWindow = [pluginView window];
|
||||
[pluginWindow setExcludedFromWindowsMenu: YES];
|
||||
|
||||
[hostWindow addChildWindow: pluginWindow
|
||||
ordered: NSWindowAbove];
|
||||
[hostWindow orderFront: nil];
|
||||
[pluginWindow orderFront: nil];
|
||||
return hostWindow;
|
||||
}
|
||||
|
||||
void detachComponentFromWindowRef (Component* comp, void* nsWindow)
|
||||
{
|
||||
NSWindow* hostWindow = (NSWindow*) nsWindow;
|
||||
if (hostWindow != 0)
|
||||
{
|
||||
const ScopedAutoReleasePool pool;
|
||||
|
||||
NSView* pluginView = (NSView*) comp->getWindowHandle();
|
||||
NSWindow* pluginWindow = [pluginView window];
|
||||
|
||||
[hostWindow removeChildWindow: pluginWindow];
|
||||
comp->removeFromDesktop();
|
||||
|
||||
[hostWindow release];
|
||||
}
|
||||
}
|
||||
|
||||
void setNativeHostWindowSize (void* nsWindow, Component* component, int newWidth, int newHeight)
|
||||
{
|
||||
NSWindow* hostWindow = (NSWindow*) nsWindow;
|
||||
if (hostWindow != 0)
|
||||
{
|
||||
ScopedAutoReleasePool pool;
|
||||
|
||||
NSRect f = [hostWindow frame];
|
||||
f.size.width += newWidth - component->getWidth();
|
||||
f.size.height += newHeight - component->getHeight();
|
||||
[hostWindow setFrame: f display: YES];
|
||||
}
|
||||
}
|
||||
|
||||
void checkWindowVisibility (void* nsWindow, Component* comp)
|
||||
{
|
||||
NSWindow* hostWindow = (NSWindow*) nsWindow;
|
||||
comp->setVisible ([hostWindow isVisible]);
|
||||
}
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
|
@ -7,11 +7,11 @@
|
|||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
84078F3E09E6B42E004E7BCD /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84078F3D09E6B42E004E7BCD /* AGL.framework */; };
|
||||
8407902B09E6B5BD004E7BCD /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407902A09E6B5BD004E7BCD /* QuickTime.framework */; };
|
||||
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 */; };
|
||||
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 */; };
|
||||
84FAD61A0C7C3CCB00AF3028 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FAD6190C7C3CCB00AF3028 /* IOKit.framework */; };
|
||||
|
|
@ -22,21 +22,19 @@
|
|||
84FBB8880E06CCE900B52196 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FBB8870E06CCE900B52196 /* AudioUnit.framework */; };
|
||||
84FBB88D0E06CD0100B52196 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FBB88C0E06CD0100B52196 /* WebKit.framework */; };
|
||||
8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; };
|
||||
8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
20286C33FDCF999611CA2CEA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
|
||||
4A9504CAFFE6A41611CA0CBA /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
|
||||
84078F3D09E6B42E004E7BCD /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
|
||||
8407902A09E6B5BD004E7BCD /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
841083D20DB36EA400AB8583 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../common/includes.h; sourceTree = SOURCE_ROOT; };
|
||||
841083D30DB36EA400AB8583 /* MainComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MainComponent.cpp; path = ../common/MainComponent.cpp; sourceTree = SOURCE_ROOT; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
84FAD6190C7C3CCB00AF3028 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
|
||||
|
|
@ -56,9 +54,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */,
|
||||
84F30CED08FEAD7A0087E26C /* CoreAudio.framework in Frameworks */,
|
||||
84078F3E09E6B42E004E7BCD /* AGL.framework in Frameworks */,
|
||||
8407902B09E6B5BD004E7BCD /* QuickTime.framework in Frameworks */,
|
||||
84FAD61A0C7C3CCB00AF3028 /* IOKit.framework in Frameworks */,
|
||||
841136A00D0480DE0054B790 /* OpenGL.framework in Frameworks */,
|
||||
|
|
@ -67,6 +63,7 @@
|
|||
84FBB87B0E06CCC600B52196 /* DiscRecording.framework in Frameworks */,
|
||||
84FBB8880E06CCE900B52196 /* AudioUnit.framework in Frameworks */,
|
||||
84FBB88D0E06CD0100B52196 /* WebKit.framework in Frameworks */,
|
||||
846EC7870EB607050080CCFF /* QTKit.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -120,13 +117,12 @@
|
|||
children = (
|
||||
84FBB8870E06CCE900B52196 /* AudioUnit.framework */,
|
||||
84FBB8720E06CC5D00B52196 /* Cocoa.framework */,
|
||||
20286C33FDCF999611CA2CEA /* Carbon.framework */,
|
||||
4A9504CAFFE6A41611CA0CBA /* CoreServices.framework */,
|
||||
84F30CEC08FEAD7A0087E26C /* CoreAudio.framework */,
|
||||
84FBB8760E06CCB200B52196 /* CoreMIDI.framework */,
|
||||
84FBB87A0E06CCC600B52196 /* DiscRecording.framework */,
|
||||
4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */,
|
||||
84078F3D09E6B42E004E7BCD /* AGL.framework */,
|
||||
846EC7860EB607050080CCFF /* QTKit.framework */,
|
||||
8407902A09E6B5BD004E7BCD /* QuickTime.framework */,
|
||||
84FAD6190C7C3CCB00AF3028 /* IOKit.framework */,
|
||||
8411369F0D0480DE0054B790 /* OpenGL.framework */,
|
||||
|
|
|
|||
|
|
@ -36,21 +36,21 @@ ifeq ($(CONFIG),Release)
|
|||
endif
|
||||
|
||||
OBJECTS := \
|
||||
$(OBJDIR)/ApplicationStartup.o \
|
||||
$(OBJDIR)/BinaryData.o \
|
||||
$(OBJDIR)/juce_LibrarySource.o \
|
||||
$(OBJDIR)/MainDemoWindow.o \
|
||||
$(OBJDIR)/AudioDemo.o \
|
||||
$(OBJDIR)/DragAndDropDemo.o \
|
||||
$(OBJDIR)/FontsAndTextDemo.o \
|
||||
$(OBJDIR)/InterprocessCommsDemo.o \
|
||||
$(OBJDIR)/OpenGLDemo.o \
|
||||
$(OBJDIR)/ApplicationStartup.o \
|
||||
$(OBJDIR)/juce_LibrarySource.o \
|
||||
$(OBJDIR)/BinaryData.o \
|
||||
$(OBJDIR)/PathsAndTransformsDemo.o \
|
||||
$(OBJDIR)/QuickTimeDemo.o \
|
||||
$(OBJDIR)/TableDemo.o \
|
||||
$(OBJDIR)/DragAndDropDemo.o \
|
||||
$(OBJDIR)/ThreadingDemo.o \
|
||||
$(OBJDIR)/TreeViewDemo.o \
|
||||
$(OBJDIR)/OpenGLDemo.o \
|
||||
$(OBJDIR)/WidgetsDemo.o \
|
||||
$(OBJDIR)/TreeViewDemo.o \
|
||||
$(OBJDIR)/QuickTimeDemo.o \
|
||||
$(OBJDIR)/InterprocessCommsDemo.o \
|
||||
$(OBJDIR)/AudioDemo.o \
|
||||
$(OBJDIR)/FontsAndTextDemo.o \
|
||||
$(OBJDIR)/TableDemo.o \
|
||||
|
||||
MKDIR_TYPE := msdos
|
||||
CMD := $(subst \,\\,$(ComSpec)$(COMSPEC))
|
||||
|
|
@ -91,12 +91,12 @@ else
|
|||
-@if exist $(subst /,\,$(OBJDIR)) rmdir /s /q $(subst /,\,$(OBJDIR))
|
||||
endif
|
||||
|
||||
$(OBJDIR)/ApplicationStartup.o: ../../src/ApplicationStartup.cpp
|
||||
$(OBJDIR)/MainDemoWindow.o: ../../src/MainDemoWindow.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/BinaryData.o: ../../src/BinaryData.cpp
|
||||
$(OBJDIR)/ApplicationStartup.o: ../../src/ApplicationStartup.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
|
@ -106,32 +106,7 @@ $(OBJDIR)/juce_LibrarySource.o: ../../src/juce_LibrarySource.cpp
|
|||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/MainDemoWindow.o: ../../src/MainDemoWindow.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/AudioDemo.o: ../../src/demos/AudioDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/DragAndDropDemo.o: ../../src/demos/DragAndDropDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/FontsAndTextDemo.o: ../../src/demos/FontsAndTextDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/InterprocessCommsDemo.o: ../../src/demos/InterprocessCommsDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/OpenGLDemo.o: ../../src/demos/OpenGLDemo.cpp
|
||||
$(OBJDIR)/BinaryData.o: ../../src/BinaryData.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
|
@ -141,12 +116,7 @@ $(OBJDIR)/PathsAndTransformsDemo.o: ../../src/demos/PathsAndTransformsDemo.cpp
|
|||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/QuickTimeDemo.o: ../../src/demos/QuickTimeDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/TableDemo.o: ../../src/demos/TableDemo.cpp
|
||||
$(OBJDIR)/DragAndDropDemo.o: ../../src/demos/DragAndDropDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
|
@ -156,7 +126,7 @@ $(OBJDIR)/ThreadingDemo.o: ../../src/demos/ThreadingDemo.cpp
|
|||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/TreeViewDemo.o: ../../src/demos/TreeViewDemo.cpp
|
||||
$(OBJDIR)/OpenGLDemo.o: ../../src/demos/OpenGLDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
|
@ -166,5 +136,35 @@ $(OBJDIR)/WidgetsDemo.o: ../../src/demos/WidgetsDemo.cpp
|
|||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/TreeViewDemo.o: ../../src/demos/TreeViewDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/QuickTimeDemo.o: ../../src/demos/QuickTimeDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/InterprocessCommsDemo.o: ../../src/demos/InterprocessCommsDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/AudioDemo.o: ../../src/demos/AudioDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/FontsAndTextDemo.o: ../../src/demos/FontsAndTextDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/TableDemo.o: ../../src/demos/TableDemo.cpp
|
||||
-@$(CMD_MKOBJDIR)
|
||||
@echo $(notdir $<)
|
||||
@$(CXX) $(CXXFLAGS) -o $@ -c $<
|
||||
|
||||
-include $(OBJECTS:%.o=%.d)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,24 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>jucedemo</string>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.myCarbonNibApp</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.rawmaterialsoftware.${PRODUCT_NAME:identifier}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>0.1</string>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
<true/>
|
||||
<string>1.0</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -3,231 +3,180 @@
|
|||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 42;
|
||||
objectVersion = 45;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
8417EE7A0A6E7EB90058E04E /* TableDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8417EE790A6E7EB90058E04E /* TableDemo.cpp */; };
|
||||
842A97B8081060FB0059DBCC /* DragAndDropDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842A97B6081060FB0059DBCC /* DragAndDropDemo.cpp */; };
|
||||
842A97B9081060FB0059DBCC /* OpenGLDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 842A97B7081060FB0059DBCC /* OpenGLDemo.cpp */; };
|
||||
846929270A49DDE100314975 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 846929260A49DDE100314975 /* juce.xcconfig */; };
|
||||
846C10970DE32E6E00E8CCE8 /* juce_AppConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 846C10960DE32E6D00E8CCE8 /* juce_AppConfig.h */; };
|
||||
846C10B20DE32EB500E8CCE8 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 846C10B10DE32EB500E8CCE8 /* juce_LibrarySource.mm */; };
|
||||
8480BC1C0DE0BB8200478E44 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC0E0DE0BB8200478E44 /* AGL.framework */; };
|
||||
8480BC1D0DE0BB8200478E44 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC0F0DE0BB8200478E44 /* AudioUnit.framework */; };
|
||||
8480BC1E0DE0BB8200478E44 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC100DE0BB8200478E44 /* IOKit.framework */; };
|
||||
8480BC1F0DE0BB8200478E44 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC110DE0BB8200478E44 /* Cocoa.framework */; };
|
||||
8480BC200DE0BB8200478E44 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC120DE0BB8200478E44 /* CoreAudio.framework */; };
|
||||
8480BC210DE0BB8200478E44 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC130DE0BB8200478E44 /* CoreFoundation.framework */; };
|
||||
8480BC220DE0BB8200478E44 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC140DE0BB8200478E44 /* CoreMIDI.framework */; };
|
||||
8480BC230DE0BB8200478E44 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC150DE0BB8200478E44 /* DiscRecording.framework */; };
|
||||
8480BC240DE0BB8200478E44 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC160DE0BB8200478E44 /* OpenGL.framework */; };
|
||||
8480BC250DE0BB8200478E44 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC170DE0BB8200478E44 /* QuickTime.framework */; };
|
||||
8480BC260DE0BB8200478E44 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC180DE0BB8200478E44 /* WebKit.framework */; };
|
||||
8480BC270DE0BB8200478E44 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC190DE0BB8200478E44 /* Carbon.framework */; };
|
||||
8480BC280DE0BB8200478E44 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC1A0DE0BB8200478E44 /* CoreServices.framework */; };
|
||||
8480BC290DE0BB8200478E44 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8480BC1B0DE0BB8200478E44 /* ApplicationServices.framework */; };
|
||||
849E1BF706C15C330002E024 /* BinaryData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 849E1BF506C15C330002E024 /* BinaryData.cpp */; };
|
||||
849E1BF806C15C330002E024 /* BinaryData.h in Headers */ = {isa = PBXBuildFile; fileRef = 849E1BF606C15C330002E024 /* BinaryData.h */; };
|
||||
84A06BA809CAD661006A43BD /* InterprocessCommsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A06BA709CAD661006A43BD /* InterprocessCommsDemo.cpp */; };
|
||||
84C49E5506C0EE8C0066071B /* ApplicationStartup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4A06C0EE8C0066071B /* ApplicationStartup.cpp */; };
|
||||
84C49E5606C0EE8C0066071B /* AudioDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4C06C0EE8C0066071B /* AudioDemo.cpp */; };
|
||||
84C49E5706C0EE8C0066071B /* FontsAndTextDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4D06C0EE8C0066071B /* FontsAndTextDemo.cpp */; };
|
||||
84C49E5806C0EE8C0066071B /* PathsAndTransformsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4E06C0EE8C0066071B /* PathsAndTransformsDemo.cpp */; };
|
||||
84C49E5906C0EE8C0066071B /* ThreadingDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E4F06C0EE8C0066071B /* ThreadingDemo.cpp */; };
|
||||
84C49E5A06C0EE8C0066071B /* TreeViewDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E5006C0EE8C0066071B /* TreeViewDemo.cpp */; };
|
||||
84C49E5B06C0EE8C0066071B /* WidgetsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E5106C0EE8C0066071B /* WidgetsDemo.cpp */; };
|
||||
84C49E5C06C0EE8C0066071B /* jucedemo_headers.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C49E5206C0EE8C0066071B /* jucedemo_headers.h */; };
|
||||
84C49E5D06C0EE8C0066071B /* MainDemoWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C49E5306C0EE8C0066071B /* MainDemoWindow.cpp */; };
|
||||
84C49E5E06C0EE8C0066071B /* MainDemoWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C49E5406C0EE8C0066071B /* MainDemoWindow.h */; };
|
||||
84F8DB0B099CA8DD00E911ED /* QuickTimeDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F8DB0A099CA8DD00E911ED /* QuickTimeDemo.cpp */; };
|
||||
8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; };
|
||||
841FE43C0E8ABDD4003C3263 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE4360E8ABDD4003C3263 /* CoreAudio.framework */; };
|
||||
841FE43D0E8ABDD4003C3263 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE4370E8ABDD4003C3263 /* CoreMIDI.framework */; };
|
||||
841FE43E0E8ABDD4003C3263 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE4380E8ABDD4003C3263 /* DiscRecording.framework */; };
|
||||
841FE43F0E8ABDD4003C3263 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE4390E8ABDD4003C3263 /* IOKit.framework */; };
|
||||
841FE4400E8ABDD4003C3263 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE43A0E8ABDD4003C3263 /* OpenGL.framework */; };
|
||||
841FE4410E8ABDD4003C3263 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FE43B0E8ABDD4003C3263 /* WebKit.framework */; };
|
||||
8450577A0EB52CE500029DFF /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 845057790EB52CE500029DFF /* QuickTime.framework */; };
|
||||
847F4D900E8AC35C00F64426 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 847F4D8F0E8AC35C00F64426 /* QTKit.framework */; };
|
||||
847F4EA50E8BA9C300F64426 /* AudioDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9A0E8BA9C300F64426 /* AudioDemo.cpp */; };
|
||||
847F4EA60E8BA9C300F64426 /* DragAndDropDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9B0E8BA9C300F64426 /* DragAndDropDemo.cpp */; };
|
||||
847F4EA70E8BA9C300F64426 /* FontsAndTextDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9C0E8BA9C300F64426 /* FontsAndTextDemo.cpp */; };
|
||||
847F4EA80E8BA9C300F64426 /* InterprocessCommsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9D0E8BA9C300F64426 /* InterprocessCommsDemo.cpp */; };
|
||||
847F4EA90E8BA9C300F64426 /* OpenGLDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9E0E8BA9C300F64426 /* OpenGLDemo.cpp */; };
|
||||
847F4EAA0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4E9F0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp */; };
|
||||
847F4EAB0E8BA9C300F64426 /* QuickTimeDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA00E8BA9C300F64426 /* QuickTimeDemo.cpp */; };
|
||||
847F4EAC0E8BA9C300F64426 /* TableDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA10E8BA9C300F64426 /* TableDemo.cpp */; };
|
||||
847F4EAD0E8BA9C300F64426 /* ThreadingDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA20E8BA9C300F64426 /* ThreadingDemo.cpp */; };
|
||||
847F4EAE0E8BA9C300F64426 /* TreeViewDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA30E8BA9C300F64426 /* TreeViewDemo.cpp */; };
|
||||
847F4EAF0E8BA9C300F64426 /* WidgetsDemo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EA40E8BA9C300F64426 /* WidgetsDemo.cpp */; };
|
||||
847F4EB80E8BA9DD00F64426 /* ApplicationStartup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EB00E8BA9DD00F64426 /* ApplicationStartup.cpp */; };
|
||||
847F4EB90E8BA9DD00F64426 /* BinaryData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EB10E8BA9DD00F64426 /* BinaryData.cpp */; };
|
||||
847F4EBA0E8BA9DD00F64426 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EB40E8BA9DD00F64426 /* juce_LibrarySource.mm */; };
|
||||
847F4EBB0E8BA9DD00F64426 /* MainDemoWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 847F4EB60E8BA9DD00F64426 /* MainDemoWindow.cpp */; };
|
||||
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
8417EE790A6E7EB90058E04E /* TableDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = TableDemo.cpp; sourceTree = "<group>"; };
|
||||
842A97B6081060FB0059DBCC /* DragAndDropDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DragAndDropDemo.cpp; sourceTree = "<group>"; };
|
||||
842A97B7081060FB0059DBCC /* OpenGLDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGLDemo.cpp; sourceTree = "<group>"; };
|
||||
846929260A49DDE100314975 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; };
|
||||
846C10960DE32E6D00E8CCE8 /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; };
|
||||
846C10B10DE32EB500E8CCE8 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; };
|
||||
8480BC0E0DE0BB8200478E44 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
|
||||
8480BC0F0DE0BB8200478E44 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
||||
8480BC100DE0BB8200478E44 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
|
||||
8480BC110DE0BB8200478E44 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
||||
8480BC120DE0BB8200478E44 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
|
||||
8480BC130DE0BB8200478E44 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
|
||||
8480BC140DE0BB8200478E44 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; };
|
||||
8480BC150DE0BB8200478E44 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; };
|
||||
8480BC160DE0BB8200478E44 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
|
||||
8480BC170DE0BB8200478E44 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
8480BC180DE0BB8200478E44 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
|
||||
8480BC190DE0BB8200478E44 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
8480BC1A0DE0BB8200478E44 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; };
|
||||
8480BC1B0DE0BB8200478E44 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
|
||||
849E1BF506C15C330002E024 /* BinaryData.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../src/BinaryData.cpp; sourceTree = SOURCE_ROOT; };
|
||||
849E1BF606C15C330002E024 /* BinaryData.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../src/BinaryData.h; sourceTree = SOURCE_ROOT; };
|
||||
84A06BA709CAD661006A43BD /* InterprocessCommsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = InterprocessCommsDemo.cpp; sourceTree = "<group>"; };
|
||||
84C49E4A06C0EE8C0066071B /* ApplicationStartup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ApplicationStartup.cpp; path = ../../src/ApplicationStartup.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84C49E4C06C0EE8C0066071B /* AudioDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AudioDemo.cpp; sourceTree = "<group>"; };
|
||||
84C49E4D06C0EE8C0066071B /* FontsAndTextDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FontsAndTextDemo.cpp; sourceTree = "<group>"; };
|
||||
84C49E4E06C0EE8C0066071B /* PathsAndTransformsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PathsAndTransformsDemo.cpp; sourceTree = "<group>"; };
|
||||
84C49E4F06C0EE8C0066071B /* ThreadingDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadingDemo.cpp; sourceTree = "<group>"; };
|
||||
84C49E5006C0EE8C0066071B /* TreeViewDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = TreeViewDemo.cpp; sourceTree = "<group>"; };
|
||||
84C49E5106C0EE8C0066071B /* WidgetsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = WidgetsDemo.cpp; sourceTree = "<group>"; };
|
||||
84C49E5206C0EE8C0066071B /* jucedemo_headers.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jucedemo_headers.h; path = ../../src/jucedemo_headers.h; sourceTree = SOURCE_ROOT; };
|
||||
84C49E5306C0EE8C0066071B /* MainDemoWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MainDemoWindow.cpp; path = ../../src/MainDemoWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84C49E5406C0EE8C0066071B /* MainDemoWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MainDemoWindow.h; path = ../../src/MainDemoWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
84F8DB0A099CA8DD00E911ED /* QuickTimeDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = QuickTimeDemo.cpp; sourceTree = "<group>"; };
|
||||
8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||
8D0C4E970486CD37000505A6 /* jucedemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = jucedemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
||||
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
|
||||
841FE4360E8ABDD4003C3263 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
|
||||
841FE4370E8ABDD4003C3263 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; };
|
||||
841FE4380E8ABDD4003C3263 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; };
|
||||
841FE4390E8ABDD4003C3263 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
|
||||
841FE43A0E8ABDD4003C3263 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
|
||||
841FE43B0E8ABDD4003C3263 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
|
||||
845057790EB52CE500029DFF /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
847F4D8F0E8AC35C00F64426 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; };
|
||||
847F4E9A0E8BA9C300F64426 /* AudioDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioDemo.cpp; path = ../../src/demos/AudioDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4E9B0E8BA9C300F64426 /* DragAndDropDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DragAndDropDemo.cpp; path = ../../src/demos/DragAndDropDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4E9C0E8BA9C300F64426 /* FontsAndTextDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FontsAndTextDemo.cpp; path = ../../src/demos/FontsAndTextDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4E9D0E8BA9C300F64426 /* InterprocessCommsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InterprocessCommsDemo.cpp; path = ../../src/demos/InterprocessCommsDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4E9E0E8BA9C300F64426 /* OpenGLDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OpenGLDemo.cpp; path = ../../src/demos/OpenGLDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4E9F0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PathsAndTransformsDemo.cpp; path = ../../src/demos/PathsAndTransformsDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4EA00E8BA9C300F64426 /* QuickTimeDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = QuickTimeDemo.cpp; path = ../../src/demos/QuickTimeDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4EA10E8BA9C300F64426 /* TableDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TableDemo.cpp; path = ../../src/demos/TableDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4EA20E8BA9C300F64426 /* ThreadingDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadingDemo.cpp; path = ../../src/demos/ThreadingDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4EA30E8BA9C300F64426 /* TreeViewDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TreeViewDemo.cpp; path = ../../src/demos/TreeViewDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4EA40E8BA9C300F64426 /* WidgetsDemo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WidgetsDemo.cpp; path = ../../src/demos/WidgetsDemo.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4EB00E8BA9DD00F64426 /* ApplicationStartup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ApplicationStartup.cpp; path = ../../src/ApplicationStartup.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4EB10E8BA9DD00F64426 /* BinaryData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../src/BinaryData.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4EB20E8BA9DD00F64426 /* BinaryData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../src/BinaryData.h; sourceTree = SOURCE_ROOT; };
|
||||
847F4EB30E8BA9DD00F64426 /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; };
|
||||
847F4EB40E8BA9DD00F64426 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; };
|
||||
847F4EB50E8BA9DD00F64426 /* jucedemo_headers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jucedemo_headers.h; path = ../../src/jucedemo_headers.h; sourceTree = SOURCE_ROOT; };
|
||||
847F4EB60E8BA9DD00F64426 /* MainDemoWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MainDemoWindow.cpp; path = ../../src/MainDemoWindow.cpp; sourceTree = SOURCE_ROOT; };
|
||||
847F4EB70E8BA9DD00F64426 /* MainDemoWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainDemoWindow.h; path = ../../src/MainDemoWindow.h; sourceTree = SOURCE_ROOT; };
|
||||
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
8D1107320486CEB800E47090 /* jucedemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = jucedemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
8D0C4E910486CD37000505A6 /* Frameworks */ = {
|
||||
8D11072E0486CEB800E47090 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8480BC1C0DE0BB8200478E44 /* AGL.framework in Frameworks */,
|
||||
8480BC1D0DE0BB8200478E44 /* AudioUnit.framework in Frameworks */,
|
||||
8480BC1E0DE0BB8200478E44 /* IOKit.framework in Frameworks */,
|
||||
8480BC1F0DE0BB8200478E44 /* Cocoa.framework in Frameworks */,
|
||||
8480BC200DE0BB8200478E44 /* CoreAudio.framework in Frameworks */,
|
||||
8480BC210DE0BB8200478E44 /* CoreFoundation.framework in Frameworks */,
|
||||
8480BC220DE0BB8200478E44 /* CoreMIDI.framework in Frameworks */,
|
||||
8480BC230DE0BB8200478E44 /* DiscRecording.framework in Frameworks */,
|
||||
8480BC240DE0BB8200478E44 /* OpenGL.framework in Frameworks */,
|
||||
8480BC250DE0BB8200478E44 /* QuickTime.framework in Frameworks */,
|
||||
8480BC260DE0BB8200478E44 /* WebKit.framework in Frameworks */,
|
||||
8480BC270DE0BB8200478E44 /* Carbon.framework in Frameworks */,
|
||||
8480BC280DE0BB8200478E44 /* CoreServices.framework in Frameworks */,
|
||||
8480BC290DE0BB8200478E44 /* ApplicationServices.framework in Frameworks */,
|
||||
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
|
||||
841FE43C0E8ABDD4003C3263 /* CoreAudio.framework in Frameworks */,
|
||||
841FE43D0E8ABDD4003C3263 /* CoreMIDI.framework in Frameworks */,
|
||||
841FE43E0E8ABDD4003C3263 /* DiscRecording.framework in Frameworks */,
|
||||
841FE43F0E8ABDD4003C3263 /* IOKit.framework in Frameworks */,
|
||||
841FE4400E8ABDD4003C3263 /* OpenGL.framework in Frameworks */,
|
||||
841FE4410E8ABDD4003C3263 /* WebKit.framework in Frameworks */,
|
||||
847F4D900E8AC35C00F64426 /* QTKit.framework in Frameworks */,
|
||||
8450577A0EB52CE500029DFF /* QuickTime.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
195DF8CFFE9D517E11CA2CBB /* Products */ = {
|
||||
080E96DDFE201D6D7F000001 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8D0C4E970486CD37000505A6 /* jucedemo.app */,
|
||||
847F4EB00E8BA9DD00F64426 /* ApplicationStartup.cpp */,
|
||||
847F4EB10E8BA9DD00F64426 /* BinaryData.cpp */,
|
||||
847F4EB20E8BA9DD00F64426 /* BinaryData.h */,
|
||||
847F4EB30E8BA9DD00F64426 /* juce_AppConfig.h */,
|
||||
847F4EB40E8BA9DD00F64426 /* juce_LibrarySource.mm */,
|
||||
847F4EB50E8BA9DD00F64426 /* jucedemo_headers.h */,
|
||||
847F4EB60E8BA9DD00F64426 /* MainDemoWindow.cpp */,
|
||||
847F4EB70E8BA9DD00F64426 /* MainDemoWindow.h */,
|
||||
847F4D8A0E8AC27A00F64426 /* demos */,
|
||||
);
|
||||
name = Source;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
19C28FACFE9D520D11CA2CBB /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8D1107320486CEB800E47090 /* jucedemo.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
20286C29FDCF999611CA2CEA /* jucedemo */ = {
|
||||
29B97314FDCFA39411CA2CEA /* jucedemo */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
20286C2AFDCF999611CA2CEA /* Sources */,
|
||||
841084950DB3759400AB8583 /* Build settings */,
|
||||
20286C2CFDCF999611CA2CEA /* Resources */,
|
||||
20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */,
|
||||
195DF8CFFE9D517E11CA2CBB /* Products */,
|
||||
080E96DDFE201D6D7F000001 /* Source */,
|
||||
29B97317FDCFA39411CA2CEA /* Resources */,
|
||||
29B97323FDCFA39411CA2CEA /* Frameworks */,
|
||||
19C28FACFE9D520D11CA2CBB /* Products */,
|
||||
);
|
||||
name = jucedemo;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
20286C2AFDCF999611CA2CEA /* Sources */ = {
|
||||
29B97317FDCFA39411CA2CEA /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
84C49E4B06C0EE8C0066071B /* demos */,
|
||||
84C49E4A06C0EE8C0066071B /* ApplicationStartup.cpp */,
|
||||
84C49E5306C0EE8C0066071B /* MainDemoWindow.cpp */,
|
||||
84C49E5406C0EE8C0066071B /* MainDemoWindow.h */,
|
||||
849E1BF506C15C330002E024 /* BinaryData.cpp */,
|
||||
849E1BF606C15C330002E024 /* BinaryData.h */,
|
||||
84C49E5206C0EE8C0066071B /* jucedemo_headers.h */,
|
||||
846C10960DE32E6D00E8CCE8 /* juce_AppConfig.h */,
|
||||
846C10B10DE32EB500E8CCE8 /* juce_LibrarySource.mm */,
|
||||
);
|
||||
name = Sources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
20286C2CFDCF999611CA2CEA /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8D0C4E960486CD37000505A6 /* Info.plist */,
|
||||
0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */,
|
||||
8D1107310486CEB800E47090 /* Info.plist */,
|
||||
);
|
||||
name = Resources;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
|
||||
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8480BC0E0DE0BB8200478E44 /* AGL.framework */,
|
||||
8480BC1B0DE0BB8200478E44 /* ApplicationServices.framework */,
|
||||
8480BC0F0DE0BB8200478E44 /* AudioUnit.framework */,
|
||||
8480BC190DE0BB8200478E44 /* Carbon.framework */,
|
||||
8480BC110DE0BB8200478E44 /* Cocoa.framework */,
|
||||
8480BC120DE0BB8200478E44 /* CoreAudio.framework */,
|
||||
8480BC130DE0BB8200478E44 /* CoreFoundation.framework */,
|
||||
8480BC140DE0BB8200478E44 /* CoreMIDI.framework */,
|
||||
8480BC1A0DE0BB8200478E44 /* CoreServices.framework */,
|
||||
8480BC150DE0BB8200478E44 /* DiscRecording.framework */,
|
||||
8480BC100DE0BB8200478E44 /* IOKit.framework */,
|
||||
8480BC160DE0BB8200478E44 /* OpenGL.framework */,
|
||||
8480BC170DE0BB8200478E44 /* QuickTime.framework */,
|
||||
8480BC180DE0BB8200478E44 /* WebKit.framework */,
|
||||
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
||||
841FE4360E8ABDD4003C3263 /* CoreAudio.framework */,
|
||||
841FE4370E8ABDD4003C3263 /* CoreMIDI.framework */,
|
||||
841FE4380E8ABDD4003C3263 /* DiscRecording.framework */,
|
||||
841FE4390E8ABDD4003C3263 /* IOKit.framework */,
|
||||
841FE43A0E8ABDD4003C3263 /* OpenGL.framework */,
|
||||
847F4D8F0E8AC35C00F64426 /* QTKit.framework */,
|
||||
845057790EB52CE500029DFF /* QuickTime.framework */,
|
||||
841FE43B0E8ABDD4003C3263 /* WebKit.framework */,
|
||||
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
|
||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
||||
);
|
||||
name = "External Frameworks and Libraries";
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
841084950DB3759400AB8583 /* Build settings */ = {
|
||||
847F4D8A0E8AC27A00F64426 /* demos */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
846929260A49DDE100314975 /* juce.xcconfig */,
|
||||
);
|
||||
name = "Build settings";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
84C49E4B06C0EE8C0066071B /* demos */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
842A97B6081060FB0059DBCC /* DragAndDropDemo.cpp */,
|
||||
842A97B7081060FB0059DBCC /* OpenGLDemo.cpp */,
|
||||
84C49E4C06C0EE8C0066071B /* AudioDemo.cpp */,
|
||||
84C49E4D06C0EE8C0066071B /* FontsAndTextDemo.cpp */,
|
||||
84C49E4E06C0EE8C0066071B /* PathsAndTransformsDemo.cpp */,
|
||||
84F8DB0A099CA8DD00E911ED /* QuickTimeDemo.cpp */,
|
||||
8417EE790A6E7EB90058E04E /* TableDemo.cpp */,
|
||||
84C49E4F06C0EE8C0066071B /* ThreadingDemo.cpp */,
|
||||
84C49E5006C0EE8C0066071B /* TreeViewDemo.cpp */,
|
||||
84C49E5106C0EE8C0066071B /* WidgetsDemo.cpp */,
|
||||
84A06BA709CAD661006A43BD /* InterprocessCommsDemo.cpp */,
|
||||
847F4E9A0E8BA9C300F64426 /* AudioDemo.cpp */,
|
||||
847F4E9B0E8BA9C300F64426 /* DragAndDropDemo.cpp */,
|
||||
847F4E9C0E8BA9C300F64426 /* FontsAndTextDemo.cpp */,
|
||||
847F4E9D0E8BA9C300F64426 /* InterprocessCommsDemo.cpp */,
|
||||
847F4E9E0E8BA9C300F64426 /* OpenGLDemo.cpp */,
|
||||
847F4E9F0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp */,
|
||||
847F4EA00E8BA9C300F64426 /* QuickTimeDemo.cpp */,
|
||||
847F4EA10E8BA9C300F64426 /* TableDemo.cpp */,
|
||||
847F4EA20E8BA9C300F64426 /* ThreadingDemo.cpp */,
|
||||
847F4EA30E8BA9C300F64426 /* TreeViewDemo.cpp */,
|
||||
847F4EA40E8BA9C300F64426 /* WidgetsDemo.cpp */,
|
||||
);
|
||||
name = demos;
|
||||
path = ../../src/demos;
|
||||
sourceTree = SOURCE_ROOT;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
8D0C4E8A0486CD37000505A6 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
84C49E5C06C0EE8C0066071B /* jucedemo_headers.h in Headers */,
|
||||
84C49E5E06C0EE8C0066071B /* MainDemoWindow.h in Headers */,
|
||||
849E1BF806C15C330002E024 /* BinaryData.h in Headers */,
|
||||
846C10970DE32E6E00E8CCE8 /* juce_AppConfig.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
8D0C4E890486CD37000505A6 /* jucedemo */ = {
|
||||
8D1107260486CEB800E47090 /* jucedemo */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 84CFBCCB085F14F000C52F85 /* Build configuration list for PBXNativeTarget "jucedemo" */;
|
||||
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "jucedemo" */;
|
||||
buildPhases = (
|
||||
8D0C4E8A0486CD37000505A6 /* Headers */,
|
||||
8D0C4E8C0486CD37000505A6 /* Resources */,
|
||||
8D0C4E8F0486CD37000505A6 /* Sources */,
|
||||
8D0C4E910486CD37000505A6 /* Frameworks */,
|
||||
8D0C4E940486CD37000505A6 /* Rez */,
|
||||
8D1107290486CEB800E47090 /* Resources */,
|
||||
8D11072C0486CEB800E47090 /* Sources */,
|
||||
8D11072E0486CEB800E47090 /* Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
|
|
@ -236,157 +185,137 @@
|
|||
name = jucedemo;
|
||||
productInstallPath = "$(HOME)/Applications";
|
||||
productName = jucedemo;
|
||||
productReference = 8D0C4E970486CD37000505A6 /* jucedemo.app */;
|
||||
productReference = 8D1107320486CEB800E47090 /* jucedemo.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
20286C28FDCF999611CA2CEA /* Project object */ = {
|
||||
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
buildConfigurationList = 84CFBCCF085F14F000C52F85 /* Build configuration list for PBXProject "jucedemo" */;
|
||||
compatibilityVersion = "Xcode 2.4";
|
||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "jucedemo" */;
|
||||
compatibilityVersion = "Xcode 3.1";
|
||||
hasScannedForEncodings = 1;
|
||||
mainGroup = 20286C29FDCF999611CA2CEA /* jucedemo */;
|
||||
mainGroup = 29B97314FDCFA39411CA2CEA /* jucedemo */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
8D0C4E890486CD37000505A6 /* jucedemo */,
|
||||
8D1107260486CEB800E47090 /* jucedemo */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
8D0C4E8C0486CD37000505A6 /* Resources */ = {
|
||||
8D1107290486CEB800E47090 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */,
|
||||
846929270A49DDE100314975 /* juce.xcconfig in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXRezBuildPhase section */
|
||||
8D0C4E940486CD37000505A6 /* Rez */ = {
|
||||
isa = PBXRezBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXRezBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
8D0C4E8F0486CD37000505A6 /* Sources */ = {
|
||||
8D11072C0486CEB800E47090 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
84C49E5506C0EE8C0066071B /* ApplicationStartup.cpp in Sources */,
|
||||
84C49E5606C0EE8C0066071B /* AudioDemo.cpp in Sources */,
|
||||
84C49E5706C0EE8C0066071B /* FontsAndTextDemo.cpp in Sources */,
|
||||
84C49E5806C0EE8C0066071B /* PathsAndTransformsDemo.cpp in Sources */,
|
||||
84C49E5906C0EE8C0066071B /* ThreadingDemo.cpp in Sources */,
|
||||
84C49E5A06C0EE8C0066071B /* TreeViewDemo.cpp in Sources */,
|
||||
84C49E5B06C0EE8C0066071B /* WidgetsDemo.cpp in Sources */,
|
||||
84C49E5D06C0EE8C0066071B /* MainDemoWindow.cpp in Sources */,
|
||||
849E1BF706C15C330002E024 /* BinaryData.cpp in Sources */,
|
||||
842A97B8081060FB0059DBCC /* DragAndDropDemo.cpp in Sources */,
|
||||
842A97B9081060FB0059DBCC /* OpenGLDemo.cpp in Sources */,
|
||||
84F8DB0B099CA8DD00E911ED /* QuickTimeDemo.cpp in Sources */,
|
||||
84A06BA809CAD661006A43BD /* InterprocessCommsDemo.cpp in Sources */,
|
||||
8417EE7A0A6E7EB90058E04E /* TableDemo.cpp in Sources */,
|
||||
846C10B20DE32EB500E8CCE8 /* juce_LibrarySource.mm in Sources */,
|
||||
847F4EA50E8BA9C300F64426 /* AudioDemo.cpp in Sources */,
|
||||
847F4EA60E8BA9C300F64426 /* DragAndDropDemo.cpp in Sources */,
|
||||
847F4EA70E8BA9C300F64426 /* FontsAndTextDemo.cpp in Sources */,
|
||||
847F4EA80E8BA9C300F64426 /* InterprocessCommsDemo.cpp in Sources */,
|
||||
847F4EA90E8BA9C300F64426 /* OpenGLDemo.cpp in Sources */,
|
||||
847F4EAA0E8BA9C300F64426 /* PathsAndTransformsDemo.cpp in Sources */,
|
||||
847F4EAB0E8BA9C300F64426 /* QuickTimeDemo.cpp in Sources */,
|
||||
847F4EAC0E8BA9C300F64426 /* TableDemo.cpp in Sources */,
|
||||
847F4EAD0E8BA9C300F64426 /* ThreadingDemo.cpp in Sources */,
|
||||
847F4EAE0E8BA9C300F64426 /* TreeViewDemo.cpp in Sources */,
|
||||
847F4EAF0E8BA9C300F64426 /* WidgetsDemo.cpp in Sources */,
|
||||
847F4EB80E8BA9DD00F64426 /* ApplicationStartup.cpp in Sources */,
|
||||
847F4EB90E8BA9DD00F64426 /* BinaryData.cpp in Sources */,
|
||||
847F4EBA0E8BA9DD00F64426 /* juce_LibrarySource.mm in Sources */,
|
||||
847F4EBB0E8BA9DD00F64426 /* MainDemoWindow.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
0867D6ABFE840B52C02AAC07 /* English */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
84CFBCCC085F14F000C52F85 /* Debug */ = {
|
||||
C01FCF4B08A954540054247B /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"_DEBUG=1",
|
||||
"DEBUG=1",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = "$(SYSTEM_DEVELOPER_DIR)/Headers/FlatCarbon";
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_FIX_AND_CONTINUE = YES;
|
||||
GCC_MODEL_TUNING = G5;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
INFOPLIST_FILE = Info.plist;
|
||||
LIBRARY_SEARCH_PATHS = ../../../../bin;
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
PRODUCT_NAME = jucedemo;
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
84CFBCCD085F14F000C52F85 /* Release */ = {
|
||||
C01FCF4C08A954540054247B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"_NDEBUG=1",
|
||||
"NDEBUG=1",
|
||||
);
|
||||
HEADER_SEARCH_PATHS = "$(SYSTEM_DEVELOPER_DIR)/Headers/FlatCarbon";
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
GCC_MODEL_TUNING = G5;
|
||||
INFOPLIST_FILE = Info.plist;
|
||||
ONLY_LINK_ESSENTIAL_SYMBOLS = YES;
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
PRODUCT_NAME = jucedemo;
|
||||
WRAPPER_EXTENSION = app;
|
||||
ZERO_LINK = NO;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
84CFBCD0085F14F000C52F85 /* Debug */ = {
|
||||
C01FCF4F08A954540054247B /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 846929260A49DDE100314975 /* juce.xcconfig */;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||
GCC_C_LANGUAGE_STANDARD = c99;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PREBINDING = NO;
|
||||
SDKROOT = macosx10.4;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
84CFBCD1085F14F000C52F85 /* Release */ = {
|
||||
C01FCF5008A954540054247B /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 846929260A49DDE100314975 /* juce.xcconfig */;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
||||
GCC_C_LANGUAGE_STANDARD = c99;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
PREBINDING = NO;
|
||||
SDKROOT = macosx10.4;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
84CFBCCB085F14F000C52F85 /* Build configuration list for PBXNativeTarget "jucedemo" */ = {
|
||||
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "jucedemo" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
84CFBCCC085F14F000C52F85 /* Debug */,
|
||||
84CFBCCD085F14F000C52F85 /* Release */,
|
||||
C01FCF4B08A954540054247B /* Debug */,
|
||||
C01FCF4C08A954540054247B /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
84CFBCCF085F14F000C52F85 /* Build configuration list for PBXProject "jucedemo" */ = {
|
||||
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "jucedemo" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
84CFBCD0085F14F000C52F85 /* Debug */,
|
||||
84CFBCD1085F14F000C52F85 /* Release */,
|
||||
C01FCF4F08A954540054247B /* Debug */,
|
||||
C01FCF5008A954540054247B /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 20286C28FDCF999611CA2CEA /* Project object */;
|
||||
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jucedemo", "jucedemo.vcproj", "{050D65C2-17C4-4EE1-ABCE-BEA9DA83D77A}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{AE232C11-D91C-4CA1-B24E-8B11A52EFF26} = {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JUCE", "..\..\..\..\build\win32\vc8\JUCE.vcproj", "{AE232C11-D91C-4CA1-B24E-8B11A52EFF26}"
|
||||
EndProject
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -5,57 +5,57 @@
|
|||
|
||||
namespace BinaryData
|
||||
{
|
||||
extern const char* audiodemo_cpp;
|
||||
const int audiodemo_cppSize = 23584;
|
||||
extern const char* pathsandtransformsdemo_cpp;
|
||||
const int pathsandtransformsdemo_cppSize = 14231;
|
||||
|
||||
extern const char* cello_wav;
|
||||
const int cello_wavSize = 46348;
|
||||
extern const char* opengldemo_cpp;
|
||||
const int opengldemo_cppSize = 9575;
|
||||
|
||||
extern const char* demo_table_data_xml;
|
||||
const int demo_table_data_xmlSize = 5239;
|
||||
|
||||
extern const char* tabledemo_cpp;
|
||||
const int tabledemo_cppSize = 12381;
|
||||
|
||||
extern const char* cello_wav;
|
||||
const int cello_wavSize = 46348;
|
||||
|
||||
extern const char* draganddropdemo_cpp;
|
||||
const int draganddropdemo_cppSize = 7937;
|
||||
|
||||
extern const char* fontsandtextdemo_cpp;
|
||||
const int fontsandtextdemo_cppSize = 9064;
|
||||
|
||||
extern const char* icons_zip;
|
||||
const int icons_zipSize = 83876;
|
||||
|
||||
extern const char* interprocesscommsdemo_cpp;
|
||||
const int interprocesscommsdemo_cppSize = 12631;
|
||||
|
||||
extern const char* juce_png;
|
||||
const int juce_pngSize = 15290;
|
||||
|
||||
extern const char* opengldemo_cpp;
|
||||
const int opengldemo_cppSize = 9667;
|
||||
|
||||
extern const char* pathsandtransformsdemo_cpp;
|
||||
const int pathsandtransformsdemo_cppSize = 14231;
|
||||
|
||||
extern const char* quicktimedemo_cpp;
|
||||
const int quicktimedemo_cppSize = 4576;
|
||||
|
||||
extern const char* readme__what_this_directory_is_for_txt;
|
||||
const int readme__what_this_directory_is_for_txtSize = 259;
|
||||
|
||||
extern const char* tabledemo_cpp;
|
||||
const int tabledemo_cppSize = 12381;
|
||||
|
||||
extern const char* threadingdemo_cpp;
|
||||
const int threadingdemo_cppSize = 10047;
|
||||
extern const char* treeviewdemo_cpp;
|
||||
const int treeviewdemo_cppSize = 7715;
|
||||
|
||||
extern const char* treedemo_xml;
|
||||
const int treedemo_xmlSize = 1126;
|
||||
|
||||
extern const char* treeviewdemo_cpp;
|
||||
const int treeviewdemo_cppSize = 7715;
|
||||
extern const char* quicktimedemo_cpp;
|
||||
const int quicktimedemo_cppSize = 4576;
|
||||
|
||||
extern const char* audiodemo_cpp;
|
||||
const int audiodemo_cppSize = 23584;
|
||||
|
||||
extern const char* threadingdemo_cpp;
|
||||
const int threadingdemo_cppSize = 10049;
|
||||
|
||||
extern const char* juce_png;
|
||||
const int juce_pngSize = 15290;
|
||||
|
||||
extern const char* widgetsdemo_cpp;
|
||||
const int widgetsdemo_cppSize = 53388;
|
||||
|
||||
extern const char* interprocesscommsdemo_cpp;
|
||||
const int interprocesscommsdemo_cppSize = 12631;
|
||||
|
||||
extern const char* icons_zip;
|
||||
const int icons_zipSize = 83876;
|
||||
|
||||
extern const char* fontsandtextdemo_cpp;
|
||||
const int fontsandtextdemo_cppSize = 9064;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -31,9 +31,6 @@
|
|||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#elif ! defined (LINUX)
|
||||
#include <Carbon.h>
|
||||
#include <Movies.h>
|
||||
#endif
|
||||
|
||||
#include "../jucedemo_headers.h"
|
||||
|
|
@ -48,7 +45,6 @@
|
|||
#include <GL/glut.h>
|
||||
#undef KeyPress
|
||||
#else
|
||||
#include <AGL/agl.h>
|
||||
#include <GLUT/glut.h>
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ class BouncingBallComp : public Component,
|
|||
float innerX, innerY;
|
||||
Colour colour;
|
||||
CriticalSection lock;
|
||||
int threadId;
|
||||
int64 threadId;
|
||||
|
||||
public:
|
||||
BouncingBallComp()
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ class BouncingBallComp : public Component,
|
|||
float innerX, innerY;
|
||||
Colour colour;
|
||||
CriticalSection lock;
|
||||
int threadId;
|
||||
int64 threadId;
|
||||
|
||||
public:
|
||||
BouncingBallComp()
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@
|
|||
//#define JUCE_ENABLE_REPAINT_DEBUGGING 1
|
||||
//#define JUCE_USE_XINERAMA 1
|
||||
//#define JUCE_USE_XSHM 1
|
||||
//#define JUCE_PLUGINHOST_VST 1
|
||||
//#define JUCE_PLUGINHOST_AU 1
|
||||
#define JUCE_PLUGINHOST_VST 0
|
||||
#define JUCE_PLUGINHOST_AU 0
|
||||
//#define JUCE_BUILD_GUI_CLASSES 1
|
||||
//#define JUCE_CHECK_MEMORY_LEAKS 1
|
||||
//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1
|
||||
|
|
|
|||
|
|
@ -9,10 +9,7 @@
|
|||
/* Begin PBXBuildFile section */
|
||||
846929140A49DB9C00314975 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 846929130A49DB9C00314975 /* juce.xcconfig */; };
|
||||
846C10D40DE33F4D00E8CCE8 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 846C10D30DE33F4D00E8CCE8 /* juce_LibrarySource.mm */; };
|
||||
846C10E90DE33FA100E8CCE8 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DB0DE33FA100E8CCE8 /* AGL.framework */; };
|
||||
846C10EA0DE33FA100E8CCE8 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DC0DE33FA100E8CCE8 /* ApplicationServices.framework */; };
|
||||
846C10EB0DE33FA100E8CCE8 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DD0DE33FA100E8CCE8 /* AudioUnit.framework */; };
|
||||
846C10EC0DE33FA100E8CCE8 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DE0DE33FA100E8CCE8 /* Carbon.framework */; };
|
||||
846C10ED0DE33FA100E8CCE8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10DF0DE33FA100E8CCE8 /* Cocoa.framework */; };
|
||||
846C10EE0DE33FA100E8CCE8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */; };
|
||||
846C10EF0DE33FA100E8CCE8 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E10DE33FA100E8CCE8 /* CoreFoundation.framework */; };
|
||||
|
|
@ -21,8 +18,8 @@
|
|||
846C10F20DE33FA100E8CCE8 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E40DE33FA100E8CCE8 /* DiscRecording.framework */; };
|
||||
846C10F30DE33FA100E8CCE8 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E50DE33FA100E8CCE8 /* IOKit.framework */; };
|
||||
846C10F40DE33FA100E8CCE8 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E60DE33FA100E8CCE8 /* OpenGL.framework */; };
|
||||
846C10F50DE33FA100E8CCE8 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E70DE33FA100E8CCE8 /* QuickTime.framework */; };
|
||||
846C10F60DE33FA100E8CCE8 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846C10E80DE33FA100E8CCE8 /* WebKit.framework */; };
|
||||
84E01DD90E910B7B003E41AF /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E01DD80E910B7B003E41AF /* QTKit.framework */; };
|
||||
84F1769F0A271BBD00908B2F /* jucer_StoredSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1769B0A271BBD00908B2F /* jucer_StoredSettings.cpp */; };
|
||||
84F176A00A271BBD00908B2F /* jucer_UtilityFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F1769D0A271BBD00908B2F /* jucer_UtilityFunctions.cpp */; };
|
||||
84F176BA0A271BD000908B2F /* jucer_ComponentLayoutEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F176A20A271BD000908B2F /* jucer_ComponentLayoutEditor.cpp */; };
|
||||
|
|
@ -57,6 +54,7 @@
|
|||
84F555CF0A22381100A8311C /* Jucer To Do list.txt in Resources */ = {isa = PBXBuildFile; fileRef = 84F5556A0A22381000A8311C /* Jucer To Do list.txt */; };
|
||||
84F555D30A22381100A8311C /* BinaryData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F555700A22381000A8311C /* BinaryData.cpp */; };
|
||||
84F555D40A22381100A8311C /* jucer_Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F555730A22381000A8311C /* jucer_Main.cpp */; };
|
||||
84F8B68E0EB5FB290020D98D /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F8B68D0EB5FB290020D98D /* QuickTime.framework */; };
|
||||
8D0C4E8D0486CD37000505A6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0867D6AAFE840B52C02AAC07 /* InfoPlist.strings */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
|
|
@ -65,10 +63,7 @@
|
|||
846929130A49DB9C00314975 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; };
|
||||
846C10D20DE33F4D00E8CCE8 /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; };
|
||||
846C10D30DE33F4D00E8CCE8 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; };
|
||||
846C10DB0DE33FA100E8CCE8 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; };
|
||||
846C10DC0DE33FA100E8CCE8 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
|
||||
846C10DD0DE33FA100E8CCE8 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = "<absolute>"; };
|
||||
846C10DE0DE33FA100E8CCE8 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
|
||||
846C10DF0DE33FA100E8CCE8 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
||||
846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
|
||||
846C10E10DE33FA100E8CCE8 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
|
||||
|
|
@ -77,8 +72,8 @@
|
|||
846C10E40DE33FA100E8CCE8 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = "<absolute>"; };
|
||||
846C10E50DE33FA100E8CCE8 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; };
|
||||
846C10E60DE33FA100E8CCE8 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
|
||||
846C10E70DE33FA100E8CCE8 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
846C10E80DE33FA100E8CCE8 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
|
||||
84E01DD80E910B7B003E41AF /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = "<absolute>"; };
|
||||
84F176990A271BBD00908B2F /* jucer_ColourEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = jucer_ColourEditorComponent.h; sourceTree = "<group>"; };
|
||||
84F1769A0A271BBD00908B2F /* jucer_Colours.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = jucer_Colours.h; sourceTree = "<group>"; };
|
||||
84F1769B0A271BBD00908B2F /* jucer_StoredSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = jucer_StoredSettings.cpp; sourceTree = "<group>"; };
|
||||
|
|
@ -183,6 +178,7 @@
|
|||
84F555720A22381000A8311C /* jucer_Headers.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jucer_Headers.h; path = ../../src/jucer_Headers.h; sourceTree = SOURCE_ROOT; };
|
||||
84F555730A22381000A8311C /* jucer_Main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_Main.cpp; path = ../../src/jucer_Main.cpp; sourceTree = SOURCE_ROOT; };
|
||||
84F555B00A22381000A8311C /* jucer_ComponentTemplate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentTemplate.h; path = ../../src/templates/jucer_ComponentTemplate.h; sourceTree = SOURCE_ROOT; };
|
||||
84F8B68D0EB5FB290020D98D /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; };
|
||||
8D0C4E960486CD37000505A6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||
8D0C4E970486CD37000505A6 /* Jucer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Jucer.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
|
@ -192,10 +188,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
846C10E90DE33FA100E8CCE8 /* AGL.framework in Frameworks */,
|
||||
846C10EA0DE33FA100E8CCE8 /* ApplicationServices.framework in Frameworks */,
|
||||
846C10EB0DE33FA100E8CCE8 /* AudioUnit.framework in Frameworks */,
|
||||
846C10EC0DE33FA100E8CCE8 /* Carbon.framework in Frameworks */,
|
||||
846C10ED0DE33FA100E8CCE8 /* Cocoa.framework in Frameworks */,
|
||||
846C10EE0DE33FA100E8CCE8 /* CoreAudio.framework in Frameworks */,
|
||||
846C10EF0DE33FA100E8CCE8 /* CoreFoundation.framework in Frameworks */,
|
||||
|
|
@ -204,8 +197,9 @@
|
|||
846C10F20DE33FA100E8CCE8 /* DiscRecording.framework in Frameworks */,
|
||||
846C10F30DE33FA100E8CCE8 /* IOKit.framework in Frameworks */,
|
||||
846C10F40DE33FA100E8CCE8 /* OpenGL.framework in Frameworks */,
|
||||
846C10F50DE33FA100E8CCE8 /* QuickTime.framework in Frameworks */,
|
||||
846C10F60DE33FA100E8CCE8 /* WebKit.framework in Frameworks */,
|
||||
84E01DD90E910B7B003E41AF /* QTKit.framework in Frameworks */,
|
||||
84F8B68E0EB5FB290020D98D /* QuickTime.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -264,19 +258,17 @@
|
|||
20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
846C10DB0DE33FA100E8CCE8 /* AGL.framework */,
|
||||
846C10DC0DE33FA100E8CCE8 /* ApplicationServices.framework */,
|
||||
846C10DD0DE33FA100E8CCE8 /* AudioUnit.framework */,
|
||||
846C10DE0DE33FA100E8CCE8 /* Carbon.framework */,
|
||||
846C10DF0DE33FA100E8CCE8 /* Cocoa.framework */,
|
||||
846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */,
|
||||
846C10E10DE33FA100E8CCE8 /* CoreFoundation.framework */,
|
||||
846C10E20DE33FA100E8CCE8 /* CoreMIDI.framework */,
|
||||
846C10E30DE33FA100E8CCE8 /* CoreServices.framework */,
|
||||
846C10E00DE33FA100E8CCE8 /* CoreAudio.framework */,
|
||||
846C10E20DE33FA100E8CCE8 /* CoreMIDI.framework */,
|
||||
846C10E40DE33FA100E8CCE8 /* DiscRecording.framework */,
|
||||
846C10E50DE33FA100E8CCE8 /* IOKit.framework */,
|
||||
846C10E60DE33FA100E8CCE8 /* OpenGL.framework */,
|
||||
846C10E70DE33FA100E8CCE8 /* QuickTime.framework */,
|
||||
84E01DD80E910B7B003E41AF /* QTKit.framework */,
|
||||
84F8B68D0EB5FB290020D98D /* QuickTime.framework */,
|
||||
846C10E80DE33FA100E8CCE8 /* WebKit.framework */,
|
||||
);
|
||||
name = "External Frameworks and Libraries";
|
||||
|
|
|
|||
|
|
@ -911,4 +911,3 @@ static const unsigned char temp4[] = {137,80,78,71,13,10,26,10,0,0,0,13,73,72,68
|
|||
0,98,28,9,155,95,0,2,104,68,236,11,1,8,160,17,225,73,128,0,3,0,120,52,172,151,198,78,252,63,0,0,0,0,73,69,78,68,174,66,
|
||||
96,130,0,0};
|
||||
const char* BinaryData::prefs_misc_png = (const char*) temp4;
|
||||
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@
|
|||
//#define JUCE_ENABLE_REPAINT_DEBUGGING 1
|
||||
//#define JUCE_USE_XINERAMA 1
|
||||
//#define JUCE_USE_XSHM 1
|
||||
//#define JUCE_PLUGINHOST_VST 1
|
||||
//#define JUCE_PLUGINHOST_AU 1
|
||||
#define JUCE_PLUGINHOST_VST 0
|
||||
#define JUCE_PLUGINHOST_AU 0
|
||||
//#define JUCE_BUILD_GUI_CLASSES 1
|
||||
//#define JUCE_CHECK_MEMORY_LEAKS 1
|
||||
//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
|
||||
//==============================================================================
|
||||
#define JUCER_MAJOR_VERSION 1
|
||||
#define JUCER_MINOR_VERSION 11
|
||||
#define JUCER_MINOR_VERSION 12
|
||||
|
||||
//==============================================================================
|
||||
#include "BinaryData.h"
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ public:
|
|||
|
||||
StoredSettings::deleteInstance();
|
||||
|
||||
quit (false);
|
||||
quit();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -202,6 +202,9 @@ const String makeValidCppIdentifier (String s,
|
|||
if (allowTemplates)
|
||||
allowedChars += T("<>");
|
||||
|
||||
if (! removeColons)
|
||||
allowedChars += T(":");
|
||||
|
||||
StringArray words;
|
||||
words.addTokens (s.retainCharacters (allowedChars), false);
|
||||
words.trim();
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
*/
|
||||
|
||||
#ifndef __JUCE_CONFIG_JUCEHEADER__
|
||||
#define __JUCE_CONFIG_JUCEHEADER__
|
||||
#define __JUCE_CONFIG_JUCEHEADER__ // (this comment is here to force the amalgamator to reinclude this file)
|
||||
|
||||
//==============================================================================
|
||||
/*
|
||||
|
|
@ -159,12 +159,16 @@
|
|||
/** Enabling this builds support for VST audio plugins.
|
||||
@see VSTPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_AU
|
||||
*/
|
||||
//#define JUCE_PLUGINHOST_VST 1
|
||||
#ifndef JUCE_PLUGINHOST_VST
|
||||
// #define JUCE_PLUGINHOST_VST 1
|
||||
#endif
|
||||
|
||||
/** Enabling this builds support for AudioUnit audio plugins.
|
||||
@see AudioUnitPluginFormat, AudioPluginFormat, AudioPluginFormatManager, JUCE_PLUGINHOST_VST
|
||||
*/
|
||||
#define JUCE_PLUGINHOST_AU 1
|
||||
#ifndef JUCE_PLUGINHOST_AU
|
||||
// #define JUCE_PLUGINHOST_AU 1
|
||||
#endif
|
||||
|
||||
//=============================================================================
|
||||
/** Disabling this will avoid linking to any UI code. This is handy for
|
||||
|
|
|
|||
42563
juce_amalgamated.cpp
42563
juce_amalgamated.cpp
File diff suppressed because it is too large
Load diff
6755
juce_amalgamated.h
6755
juce_amalgamated.h
File diff suppressed because it is too large
Load diff
|
|
@ -37,44 +37,22 @@
|
|||
|
||||
*/
|
||||
|
||||
#ifdef __JUCE_JUCEHEADER__
|
||||
/* When you add the amalgamated cpp file to your project, you mustn't include it in
|
||||
a file where you've already included juce.h - just put it inside a file on its own,
|
||||
possibly with your config flags preceding it, but don't include anything else. */
|
||||
#error
|
||||
#endif
|
||||
|
||||
#include "../juce_Config.h"
|
||||
|
||||
//==============================================================================
|
||||
#ifdef _WIN32
|
||||
#include "../build/win32/platform_specific_code/win32_headers.h"
|
||||
#include <winsock2.h>
|
||||
#include <mapi.h>
|
||||
#include <ctime>
|
||||
|
||||
#if JUCE_QUICKTIME
|
||||
#include <Movies.h>
|
||||
#include <QTML.h>
|
||||
#include <QuickTimeComponents.h>
|
||||
#include <MediaHandlers.h>
|
||||
#include <ImageCodec.h>
|
||||
#undef TARGET_OS_MAC // quicktime sets these, but they confuse some of the 3rd party libs
|
||||
#undef MACOS
|
||||
#endif
|
||||
|
||||
#include "../build/win32/platform_specific_code/juce_win32_NativeIncludes.h"
|
||||
#elif defined (LINUX)
|
||||
|
||||
//
|
||||
#else
|
||||
#include <Carbon/Carbon.h>
|
||||
#include <CoreAudio/HostTime.h>
|
||||
#define __Point__
|
||||
#include <IOKit/IOKitLib.h>
|
||||
#include <IOKit/graphics/IOGraphicsTypes.h>
|
||||
#include <IOKit/network/IOEthernetInterface.h>
|
||||
#include <IOKit/network/IONetworkInterface.h>
|
||||
#include <IOKit/network/IOEthernetController.h>
|
||||
#include <IOKit/IOCFPlugIn.h>
|
||||
#include <IOKit/hid/IOHIDLib.h>
|
||||
#include <IOKit/hid/IOHIDKeys.h>
|
||||
|
||||
#include <sys/filedesc.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/proc.h>
|
||||
#include <Kernel/libkern/OSTypes.h>
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_NativeIncludes.h"
|
||||
#endif
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -181,7 +159,7 @@
|
|||
#include "juce_appframework/audio/plugins/juce_PluginDirectoryScanner.cpp"
|
||||
#include "juce_appframework/audio/plugins/juce_PluginListComponent.cpp"
|
||||
#include "juce_appframework/audio/plugins/formats/juce_AudioUnitPluginFormat.cpp"
|
||||
#include "juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.cpp"
|
||||
#include "juce_appframework/audio/plugins/formats/juce_VSTPluginFormat.mm"
|
||||
#include "juce_appframework/audio/processors/juce_AudioProcessor.cpp"
|
||||
#include "juce_appframework/audio/processors/juce_AudioProcessorEditor.cpp"
|
||||
#include "juce_appframework/audio/processors/juce_AudioProcessorGraph.cpp"
|
||||
|
|
@ -287,7 +265,6 @@
|
|||
#include "juce_appframework/gui/components/special/juce_MidiKeyboardComponent.cpp"
|
||||
#include "juce_appframework/gui/components/special/juce_OpenGLComponent.cpp"
|
||||
#include "juce_appframework/gui/components/special/juce_PreferencesPanel.cpp"
|
||||
#include "juce_appframework/gui/components/special/juce_QuickTimeMovieComponent.cpp"
|
||||
#include "juce_appframework/gui/components/special/juce_SystemTrayIconComponent.cpp"
|
||||
#include "juce_appframework/gui/components/windows/juce_AlertWindow.cpp"
|
||||
#include "juce_appframework/gui/components/windows/juce_ComponentPeer.cpp"
|
||||
|
|
@ -358,26 +335,7 @@
|
|||
//==============================================================================
|
||||
#if JUCE_WIN32
|
||||
|
||||
#include "../build/win32/platform_specific_code/juce_win32_Files.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_Network.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_Misc.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_PlatformUtils.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_SystemStats.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_Threads.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_DynamicLibraryLoader.cpp"
|
||||
|
||||
#if ! JUCE_ONLY_BUILD_CORE_LIBRARY
|
||||
#include "../build/win32/platform_specific_code/juce_win32_ASIO.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_AudioCDReader.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_DirectSound.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_FileChooser.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_Fonts.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_Messaging.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_Midi.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_WebBrowserComponent.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_Windowing.cpp"
|
||||
#endif
|
||||
|
||||
#include "../build/win32/platform_specific_code/juce_win32_NativeCode.cpp"
|
||||
#include "../build/win32/platform_specific_code/juce_win32_AutoLinkLibraries.h"
|
||||
|
||||
#endif
|
||||
|
|
@ -407,21 +365,7 @@
|
|||
//==============================================================================
|
||||
#if JUCE_MAC
|
||||
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_Files.cpp"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_NativeCode.mm"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_NamedPipe.cpp"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_SystemStats.mm"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_Threads.cpp"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_Network.mm"
|
||||
|
||||
#if ! JUCE_ONLY_BUILD_CORE_LIBRARY
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_AudioCDBurner.mm"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_CoreAudio.cpp"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_CoreMidi.cpp"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_FileChooser.mm"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_Fonts.mm"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_Messaging.mm"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_WebBrowserComponent.mm"
|
||||
#include "../build/macosx/platform_specific_code/juce_mac_Windowing.mm"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,8 +29,8 @@
|
|||
==============================================================================
|
||||
*/
|
||||
|
||||
#ifndef __JUCE_JUCE_APP_INCLUDES_INCLUDEFILES__
|
||||
#define __JUCE_JUCE_APP_INCLUDES_INCLUDEFILES__
|
||||
#ifndef __JUCE_APP_INCLUDES_JUCEHEADER__
|
||||
#define __JUCE_APP_INCLUDES_JUCEHEADER__
|
||||
|
||||
#ifndef __JUCE_APPLICATION_JUCEHEADER__
|
||||
#include "juce_appframework/application/juce_Application.h"
|
||||
|
|
@ -738,4 +738,4 @@
|
|||
#include "juce_appframework/documents/juce_UndoManager.h"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif // __JUCE_APP_INCLUDES_JUCEHEADER__
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ BEGIN_JUCE_NAMESPACE
|
|||
#include "../../juce_core/basics/juce_Initialisation.h"
|
||||
#include "../../juce_core/threads/juce_Process.h"
|
||||
#include "../../juce_core/threads/juce_InterProcessLock.h"
|
||||
#include "../../juce_core/misc/juce_PlatformUtilities.h"
|
||||
|
||||
void juce_setCurrentExecutableFileName (const String& filename) throw();
|
||||
void juce_setCurrentThreadName (const String& name) throw();
|
||||
|
|
@ -99,9 +100,9 @@ void JUCEApplication::systemRequestedQuit()
|
|||
quit();
|
||||
}
|
||||
|
||||
void JUCEApplication::quit (const bool useMaximumForce)
|
||||
void JUCEApplication::quit()
|
||||
{
|
||||
MessageManager::getInstance()->postQuitMessage (useMaximumForce);
|
||||
MessageManager::getInstance()->stopDispatchLoop();
|
||||
}
|
||||
|
||||
void JUCEApplication::setApplicationReturnValue (const int newReturnValue) throw()
|
||||
|
|
@ -165,7 +166,6 @@ int JUCEApplication::main (String& commandLine, JUCEApplication* const app)
|
|||
{
|
||||
jassert (appInstance == 0);
|
||||
appInstance = app;
|
||||
bool useForce = true;
|
||||
|
||||
initialiseJuce_GUI();
|
||||
|
||||
|
|
@ -203,7 +203,7 @@ int JUCEApplication::main (String& commandLine, JUCEApplication* const app)
|
|||
app->stillInitialising = false;
|
||||
|
||||
// now loop until a quit message is received..
|
||||
useForce = MessageManager::getInstance()->runDispatchLoop();
|
||||
MessageManager::getInstance()->runDispatchLoop();
|
||||
|
||||
MessageManager::getInstance()->deregisterBroadcastListener (app);
|
||||
|
||||
|
|
@ -224,10 +224,10 @@ int JUCEApplication::main (String& commandLine, JUCEApplication* const app)
|
|||
}
|
||||
#endif
|
||||
|
||||
return shutdownAppAndClearUp (useForce);
|
||||
return shutdownAppAndClearUp();
|
||||
}
|
||||
|
||||
int JUCEApplication::shutdownAppAndClearUp (const bool useMaximumForce)
|
||||
int JUCEApplication::shutdownAppAndClearUp()
|
||||
{
|
||||
jassert (appInstance != 0);
|
||||
JUCEApplication* const app = appInstance;
|
||||
|
|
@ -266,11 +266,6 @@ int JUCEApplication::shutdownAppAndClearUp (const bool useMaximumForce)
|
|||
}
|
||||
JUCE_CATCH_ALL_ASSERT
|
||||
|
||||
if (useMaximumForce)
|
||||
{
|
||||
Process::terminate();
|
||||
}
|
||||
|
||||
reentrancyCheck = false;
|
||||
}
|
||||
|
||||
|
|
@ -280,6 +275,10 @@ int JUCEApplication::shutdownAppAndClearUp (const bool useMaximumForce)
|
|||
int JUCEApplication::main (int argc, char* argv[],
|
||||
JUCEApplication* const newApp)
|
||||
{
|
||||
#if JUCE_MAC
|
||||
const ScopedAutoReleasePool pool;
|
||||
#endif
|
||||
|
||||
juce_setCurrentExecutableFileName (String::fromUTF8 ((const uint8*) argv[0]));
|
||||
|
||||
String cmd;
|
||||
|
|
@ -303,6 +302,9 @@ void JUCE_PUBLIC_FUNCTION initialiseJuce_GUI()
|
|||
{
|
||||
if (! juceInitialisedGUI)
|
||||
{
|
||||
#if JUCE_MAC
|
||||
const ScopedAutoReleasePool pool;
|
||||
#endif
|
||||
juceInitialisedGUI = true;
|
||||
|
||||
initialiseJuce_NonGUI();
|
||||
|
|
@ -336,6 +338,9 @@ void JUCE_PUBLIC_FUNCTION shutdownJuce_GUI()
|
|||
{
|
||||
if (juceInitialisedGUI)
|
||||
{
|
||||
#if JUCE_MAC
|
||||
const ScopedAutoReleasePool pool;
|
||||
#endif
|
||||
DeletedAtShutdown::deleteAll();
|
||||
|
||||
LookAndFeel::clearDefaultLookAndFeel();
|
||||
|
|
|
|||
|
|
@ -241,12 +241,9 @@ public:
|
|||
and maybe cancel the quit, you'll need to handle this in the systemRequestedQuit()
|
||||
method - see that method's help for more info.
|
||||
|
||||
@param useMaximumForce if this is true, the process will be forcibly killed
|
||||
before leaving the WinMain or main() function, which can
|
||||
be useful if threads might have got stuck somehow.
|
||||
@see MessageManager, DeletedAtShutdown
|
||||
*/
|
||||
static void quit (const bool useMaximumForce = false);
|
||||
static void quit();
|
||||
|
||||
/** Sets the value that should be returned as the application's exit code when the
|
||||
app quits.
|
||||
|
|
@ -293,7 +290,7 @@ private:
|
|||
int appReturnValue;
|
||||
bool stillInitialising;
|
||||
|
||||
static int shutdownAppAndClearUp (const bool useMaximumForce);
|
||||
static int shutdownAppAndClearUp();
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -64,6 +64,8 @@
|
|||
|
||||
#include "../../../juce_core/basics/juce_StandardHeader.h"
|
||||
|
||||
#if ! (JUCE_MAC && JUCE_64BIT)
|
||||
|
||||
BEGIN_JUCE_NAMESPACE
|
||||
|
||||
#include "juce_QuickTimeAudioFormat.h"
|
||||
|
|
@ -408,7 +410,7 @@ AudioFormatWriter* QuickTimeAudioFormat::createWriterFor (OutputStream* /*stream
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
END_JUCE_NAMESPACE
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -45,10 +45,11 @@ AudioSampleBuffer::AudioSampleBuffer (const int numChannels_,
|
|||
size (numSamples)
|
||||
{
|
||||
jassert (numSamples >= 0);
|
||||
jassert (numChannels_ > 0 && numChannels_ <= maxNumAudioSampleBufferChannels);
|
||||
jassert (numChannels_ > 0);
|
||||
|
||||
allocatedBytes = numChannels * numSamples * sizeof (float) + 32;
|
||||
allocatedData = (float*) juce_malloc (allocatedBytes);
|
||||
channels = (float**) juce_malloc (numChannels_ * sizeof (float*));
|
||||
|
||||
float* chan = allocatedData;
|
||||
for (int i = 0; i < numChannels_; ++i)
|
||||
|
|
@ -68,7 +69,9 @@ AudioSampleBuffer::AudioSampleBuffer (float** dataToReferTo,
|
|||
allocatedBytes (0),
|
||||
allocatedData (0)
|
||||
{
|
||||
jassert (((unsigned int) numChannels_) <= (unsigned int) maxNumAudioSampleBufferChannels);
|
||||
jassert (numChannels_ > 0);
|
||||
|
||||
channels = (float**) juce_malloc (numChannels_ * sizeof (float*));
|
||||
|
||||
for (int i = 0; i < numChannels_; ++i)
|
||||
{
|
||||
|
|
@ -85,12 +88,15 @@ void AudioSampleBuffer::setDataToReferTo (float** dataToReferTo,
|
|||
const int numChannels_,
|
||||
const int numSamples) throw()
|
||||
{
|
||||
jassert (((unsigned int) numChannels_) <= (unsigned int) maxNumAudioSampleBufferChannels);
|
||||
jassert (numChannels_ > 0);
|
||||
|
||||
juce_free (allocatedData);
|
||||
allocatedData = 0;
|
||||
allocatedBytes = 0;
|
||||
|
||||
if (numChannels_ > numChannels)
|
||||
channels = (float**) juce_realloc (channels, numChannels_ * sizeof (float*));
|
||||
|
||||
numChannels = numChannels_;
|
||||
size = numSamples;
|
||||
|
||||
|
|
@ -109,6 +115,8 @@ AudioSampleBuffer::AudioSampleBuffer (const AudioSampleBuffer& other) throw()
|
|||
: numChannels (other.numChannels),
|
||||
size (other.size)
|
||||
{
|
||||
channels = (float**) juce_malloc (other.numChannels * sizeof (float*));
|
||||
|
||||
if (other.allocatedData != 0)
|
||||
{
|
||||
allocatedBytes = numChannels * size * sizeof (float) + 32;
|
||||
|
|
@ -152,6 +160,7 @@ const AudioSampleBuffer& AudioSampleBuffer::operator= (const AudioSampleBuffer&
|
|||
AudioSampleBuffer::~AudioSampleBuffer() throw()
|
||||
{
|
||||
juce_free (allocatedData);
|
||||
juce_free (channels);
|
||||
}
|
||||
|
||||
float* AudioSampleBuffer::getSampleData (const int channelNumber,
|
||||
|
|
@ -169,7 +178,7 @@ void AudioSampleBuffer::setSize (const int newNumChannels,
|
|||
const bool clearExtraSpace,
|
||||
const bool avoidReallocating) throw()
|
||||
{
|
||||
jassert (newNumChannels > 0 && newNumChannels <= maxNumAudioSampleBufferChannels);
|
||||
jassert (newNumChannels > 0);
|
||||
|
||||
if (newNumSamples != size || newNumChannels != numChannels)
|
||||
{
|
||||
|
|
@ -212,6 +221,10 @@ void AudioSampleBuffer::setSize (const int newNumChannels,
|
|||
}
|
||||
|
||||
size = newNumSamples;
|
||||
|
||||
if (newNumChannels > numChannels)
|
||||
channels = (float**) juce_realloc (channels, newNumChannels * sizeof (float*));
|
||||
|
||||
numChannels = newNumChannels;
|
||||
|
||||
float* chan = allocatedData;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@
|
|||
|
||||
class AudioFormatReader;
|
||||
class AudioFormatWriter;
|
||||
const int maxNumAudioSampleBufferChannels = 32;
|
||||
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -371,7 +370,7 @@ public:
|
|||
|
||||
private:
|
||||
int numChannels, size, allocatedBytes;
|
||||
float* channels [maxNumAudioSampleBufferChannels + 1];
|
||||
float** channels;
|
||||
float* allocatedData;
|
||||
};
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue