96 lines
3.0 KiB
C++
96 lines
3.0 KiB
C++
#if defined(SK_BUILD_FOR_MAC) && !defined(SK_USE_WXWIDGETS)
|
|
#include <Carbon/Carbon.h>
|
|
#include <unistd.h>
|
|
#include <cerrno>
|
|
#include "SkApplication.h"
|
|
#include "SkTypes.h"
|
|
|
|
extern void get_preferred_size(int*, int*, int*, int* );
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
|
|
#if 0
|
|
{
|
|
FILE* f = ::fopen("/whereami.txt", "w");
|
|
for (int i = 0; i < argc; i++)
|
|
fprintf(f, "[%d] %s\n", i, argv[i]);
|
|
::fclose(f);
|
|
}
|
|
#else
|
|
// argv[0] is set to the execution path of the application, e.g.
|
|
// /Users/caryclark/android/device/build/ide/xcode/animatorTest/build/Debug/animatorTest.app/Contents/MacOS/animatorTest
|
|
// the desired directory path is :
|
|
// /Users/caryclark/android/device/jsapps
|
|
// the variable (client-specific) part is :
|
|
// /Users/caryclark/android/
|
|
// since different applications share this library, they only have in common:
|
|
// {client}/device/build/ide/xcode/{application}
|
|
{
|
|
const char* applicationPath = argv[0];
|
|
const char* common = strstr(applicationPath, "build/ide/xcode/");
|
|
const char systemParent[] = "apps/";
|
|
if (common != 0) {
|
|
size_t prefixLength = common - applicationPath;
|
|
char* workingDirectory = new char[prefixLength + sizeof(systemParent)];
|
|
strncpy(workingDirectory, applicationPath, prefixLength);
|
|
strcpy(&workingDirectory[prefixLength], systemParent);
|
|
int error = chdir(workingDirectory);
|
|
if (error != 0) {
|
|
error = errno;
|
|
SkASSERT(error != ENOENT);
|
|
SkASSERT(error != ENOTDIR);
|
|
SkASSERT(error != EACCES);
|
|
SkASSERT(error != EIO);
|
|
SkASSERT(0);
|
|
}
|
|
delete workingDirectory;
|
|
}
|
|
}
|
|
#endif
|
|
IBNibRef nibRef;
|
|
WindowRef window;
|
|
|
|
OSStatus err;
|
|
|
|
// Create a Nib reference passing the name of the nib file (without the .nib extension)
|
|
// CreateNibReference only searches into the application bundle.
|
|
err = CreateNibReference(CFSTR("main"), &nibRef);
|
|
require_noerr( err, CantGetNibRef );
|
|
|
|
// Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar
|
|
// object. This name is set in InterfaceBuilder when the nib is created.
|
|
err = SetMenuBarFromNib(nibRef, CFSTR("MenuBar"));
|
|
require_noerr( err, CantSetMenuBar );
|
|
|
|
// Then create a window. "MainWindow" is the name of the window object. This name is set in
|
|
// InterfaceBuilder when the nib is created.
|
|
err = CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &window);
|
|
require_noerr( err, CantCreateWindow );
|
|
|
|
// We don't need the nib reference anymore.
|
|
DisposeNibReference(nibRef);
|
|
{
|
|
// if we get here, we can start our normal Skia sequence
|
|
application_init();
|
|
(void)create_sk_window(window);
|
|
int x =0, y =0, width =640, height=480;
|
|
get_preferred_size(&x, &y, &width, &height);
|
|
MoveWindow(window, x, y, false);
|
|
SizeWindow(window, width, height, false);
|
|
}
|
|
// The window was created hidden so show it.
|
|
ShowWindow( window );
|
|
|
|
// Call the event loop
|
|
RunApplicationEventLoop();
|
|
|
|
application_term();
|
|
|
|
CantCreateWindow:
|
|
CantSetMenuBar:
|
|
CantGetNibRef:
|
|
return err;
|
|
}
|
|
|
|
#endif |