Example #1
0
void KprSoundSetup()
{
	FskErr err = kFskErrNone;
	FskMediaPropertyValueRecord ambientAudio = {kFskMediaPropertyTypeInteger, {kFskAudioOutCategoryAmbient}};
#if FSK_EXTENSION_EMBED
#else
	char* applicationPath = NULL;
	char* libraryPath = NULL;
#if TARGET_OS_WIN32
	char* libraryName = "mediareader.dll";
#else
	char* libraryName = "mediareader.so";
#endif
	FskLibrary library = NULL;
#endif
	
	if (gSoundChannel) goto bail;
	
#if FSK_EXTENSION_EMBED
	FskMediaReaderNewProc = FskMediaReaderNew;
	FskMediaReaderDisposeProc = FskMediaReaderDispose;
	FskMediaReaderExtractProc = FskMediaReaderExtract;
	FskMediaReaderGetPropertyProc = FskMediaReaderGetProperty;
	FskMediaReaderGetTrackProc = FskMediaReaderGetTrack;
	FskMediaReaderStartProc = FskMediaReaderStart;
	FskMediaReaderStopProc = FskMediaReaderStop;
	FskMediaReaderTrackGetPropertyProc = FskMediaReaderTrackGetProperty;
#else
	applicationPath = FskGetApplicationPath();
	bailIfNULL(applicationPath);
	bailIfError(FskMemPtrNewClear(FskStrLen(applicationPath) + FskStrLen(libraryName) + 1, &libraryPath));
	FskStrCopy(libraryPath, applicationPath);
	FskStrCat(libraryPath, libraryName);
	bailIfError(FskLibraryLoad(&library, libraryPath));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderNew", &FskMediaReaderNewProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderDispose", &FskMediaReaderDisposeProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderExtract", &FskMediaReaderExtractProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderGetProperty", &FskMediaReaderGetPropertyProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderGetTrack", &FskMediaReaderGetTrackProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderStart", &FskMediaReaderStartProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderStop", &FskMediaReaderStopProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderTrackGetProperty", &FskMediaReaderTrackGetPropertyProc));
#endif
	bailIfError(FskSndChannelNew(&gSoundChannel, 0, kFskAudioFormatUndefined, 0));
	FskTimeCallbackNew(&gSoundTimer);

	FskSndChannelSetProperty(gSoundChannel, kFskMediaPropertyAudioCategory, &ambientAudio);

bail:
#if FSK_EXTENSION_EMBED
#else
	if (err)
		FskLibraryUnload(library);
	else
		FskMemPtrDispose(library);
	FskMemPtrDispose(libraryPath);
	FskMemPtrDispose(applicationPath);
#endif
	return;
}
Example #2
0
////////////// Main and Init /////////////////
static void FskGtkWindowInit(void *refcon)
{
	FskWindow 		fskWindow = (FskWindow)refcon;
	FskGtkWindow	gtkWin = (FskGtkWindow)fskWindow->gtkWin;
	GtkWidget		*win;
	GdkPixbuf		*iconBuf;

	// Ubuntu Unity prevent signals to reach menu inside menubars. Disable it!
	setenv("UBUNTU_MENUPROXY", "0", true);
	
	// Start GTK special initialization
	XInitThreads(); //fix a xcb issue happened when using multithread gtk, see http://stackoverflow.com/a/18690540/472927
	gtk_init(NULL, NULL);

	gtkWin->owner = fskWindow;
	gtkWin->window = win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_default_size((GtkWindow*)win, 800, 600);

	//	Set App Icon
	char *iconPath = FskStrDoCat(FskGetApplicationPath(), "fsk.png");
	iconBuf = gdk_pixbuf_new_from_file(iconPath, NULL);
	if(iconBuf != NULL) {
		gtk_window_set_icon(GTK_WINDOW(win), iconBuf);
		g_object_unref(G_OBJECT(iconBuf));
	}
	FskMemPtrDispose(iconPath);

	gtkWin->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
	gtk_container_add(GTK_CONTAINER(win), gtkWin->vbox);
	gtk_widget_show(gtkWin->vbox);

	gtkWin->menubar = gtk_menu_bar_new();
	gtk_widget_show(gtkWin->menubar);

	gtkWin->da = gtk_drawing_area_new();

	gtk_widget_show(gtkWin->da);

	gtkWin->accelGroup = gtk_accel_group_new();
	gtk_window_add_accel_group(GTK_WINDOW(win), gtkWin->accelGroup);

	FskMutexNew(&gtkWin->bufMutex, "drawAreaBuffer");
	FskMutexNew(&gtkWin->menuMutex, "GTKMenuItems");
	gtkWin->menuStatus = true;

	gtkWin->queue = g_async_queue_new();
	gtk_widget_add_events(GTK_WIDGET(win), GDK_EXPOSURE_MASK | GDK_KEY_PRESS_MASK);
	gtk_widget_add_events(GTK_WIDGET(gtkWin->da), GDK_ALL_EVENTS_MASK);

	g_signal_connect(win, "destroy", 			G_CALLBACK(app_quit), gtkWin);
	g_signal_connect(win, "key-press-event", 	G_CALLBACK(on_key_press), gtkWin);
	g_signal_connect(win, "key-release-event", 	G_CALLBACK(on_key_release), gtkWin);
	g_signal_connect(win, "configure-event", 	G_CALLBACK(configure_event_win), gtkWin);
	g_signal_connect(win, "window-state-event", G_CALLBACK(window_state_cb), fskWindow);

	// If want to resize draw-area, it will be the event receiver.
	g_signal_connect(gtkWin->da, "configure-event", 	G_CALLBACK(on_configure_event_cb), gtkWin);
	g_signal_connect(gtkWin->da, "draw", 				G_CALLBACK(draw_callback), gtkWin);
	g_signal_connect(gtkWin->da, "button-press-event", 	G_CALLBACK(on_button_press), gtkWin);
	g_signal_connect(gtkWin->da, "button-release-event",G_CALLBACK(on_button_release), gtkWin);
	g_signal_connect(gtkWin->da, "motion-notify-event", G_CALLBACK(on_motion_notify), gtkWin);
	g_signal_connect(gtkWin->da, "scroll-event", G_CALLBACK(on_scroll_cb), gtkWin);

	gtk_box_pack_start(GTK_BOX(gtkWin->vbox), gtkWin->menubar, FALSE, TRUE, 0);
	gtk_box_pack_start(GTK_BOX(gtkWin->vbox), gtkWin->da, TRUE, TRUE, 0); // Set all to true!
	
	gtk_widget_show_all(win);
}
Example #3
0
FskErr FskECMAScriptLoadLibrary(const char *name)
{
	FskErr err = kFskErrBadData;
	FskLibraryLoadProc libLoad;
	char *extension = NULL, *symbolName = NULL, *dot, *slash, *fullPath = NULL, *temp = NULL;
	FskLibrary library = NULL;
	char* root = NULL;
	FskFileInfo itemInfo;

	FskDebugStr("FskECMAScriptLoadLibrary: %s", name);
	dot = FskStrRChr(name, '.');
	slash = FskStrRChr(name, '/');
	if ((NULL == dot) || (slash && (slash > dot))) {
#if TARGET_OS_WIN32
		extension = ".dll";
#elif TARGET_OS_MAC || TARGET_OS_LINUX
		extension = ".so";
#elif TARGET_OS_KPL
		extension = (char*)KplECMAScriptGetExtension();
#endif
	}

	if (extension)
		fullPath = FskStrDoCat(name, extension);
	else
		fullPath = FskStrDoCopy(name);

	if (kFskErrNone != FskFileGetFileInfo(fullPath, &itemInfo)) {
#if TARGET_OS_ANDROID
		char *libDir;
		libDir = FskStrDoCat(gAndroidCallbacks->getStaticDataDirCB(), "../lib/lib");
		temp = FskStrDoCat(libDir, fullPath);
		FskMemPtrDispose(libDir);
#else
		root = FskGetApplicationPath();
		temp = FskStrDoCat(root, fullPath);
		FskMemPtrDispose(root);
#endif
		if (kFskErrNone != FskFileGetFileInfo(temp, &itemInfo)) {
			FskDebugStr(" - no file: %s", temp);
			goto bail;
		}
		FskMemPtrDispose(fullPath);
		fullPath = temp;
		temp = NULL;
	}

	err = FskLibraryLoad(&library, fullPath);
	FskDebugStr(" - try: %s -> %d", fullPath, err);
	if (err) goto bail;

	symbolName = FskStrDoCat(name, "_fskLoad");

	if ((kFskErrNone == FskLibraryGetSymbolAddress(library, symbolName, &libLoad)) ||
		(kFskErrNone == FskLibraryGetSymbolAddress(library, "fskLoad", &libLoad))) {

		err = (libLoad)(library);
		FskDebugStr(" - symbolName: %x -> %d", libLoad, err);
		if (err)
			goto bail;

		err = kFskErrNone;
	}

bail:
	if (err) {
		FskLibraryUnload(library);
	}

	FskMemPtrDispose(symbolName);
	FskMemPtrDispose(fullPath);

	return err;
}
Example #4
0
FskErr FskEnvironmentInitialize(void)
{
	char *appPath;

	gEnvironment = FskAssociativeArrayNew();

	appPath = FskGetApplicationPath();
	FskEnvironmentSet("applicationPath", appPath);
	FskMemPtrDispose(appPath);

#if TARGET_OS_KPL
	KplEnvironmentInitialize(gEnvironment);
#elif TARGET_OS_ANDROID
	FskEnvironmentSet("application", "PLAY");
#elif TARGET_OS_WIN32 || TARGET_OS_MAC || TARGET_OS_LINUX
	FskEnvironmentSet("application", FSK_APPLICATION);
#else
	FskEnvironmentSet("application", "PLAY");
#endif

#if TARGET_OS_WIN32
	{
	char name[256], *nameTemp = NULL;
	UInt16 nameW[256];
	char num[32];
	DWORD nameSize = sizeof(nameW) / sizeof(UInt16);
	EXTENDED_NAME_FORMAT exNameFormat = NameSamCompatible;

	if (GetUserNameExW(exNameFormat, (LPWSTR)nameW, &nameSize)) {
		FskTextUnicode16LEToUTF8(nameW, nameSize * 2, &nameTemp, NULL);
		FskStrCopy(name, nameTemp);
		FskEnvironmentSet("loginName", name);
		FskMemPtrDispose(nameTemp);
	}

	FskEnvironmentSet("OS", "Windows");
	FskStrNumToStr(gWindowsVersionInfo.dwMajorVersion, name, sizeof(name));
	FskStrCat(name, ".");
	FskStrNumToStr(gWindowsVersionInfo.dwMinorVersion, num, sizeof(num));
	FskStrCat(name, num);
	FskEnvironmentSet("OSVersion", name);
	}
#elif TARGET_OS_MAC
	{
		struct utsname un;
		char name[256], *model;
		SInt32 gen;
	#if TARGET_OS_IPHONE
		FskEnvironmentSet("OS", "iPhone");
	#else
		FskEnvironmentSet("OS", "Mac");
	#endif
		FskCocoaSystemGetVersion(name);
		FskEnvironmentSet("OSVersion", name);
		if (uname(&un) == 0) {
			model = un.machine;
			if (FskStrCompareWithLength(model, "iPhone", 6) == 0)
				gen = FskStrToNum(model + 6);
			else if (FskStrCompareWithLength(model, "iPad", 4) == 0) {
				gen = FskStrToNum(model + 4);
				if (gen == 3) {
					SInt32 minor = FskStrToNum(model + 6);
					if (minor == 4)	/* 4th gen */
						gen = 5;
					else
						gen = 4;	/* Only the 3rd gen iPad doesn't follow the numbering system */
				}
				else
					gen += 2;
			}
			else if (FskStrCompareWithLength(model, "iPod", 4) == 0) {
				gen = FskStrToNum(model + 4);
				if (gen > 1)
					--gen;
			}
			else
				gen = 99;
		}
		else {
			model = "unknown";
			gen = 99;
		}
		FskEnvironmentSet("Model", model);
		FskStrNumToStr(gen, name, sizeof(name));
		FskEnvironmentSet("Generation", name);
	}
		
#elif TARGET_OS_LINUX
	{
	struct utsname name;
	uname(&name);

	if (getlogin())
		FskEnvironmentSet("loginName", getlogin());
	else
		FskEnvironmentSet("loginName", "User");
	FskEnvironmentSet("OS", name.sysname);
	FskEnvironmentSet("OSVersion", name.release);		//@@
	}
#endif

	return kFskErrNone;
}