//============================== // BitmapFontLocal::LoadImage bool BitmapFontLocal::LoadImage( OvrApkFile const & languagePackageFile, char const * imageName ) { // try to open the language pack apk int length = 0; void * packageBuffer = NULL; if ( languagePackageFile ) { ovr_ReadFileFromOtherApplicationPackage( languagePackageFile, imageName, length, packageBuffer ); } // one of the following conditions should be true here: // - we opened the language apk and read the texture file without error // - we opened the language apk and failed to open the texture file // - we failed to open the language apk if ( packageBuffer == NULL ) { ovr_ReadFileFromApplicationPackage( imageName, length, packageBuffer ); } bool result = false; if ( packageBuffer != NULL ) { result = LoadImageFromBuffer( imageName, (unsigned char const*)packageBuffer, length, ExtensionMatches( imageName, ".astc" ) ); free( packageBuffer ); } else { FILE * f = fopen( imageName, "rb" ); if ( f != NULL ) { size_t fsize = FileSize( f ); unsigned char * buffer = new unsigned char[fsize]; size_t countRead = fread( buffer, fsize, 1, f ); fclose( f ); f = NULL; if ( countRead == 1 ) { result = LoadImageFromBuffer( imageName, buffer, fsize, ExtensionMatches( imageName, ".astc" ) ); } delete [] buffer; } } if ( !result ) { LOG( "BitmapFontLocal::LoadImage: failed to load image '%s'", imageName ); } return result; }
CXlibToolkit::CXlibToolkit(void *parentWindow, CEditor *editor) { this->parentWindow = parentWindow; this->editor = editor; char *displayName = getenv("DISPLAY"); if (!displayName || !strlen(displayName)) { displayName = (char*)":0.0"; } if (!XInitThreads()) { fprintf(stderr, "Xlib threads support unavailable"); return; } this->display = XOpenDisplay(displayName); if (!parentWindow) { parentWindow = (void*)RootWindow(this->display, DefaultScreen(this->display)); } window = XCreateWindow(this->display, (Window)parentWindow, 0, 0, GUI_WIDTH, GUI_HEIGHT, 0, 24, InputOutput, CopyFromParent, 0, 0); gc = XCreateGC(this->display, window, 0, 0); XSelectInput(this->display, window, ButtonPressMask | ButtonReleaseMask | PointerMotionMask | ExposureMask | KeyPressMask); XMapWindow(this->display, window); XFlush(this->display); this->WM_TIMER = XInternAtom(this->display, "WM_TIMER" , false); this->WM_DELETE_WINDOW = XInternAtom(this->display, "WM_DELETE_WINDOW", false); XSetWMProtocols(this->display, window, &WM_DELETE_WINDOW, 1); offscreen = XCreatePixmap(this->display, window, GUI_WIDTH, GUI_HEIGHT, 24); memset(bmps, 0, sizeof(bmps)); bmps[BMP_CHARS ] = LoadImageFromFile(BMP_PATH"/chars.bmp" ); bmps[BMP_KNOB ] = LoadImageFromFile(BMP_PATH"/knob.bmp" ); bmps[BMP_KNOB2 ] = LoadImageFromFile(BMP_PATH"/knob2.bmp" ); bmps[BMP_KNOB3 ] = LoadImageFromFile(BMP_PATH"/knob3.bmp" ); bmps[BMP_KEY ] = LoadImageFromFile(BMP_PATH"/key.bmp" ); bmps[BMP_BG ] = LoadImageFromFile(BMP_PATH"/bg.bmp" ); bmps[BMP_BUTTONS] = LoadImageFromFile(BMP_PATH"/buttons.bmp"); bmps[BMP_OPS ] = LoadImageFromFile(BMP_PATH"/ops.bmp" ); if (!bmps[BMP_CHARS ]) bmps[BMP_CHARS ] = LoadImageFromBuffer(chars_bmp ); if (!bmps[BMP_KNOB ]) bmps[BMP_KNOB ] = LoadImageFromBuffer(knob_bmp ); if (!bmps[BMP_KNOB2 ]) bmps[BMP_KNOB2 ] = LoadImageFromBuffer(knob2_bmp ); if (!bmps[BMP_KNOB3 ]) bmps[BMP_KNOB3 ] = LoadImageFromBuffer(knob3_bmp ); if (!bmps[BMP_KEY ]) bmps[BMP_KEY ] = LoadImageFromBuffer(key_bmp ); if (!bmps[BMP_BG ]) bmps[BMP_BG ] = LoadImageFromBuffer(bg_bmp ); if (!bmps[BMP_BUTTONS]) bmps[BMP_BUTTONS] = LoadImageFromBuffer(buttons_bmp); if (!bmps[BMP_OPS ]) bmps[BMP_OPS ] = LoadImageFromBuffer(ops_bmp ); thread1Finished = true; thread2Finished = true; }
Pixmap CXlibToolkit::LoadImageFromFile(const char *path) { FILE *f = fopen(path, "rb"); if (!f) { return 0; } fseek(f, 0, SEEK_END); int size = ftell(f); fseek(f, 0, SEEK_SET); char *tmp = (char*)malloc(size); if (!fread(tmp, size, 1, f)) { free(tmp); fclose(f); return 0; } fclose(f); Pixmap result = LoadImageFromBuffer(tmp); free(tmp); return result; }