Browse Source

Fix for iOS launching. Tweak for win32 font rendering. Added a File::hostApplicationPath flag.

tags/2021-05-28
Julian Storer 15 years ago
parent
commit
ccd8566e96
26 changed files with 200 additions and 130 deletions
  1. +1
    -25
      extras/audio plugins/wrapper/juce_PluginHostType.h
  2. +74
    -36
      juce_amalgamated.cpp
  3. +26
    -17
      juce_amalgamated.h
  4. +10
    -7
      src/application/juce_Application.cpp
  5. +9
    -3
      src/application/juce_Application.h
  6. +12
    -12
      src/core/juce_Initialisation.h
  7. +1
    -1
      src/core/juce_PlatformUtilities.h
  8. +1
    -1
      src/core/juce_StandardHeader.h
  9. +1
    -1
      src/gui/components/mouse/juce_MouseInputSource.cpp
  10. +1
    -1
      src/gui/components/windows/juce_AlertWindow.cpp
  11. +1
    -1
      src/gui/components/windows/juce_DialogWindow.cpp
  12. +4
    -1
      src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp
  13. +3
    -0
      src/io/files/juce_File.h
  14. +10
    -0
      src/native/linux/juce_linux_Files.cpp
  15. +3
    -3
      src/native/linux/juce_linux_Messaging.cpp
  16. +1
    -0
      src/native/mac/juce_iphone_MessageManager.mm
  17. +3
    -3
      src/native/mac/juce_iphone_MiscUtilities.mm
  18. +10
    -0
      src/native/mac/juce_mac_Files.mm
  19. +1
    -1
      src/native/mac/juce_mac_MainMenu.mm
  20. +1
    -1
      src/native/mac/juce_mac_MessageManager.mm
  21. +0
    -9
      src/native/mac/juce_mac_MiscUtilities.mm
  22. +2
    -2
      src/native/mac/juce_mac_NSViewComponentPeer.mm
  23. +1
    -0
      src/native/mac/juce_mac_NativeIncludes.h
  24. +1
    -1
      src/native/mac/juce_mac_OpenGLComponent.mm
  25. +15
    -3
      src/native/mac/juce_mac_SystemStats.mm
  26. +8
    -1
      src/native/windows/juce_win32_Files.cpp

+ 1
- 25
extras/audio plugins/wrapper/juce_PluginHostType.h View File

@@ -23,9 +23,6 @@
==============================================================================
*/
#if JUCE_MAC
#include <mach-o/dyld.h>
#endif
//==============================================================================
class PluginHostType
@@ -103,7 +100,7 @@ public:
private:
static HostType getHostType() throw()
{
const String hostPath (getHostPath());
const String hostPath (File::getSpecialLocation (File::hostApplicationPath).getFullPath());
const String hostFilename (File (hostPath).getFileName());
#if JUCE_MAC
@@ -144,25 +141,4 @@ private:
#endif
return UnknownHost;
}
static const String getHostPath() throw()
{
unsigned int size = 8192;
HeapBlock<char> buffer;
buffer.calloc (size + 8);
#if JUCE_WINDOWS
WCHAR* w = reinterpret_cast <WCHAR*> (buffer.getData());
GetModuleFileNameW (0, w, size / sizeof (WCHAR));
return String (w, size);
#elif JUCE_MAC
_NSGetExecutablePath (buffer.getData(), &size);
return String::fromUTF8 (buffer, size);
#elif JUCE_LINUX
readlink ("/proc/self/exe", buffer.getData(), size);
return String::fromUTF8 (buffer, size);
#else
#error
#endif
}
};

+ 74
- 36
juce_amalgamated.cpp View File

@@ -864,6 +864,7 @@ protected:
#include <ifaddrs.h>
#include <net/if_dl.h>
#include <mach/mach_time.h>
#include <mach-o/dyld.h>

#if MACOS_10_4_OR_EARLIER
#include <GLUT/glut.h>
@@ -17282,7 +17283,7 @@ JUCEApplication::JUCEApplication()
: appReturnValue (0),
stillInitialising (true)
{
jassert (isStandaloneApp && appInstance == 0);
jassert (isStandaloneApp() && appInstance == 0);
appInstance = this;
}

@@ -17298,7 +17299,7 @@ JUCEApplication::~JUCEApplication()
appInstance = 0;
}

bool JUCEApplication::isStandaloneApp = false;
JUCEApplication::CreateInstanceFunction JUCEApplication::createInstance = 0;
JUCEApplication* JUCEApplication::appInstance = 0;

bool JUCEApplication::moreThanOneInstanceAllowed()
@@ -17432,9 +17433,12 @@ int JUCEApplication::shutdownApp()
return getApplicationReturnValue();
}

int JUCEApplication::main (const String& commandLine, JUCEApplication* const app)
int JUCEApplication::main (const String& commandLine)
{
const ScopedPointer<JUCEApplication> appDeleter (app);
ScopedJuceInitialiser_GUI libraryInitialiser;

jassert (createInstance != 0);
const ScopedPointer<JUCEApplication> app (createInstance());

if (! app->initialiseApp (commandLine))
return 0;
@@ -17457,23 +17461,23 @@ int JUCEApplication::main (const String& commandLine, JUCEApplication* const app
extern const char* juce_Argv0;
#endif

int JUCEApplication::main (int argc, const char* argv[], JUCEApplication* const newApp)
int JUCEApplication::main (int argc, const char* argv[])
{
JUCE_AUTORELEASEPOOL

#if ! JUCE_WINDOWS
jassert (createInstance != 0);
juce_Argv0 = argv[0];
#endif

#if JUCE_IOS
const ScopedPointer<JUCEApplication> appDeleter (newApp);
return juce_iOSMain (argc, argv);
#else
String cmd;
for (int i = 1; i < argc; ++i)
cmd << argv[i] << ' ';

return JUCEApplication::main (cmd, newApp);
return JUCEApplication::main (cmd);
#endif
}

@@ -70687,7 +70691,7 @@ public:
Component* current = getComponentUnderMouse();
if (current != 0)
Desktop::setMousePosition (current->getScreenBounds()
.getConstrainedPoint (current->getMouseXYRelative()));
.getConstrainedPoint (lastScreenPos));
}

isUnboundedMouseModeOn = enable;
@@ -75812,7 +75816,7 @@ AlertWindow::AlertWindow (const String& title,
}
}

if (! JUCEApplication::isStandaloneApp)
if (! JUCEApplication::isStandaloneApp())
setAlwaysOnTop (true); // for a plugin, make it always-on-top because the host windows are often top-level

lookAndFeelChanged();
@@ -77174,7 +77178,7 @@ public:
TempDialogWindow (const String& title, const Colour& colour, const bool escapeCloses)
: DialogWindow (title, colour, escapeCloses, true)
{
if (! JUCEApplication::isStandaloneApp)
if (! JUCEApplication::isStandaloneApp())
setAlwaysOnTop (true); // for a plugin, make it always-on-top because the host windows are often top-level
}

@@ -84776,7 +84780,10 @@ public:
{
const float fontHeight = font.getHeight();
const AffineTransform transform (AffineTransform::scale (fontHeight * font.getHorizontalScale(), fontHeight)
.translated (0.0f, -0.5f));
#if JUCE_MAC || JUCE_IOS
.translated (0.0f, -0.5f)
#endif
);

edgeTable = new EdgeTable (glyphPath.getBoundsTransformed (transform).getSmallestIntegerContainer().expanded (1, 0),
glyphPath, transform);
@@ -237878,7 +237885,14 @@ const File JUCE_CALLTYPE File::getSpecialLocation (const SpecialLocationType typ
GetModuleFileName (moduleHandle, dest, numElementsInArray (dest));
return File (String (dest));
}
break;

case hostApplicationPath:
{
WCHAR dest [MAX_PATH + 256];
dest[0] = 0;
GetModuleFileName (0, dest, numElementsInArray (dest));
return File (String (dest));
}

default:
jassertfalse; // unknown type?
@@ -253551,6 +253565,16 @@ const File File::getSpecialLocation (const SpecialLocationType type)
case currentApplicationFile:
return juce_getExecutableFile();

case hostApplicationPath:
{
unsigned int size = 8192;
HeapBlock<char> buffer;
buffer.calloc (size + 8);

readlink ("/proc/self/exe", buffer.getData(), size);
return String::fromUTF8 (buffer, size);
}

default:
jassertfalse; // unknown type?
break;
@@ -255205,7 +255229,7 @@ namespace LinuxErrorHandling
{
DBG ("ERROR: connection to X server broken.. terminating.");

if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
MessageManager::getInstance()->stopDispatchLoop();

errorOccurred = true;
@@ -255272,7 +255296,7 @@ void MessageManager::doPlatformSpecificInitialisation()
// This is fatal! Print error and closedown
Logger::outputDebugString ("Failed to initialise xlib thread support.");

if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
Process::terminate();

return;
@@ -255374,7 +255398,7 @@ bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
{
LinuxErrorHandling::errorOccurred = true;

if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
Process::terminate();

break;
@@ -261867,13 +261891,25 @@ const String SystemStats::getOperatingSystemName()
return "Mac OS X";
}

#if ! JUCE_IOS
int PlatformUtilities::getOSXMinorVersionNumber()
{
SInt32 versionMinor = 0;
OSErr err = Gestalt (gestaltSystemVersionMinor, &versionMinor);
(void) err;
jassert (err == noErr);
return (int) versionMinor;
}
#endif

bool SystemStats::isOperatingSystem64Bit()
{
#if JUCE_64BIT
#if JUCE_IOS
return false;
#elif JUCE_64BIT
return true;
#else
//xxx not sure how to find this out?..
return false;
return PlatformUtilities::getOSXMinorVersionNumber() >= 6;
#endif
}

@@ -263440,6 +263476,16 @@ const File File::getSpecialLocation (const SpecialLocationType type)
: exe;
}

case hostApplicationPath:
{
unsigned int size = 8192;
HeapBlock<char> buffer;
buffer.calloc (size + 8);

_NSGetExecutablePath (buffer.getData(), &size);
return String::fromUTF8 (buffer, size);
}

default:
jassertfalse; // unknown type?
break;
@@ -263736,17 +263782,17 @@ END_JUCE_NAMESPACE

- (void) applicationDidFinishLaunching: (UIApplication*) application
{
String dummy;
initialiseJuce_GUI();

if (! JUCEApplication::getInstance()->initialiseApp (dummy))
if (! JUCEApplication::createInstance()->initialiseApp (String::empty))
exit (0);
}

- (void) applicationWillTerminate: (UIApplication*) application
{
jassert (JUCEApplication::getInstance() != 0);
JUCEApplication::getInstance()->shutdownApp();

// need to do this stuff because the OS kills the process before our scope-based cleanup code gets executed..
delete JUCEApplication::getInstance();
shutdownJuce_GUI();
}
@@ -263920,15 +263966,6 @@ void PlatformUtilities::addItemToDock (const File& file)
}
}

int PlatformUtilities::getOSXMinorVersionNumber()
{
SInt32 versionMinor = 0;
OSErr err = Gestalt (gestaltSystemVersionMinor, &versionMinor);
(void) err;
jassert (err == noErr);
return (int) versionMinor;
}

#if ! JUCE_ONLY_BUILD_CORE_LIBRARY

bool AlertWindow::showNativeDialogBox (const String& title,
@@ -266346,6 +266383,7 @@ void MessageManager::runDispatchLoop()

void MessageManager::stopDispatchLoop()
{
[[[UIApplication sharedApplication] delegate] applicationWillTerminate: [UIApplication sharedApplication]];
exit (0); // iPhone apps get no mercy..
}

@@ -266925,7 +266963,7 @@ void OpenGLPixelFormat::getAvailablePixelFormats (Component* /*component*/,
p = aglNextPixelFormat (p);
}*/

//jassertfalse //xxx can't see how you do this in cocoa!
//jassertfalse // can't see how you do this in cocoa!
}

#else
@@ -270311,7 +270349,7 @@ END_JUCE_NAMESPACE

- (void) mouseDown: (NSEvent*) ev
{
if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
[self asyncMouseDown: ev];
else
// In some host situations, the host will stop modal loops from working
@@ -270330,7 +270368,7 @@ END_JUCE_NAMESPACE

- (void) mouseUp: (NSEvent*) ev
{
if (! JUCEApplication::isStandaloneApp)
if (! JUCEApplication::isStandaloneApp())
[self asyncMouseUp: ev];
else
// In some host situations, the host will stop modal loops from working
@@ -272505,7 +272543,7 @@ void OpenGLPixelFormat::getAvailablePixelFormats (Component* /*component*/,
p = aglNextPixelFormat (p);
}*/

//jassertfalse //xxx can't see how you do this in cocoa!
//jassertfalse // can't see how you do this in cocoa!
}

#else
@@ -273186,7 +273224,7 @@ static NSMenu* createStandardAppMenu (NSMenu* menu, const String& appName,
static void rebuildMainMenu (const PopupMenu* extraItems)
{
// this can't be used in a plugin!
jassert (JUCEApplication::isStandaloneApp);
jassert (JUCEApplication::isStandaloneApp());

if (JUCEApplication::getInstance() != 0)
{
@@ -274663,7 +274701,7 @@ using namespace JUCE_NAMESPACE;

NSNotificationCenter* center = [NSNotificationCenter defaultCenter];

if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
{
oldDelegate = [NSApp delegate];
[NSApp setDelegate: self];


+ 26
- 17
juce_amalgamated.h View File

@@ -64,7 +64,7 @@
*/
#define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 52
#define JUCE_BUILDNUMBER 43
#define JUCE_BUILDNUMBER 44

/** Current Juce version number.

@@ -9039,6 +9039,9 @@ public:
*/
invokedExecutableFile,

/** In a plugin, this will return the path of the host executable. */
hostApplicationPath,

/** The directory in which applications normally get installed.

So on windows, this would be something like "c:\program files", on the
@@ -13740,39 +13743,39 @@ public:
#if defined (JUCE_GCC) || defined (__MWERKS__)

#define START_JUCE_APPLICATION(AppClass) \
static JUCE_NAMESPACE::JUCEApplication* juce_CreateApplication() { return new AppClass(); } \
int main (int argc, char* argv[]) \
{ \
JUCE_NAMESPACE::JUCEApplication::isStandaloneApp = true; \
JUCE_NAMESPACE::ScopedJuceInitialiser_GUI libraryInitialiser; \
return JUCE_NAMESPACE::JUCEApplication::main (argc, (const char**) argv, new AppClass()); \
JUCE_NAMESPACE::JUCEApplication::createInstance = &juce_CreateApplication; \
return JUCE_NAMESPACE::JUCEApplication::main (argc, (const char**) argv); \
}

#elif JUCE_WINDOWS

#ifdef _CONSOLE
#define START_JUCE_APPLICATION(AppClass) \
static JUCE_NAMESPACE::JUCEApplication* juce_CreateApplication() { return new AppClass(); } \
int main (int, char* argv[]) \
{ \
JUCE_NAMESPACE::JUCEApplication::isStandaloneApp = true; \
JUCE_NAMESPACE::ScopedJuceInitialiser_GUI libraryInitialiser; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams(), new AppClass()); \
JUCE_NAMESPACE::JUCEApplication::createInstance = &juce_CreateApplication; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams()); \
}
#elif ! defined (_AFXDLL)
#ifdef _WINDOWS_
#define START_JUCE_APPLICATION(AppClass) \
static JUCE_NAMESPACE::JUCEApplication* juce_CreateApplication() { return new AppClass(); } \
int WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int) \
{ \
JUCE_NAMESPACE::JUCEApplication::isStandaloneApp = true; \
JUCE_NAMESPACE::ScopedJuceInitialiser_GUI libraryInitialiser; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams(), new AppClass()); \
JUCE_NAMESPACE::JUCEApplication::createInstance = &juce_CreateApplication; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams()); \
}
#else
#define START_JUCE_APPLICATION(AppClass) \
static JUCE_NAMESPACE::JUCEApplication* juce_CreateApplication() { return new AppClass(); } \
int __stdcall WinMain (int, int, const char*, int) \
{ \
JUCE_NAMESPACE::JUCEApplication::isStandaloneApp = true; \
JUCE_NAMESPACE::ScopedJuceInitialiser_GUI libraryInitialiser; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams(), new AppClass()); \
JUCE_NAMESPACE::JUCEApplication::createInstance = &juce_CreateApplication; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams()); \
}
#endif
#endif
@@ -14076,7 +14079,7 @@ private:
ScopedAutoReleasePool& operator= (const ScopedAutoReleasePool&);
};

#define JUCE_AUTORELEASEPOOL const ScopedAutoReleasePool pool;
#define JUCE_AUTORELEASEPOOL const JUCE_NAMESPACE::ScopedAutoReleasePool pool;

#else

@@ -28136,12 +28139,16 @@ public:
// These are used by the START_JUCE_APPLICATION() macro and aren't for public use.

/** @internal */
static int main (const String& commandLine, JUCEApplication* newApp);
static int main (const String& commandLine);
/** @internal */
static int main (int argc, const char* argv[], JUCEApplication* newApp);
static int main (int argc, const char* argv[]);
/** @internal */
static void sendUnhandledException (const std::exception* e, const char* sourceFile, int lineNumber);

/** Returns true if this executable is running as an app (as opposed to being a plugin
or other kind of shared library. */
static inline bool isStandaloneApp() throw() { return createInstance != 0; }

/** @internal */
ApplicationCommandTarget* getNextCommandTarget();
/** @internal */
@@ -28157,7 +28164,9 @@ public:
/** @internal */
int shutdownApp();
/** @internal */
static bool isStandaloneApp;
typedef JUCEApplication* (*CreateInstanceFunction)();
/** @internal */
static CreateInstanceFunction createInstance;

private:



+ 10
- 7
src/application/juce_Application.cpp View File

@@ -45,7 +45,7 @@ JUCEApplication::JUCEApplication()
: appReturnValue (0),
stillInitialising (true)
{
jassert (isStandaloneApp && appInstance == 0);
jassert (isStandaloneApp() && appInstance == 0);
appInstance = this;
}
@@ -61,7 +61,7 @@ JUCEApplication::~JUCEApplication()
appInstance = 0;
}
bool JUCEApplication::isStandaloneApp = false;
JUCEApplication::CreateInstanceFunction JUCEApplication::createInstance = 0;
JUCEApplication* JUCEApplication::appInstance = 0;
//==============================================================================
@@ -200,9 +200,12 @@ int JUCEApplication::shutdownApp()
}
//==============================================================================
int JUCEApplication::main (const String& commandLine, JUCEApplication* const app)
int JUCEApplication::main (const String& commandLine)
{
const ScopedPointer<JUCEApplication> appDeleter (app);
ScopedJuceInitialiser_GUI libraryInitialiser;
jassert (createInstance != 0);
const ScopedPointer<JUCEApplication> app (createInstance());
if (! app->initialiseApp (commandLine))
return 0;
@@ -225,23 +228,23 @@ int JUCEApplication::main (const String& commandLine, JUCEApplication* const app
extern const char* juce_Argv0;
#endif
int JUCEApplication::main (int argc, const char* argv[], JUCEApplication* const newApp)
int JUCEApplication::main (int argc, const char* argv[])
{
JUCE_AUTORELEASEPOOL
#if ! JUCE_WINDOWS
jassert (createInstance != 0);
juce_Argv0 = argv[0];
#endif
#if JUCE_IOS
const ScopedPointer<JUCEApplication> appDeleter (newApp);
return juce_iOSMain (argc, argv);
#else
String cmd;
for (int i = 1; i < argc; ++i)
cmd << argv[i] << ' ';
return JUCEApplication::main (cmd, newApp);
return JUCEApplication::main (cmd);
#endif
}


+ 9
- 3
src/application/juce_Application.h View File

@@ -248,12 +248,16 @@ public:
// These are used by the START_JUCE_APPLICATION() macro and aren't for public use.
/** @internal */
static int main (const String& commandLine, JUCEApplication* newApp);
static int main (const String& commandLine);
/** @internal */
static int main (int argc, const char* argv[], JUCEApplication* newApp);
static int main (int argc, const char* argv[]);
/** @internal */
static void sendUnhandledException (const std::exception* e, const char* sourceFile, int lineNumber);
/** Returns true if this executable is running as an app (as opposed to being a plugin
or other kind of shared library. */
static inline bool isStandaloneApp() throw() { return createInstance != 0; }
/** @internal */
ApplicationCommandTarget* getNextCommandTarget();
/** @internal */
@@ -269,7 +273,9 @@ public:
/** @internal */
int shutdownApp();
/** @internal */
static bool isStandaloneApp;
typedef JUCEApplication* (*CreateInstanceFunction)();
/** @internal */
static CreateInstanceFunction createInstance;
private:
//==============================================================================


+ 12
- 12
src/core/juce_Initialisation.h View File

@@ -137,39 +137,39 @@ public:
#if defined (JUCE_GCC) || defined (__MWERKS__)
#define START_JUCE_APPLICATION(AppClass) \
static JUCE_NAMESPACE::JUCEApplication* juce_CreateApplication() { return new AppClass(); } \
int main (int argc, char* argv[]) \
{ \
JUCE_NAMESPACE::JUCEApplication::isStandaloneApp = true; \
JUCE_NAMESPACE::ScopedJuceInitialiser_GUI libraryInitialiser; \
return JUCE_NAMESPACE::JUCEApplication::main (argc, (const char**) argv, new AppClass()); \
JUCE_NAMESPACE::JUCEApplication::createInstance = &juce_CreateApplication; \
return JUCE_NAMESPACE::JUCEApplication::main (argc, (const char**) argv); \
}
#elif JUCE_WINDOWS
#ifdef _CONSOLE
#define START_JUCE_APPLICATION(AppClass) \
static JUCE_NAMESPACE::JUCEApplication* juce_CreateApplication() { return new AppClass(); } \
int main (int, char* argv[]) \
{ \
JUCE_NAMESPACE::JUCEApplication::isStandaloneApp = true; \
JUCE_NAMESPACE::ScopedJuceInitialiser_GUI libraryInitialiser; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams(), new AppClass()); \
JUCE_NAMESPACE::JUCEApplication::createInstance = &juce_CreateApplication; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams()); \
}
#elif ! defined (_AFXDLL)
#ifdef _WINDOWS_
#define START_JUCE_APPLICATION(AppClass) \
static JUCE_NAMESPACE::JUCEApplication* juce_CreateApplication() { return new AppClass(); } \
int WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int) \
{ \
JUCE_NAMESPACE::JUCEApplication::isStandaloneApp = true; \
JUCE_NAMESPACE::ScopedJuceInitialiser_GUI libraryInitialiser; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams(), new AppClass()); \
JUCE_NAMESPACE::JUCEApplication::createInstance = &juce_CreateApplication; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams()); \
}
#else
#define START_JUCE_APPLICATION(AppClass) \
static JUCE_NAMESPACE::JUCEApplication* juce_CreateApplication() { return new AppClass(); } \
int __stdcall WinMain (int, int, const char*, int) \
{ \
JUCE_NAMESPACE::JUCEApplication::isStandaloneApp = true; \
JUCE_NAMESPACE::ScopedJuceInitialiser_GUI libraryInitialiser; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams(), new AppClass()); \
JUCE_NAMESPACE::JUCEApplication::createInstance = &juce_CreateApplication; \
return JUCE_NAMESPACE::JUCEApplication::main (JUCE_NAMESPACE::PlatformUtilities::getCurrentCommandLineParams()); \
}
#endif
#endif


+ 1
- 1
src/core/juce_PlatformUtilities.h View File

@@ -226,7 +226,7 @@ private:
ScopedAutoReleasePool& operator= (const ScopedAutoReleasePool&);
};
#define JUCE_AUTORELEASEPOOL const ScopedAutoReleasePool pool;
#define JUCE_AUTORELEASEPOOL const JUCE_NAMESPACE::ScopedAutoReleasePool pool;
#else


+ 1
- 1
src/core/juce_StandardHeader.h View File

@@ -33,7 +33,7 @@
*/
#define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 52
#define JUCE_BUILDNUMBER 43
#define JUCE_BUILDNUMBER 44
/** Current Juce version number.


+ 1
- 1
src/gui/components/mouse/juce_MouseInputSource.cpp View File

@@ -375,7 +375,7 @@ public:
Component* current = getComponentUnderMouse();
if (current != 0)
Desktop::setMousePosition (current->getScreenBounds()
.getConstrainedPoint (current->getMouseXYRelative()));
.getConstrainedPoint (lastScreenPos));
}
isUnboundedMouseModeOn = enable;


+ 1
- 1
src/gui/components/windows/juce_AlertWindow.cpp View File

@@ -106,7 +106,7 @@ AlertWindow::AlertWindow (const String& title,
}
}
if (! JUCEApplication::isStandaloneApp)
if (! JUCEApplication::isStandaloneApp())
setAlwaysOnTop (true); // for a plugin, make it always-on-top because the host windows are often top-level
lookAndFeelChanged();


+ 1
- 1
src/gui/components/windows/juce_DialogWindow.cpp View File

@@ -68,7 +68,7 @@ public:
TempDialogWindow (const String& title, const Colour& colour, const bool escapeCloses)
: DialogWindow (title, colour, escapeCloses, true)
{
if (! JUCEApplication::isStandaloneApp)
if (! JUCEApplication::isStandaloneApp())
setAlwaysOnTop (true); // for a plugin, make it always-on-top because the host windows are often top-level
}


+ 4
- 1
src/gui/graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp View File

@@ -2176,7 +2176,10 @@ public:
{
const float fontHeight = font.getHeight();
const AffineTransform transform (AffineTransform::scale (fontHeight * font.getHorizontalScale(), fontHeight)
.translated (0.0f, -0.5f));
#if JUCE_MAC || JUCE_IOS
.translated (0.0f, -0.5f)
#endif
);
edgeTable = new EdgeTable (glyphPath.getBoundsTransformed (transform).getSmallestIntegerContainer().expanded (1, 0),
glyphPath, transform);


+ 3
- 0
src/io/files/juce_File.h View File

@@ -814,6 +814,9 @@ public:
*/
invokedExecutableFile,
/** In a plugin, this will return the path of the host executable. */
hostApplicationPath,
/** The directory in which applications normally get installed.
So on windows, this would be something like "c:\program files", on the


+ 10
- 0
src/native/linux/juce_linux_Files.cpp View File

@@ -166,6 +166,16 @@ const File File::getSpecialLocation (const SpecialLocationType type)
case currentApplicationFile:
return juce_getExecutableFile();
case hostApplicationPath:
{
unsigned int size = 8192;
HeapBlock<char> buffer;
buffer.calloc (size + 8);
readlink ("/proc/self/exe", buffer.getData(), size);
return String::fromUTF8 (buffer, size);
}
default:
jassertfalse; // unknown type?
break;


+ 3
- 3
src/native/linux/juce_linux_Messaging.cpp View File

@@ -253,7 +253,7 @@ namespace LinuxErrorHandling
{
DBG ("ERROR: connection to X server broken.. terminating.");
if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
MessageManager::getInstance()->stopDispatchLoop();
errorOccurred = true;
@@ -322,7 +322,7 @@ void MessageManager::doPlatformSpecificInitialisation()
// This is fatal! Print error and closedown
Logger::outputDebugString ("Failed to initialise xlib thread support.");
if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
Process::terminate();
return;
@@ -424,7 +424,7 @@ bool juce_dispatchNextMessageOnSystemQueue (bool returnIfNoPendingMessages)
{
LinuxErrorHandling::errorOccurred = true;
if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
Process::terminate();
break;


+ 1
- 0
src/native/mac/juce_iphone_MessageManager.mm View File

@@ -80,6 +80,7 @@ void MessageManager::runDispatchLoop()
void MessageManager::stopDispatchLoop()
{
[[[UIApplication sharedApplication] delegate] applicationWillTerminate: [UIApplication sharedApplication]];
exit (0); // iPhone apps get no mercy..
}


+ 3
- 3
src/native/mac/juce_iphone_MiscUtilities.mm View File

@@ -44,17 +44,17 @@ END_JUCE_NAMESPACE
- (void) applicationDidFinishLaunching: (UIApplication*) application
{
String dummy;
initialiseJuce_GUI();
if (! JUCEApplication::getInstance()->initialiseApp (dummy))
if (! JUCEApplication::createInstance()->initialiseApp (String::empty))
exit (0);
}
- (void) applicationWillTerminate: (UIApplication*) application
{
jassert (JUCEApplication::getInstance() != 0);
JUCEApplication::getInstance()->shutdownApp();
// need to do this stuff because the OS kills the process before our scope-based cleanup code gets executed..
delete JUCEApplication::getInstance();
shutdownJuce_GUI();
}


+ 10
- 0
src/native/mac/juce_mac_Files.mm View File

@@ -200,6 +200,16 @@ const File File::getSpecialLocation (const SpecialLocationType type)
: exe;
}
case hostApplicationPath:
{
unsigned int size = 8192;
HeapBlock<char> buffer;
buffer.calloc (size + 8);
_NSGetExecutablePath (buffer.getData(), &size);
return String::fromUTF8 (buffer, size);
}
default:
jassertfalse; // unknown type?
break;


+ 1
- 1
src/native/mac/juce_mac_MainMenu.mm View File

@@ -485,7 +485,7 @@ static NSMenu* createStandardAppMenu (NSMenu* menu, const String& appName,
static void rebuildMainMenu (const PopupMenu* extraItems)
{
// this can't be used in a plugin!
jassert (JUCEApplication::isStandaloneApp);
jassert (JUCEApplication::isStandaloneApp());
if (JUCEApplication::getInstance() != 0)
{


+ 1
- 1
src/native/mac/juce_mac_MessageManager.mm View File

@@ -204,7 +204,7 @@ using namespace JUCE_NAMESPACE;
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
{
oldDelegate = [NSApp delegate];
[NSApp setDelegate: self];


+ 0
- 9
src/native/mac/juce_mac_MiscUtilities.mm View File

@@ -59,15 +59,6 @@ void PlatformUtilities::addItemToDock (const File& file)
}
}
int PlatformUtilities::getOSXMinorVersionNumber()
{
SInt32 versionMinor = 0;
OSErr err = Gestalt (gestaltSystemVersionMinor, &versionMinor);
(void) err;
jassert (err == noErr);
return (int) versionMinor;
}
//==============================================================================
#if ! JUCE_ONLY_BUILD_CORE_LIBRARY


+ 2
- 2
src/native/mac/juce_mac_NSViewComponentPeer.mm View File

@@ -328,7 +328,7 @@ END_JUCE_NAMESPACE
//==============================================================================
- (void) mouseDown: (NSEvent*) ev
{
if (JUCEApplication::isStandaloneApp)
if (JUCEApplication::isStandaloneApp())
[self asyncMouseDown: ev];
else
// In some host situations, the host will stop modal loops from working
@@ -347,7 +347,7 @@ END_JUCE_NAMESPACE
- (void) mouseUp: (NSEvent*) ev
{
if (! JUCEApplication::isStandaloneApp)
if (! JUCEApplication::isStandaloneApp())
[self asyncMouseUp: ev];
else
// In some host situations, the host will stop modal loops from working


+ 1
- 0
src/native/mac/juce_mac_NativeIncludes.h View File

@@ -78,6 +78,7 @@
#include <ifaddrs.h>
#include <net/if_dl.h>
#include <mach/mach_time.h>
#include <mach-o/dyld.h>
#if MACOS_10_4_OR_EARLIER
#include <GLUT/glut.h>


+ 1
- 1
src/native/mac/juce_mac_OpenGLComponent.mm View File

@@ -317,7 +317,7 @@ void OpenGLPixelFormat::getAvailablePixelFormats (Component* /*component*/,
p = aglNextPixelFormat (p);
}*/
//jassertfalse //xxx can't see how you do this in cocoa!
//jassertfalse // can't see how you do this in cocoa!
}
#else


+ 15
- 3
src/native/mac/juce_mac_SystemStats.mm View File

@@ -132,13 +132,25 @@ const String SystemStats::getOperatingSystemName()
return "Mac OS X";
}
#if ! JUCE_IOS
int PlatformUtilities::getOSXMinorVersionNumber()
{
SInt32 versionMinor = 0;
OSErr err = Gestalt (gestaltSystemVersionMinor, &versionMinor);
(void) err;
jassert (err == noErr);
return (int) versionMinor;
}
#endif
bool SystemStats::isOperatingSystem64Bit()
{
#if JUCE_64BIT
#if JUCE_IOS
return false;
#elif JUCE_64BIT
return true;
#else
//xxx not sure how to find this out?..
return false;
return PlatformUtilities::getOSXMinorVersionNumber() >= 6;
#endif
}


+ 8
- 1
src/native/windows/juce_win32_Files.cpp View File

@@ -439,7 +439,14 @@ const File JUCE_CALLTYPE File::getSpecialLocation (const SpecialLocationType typ
GetModuleFileName (moduleHandle, dest, numElementsInArray (dest));
return File (String (dest));
}
break;
case hostApplicationPath:
{
WCHAR dest [MAX_PATH + 256];
dest[0] = 0;
GetModuleFileName (0, dest, numElementsInArray (dest));
return File (String (dest));
}
default:
jassertfalse; // unknown type?


Loading…
Cancel
Save