void Font::loadFont(std::string filename, const int size, const int style) { if (fontCounter == 0 && TTF_Init() == -1) { logger->log("Unable to initialize SDL_ttf: " + std::string(TTF_GetError())); return; } fixDirSeparators(filename); TTF_Font *const font = openFont(filename.c_str(), size); if (!font) { logger->log("Font::Font: " + std::string(TTF_GetError())); return; } if (mFont) TTF_CloseFont(mFont); mFont = font; TTF_SetFontStyle(mFont, style); clear(); }
Font::Font(std::string filename, const int size, const int style) : mFont(nullptr), mCreateCounter(0), mDeleteCounter(0), mCleanTime(cur_time + CLEAN_TIME) { if (fontCounter == 0) { mSoftMode = imageHelper->useOpenGL() == RENDER_SOFTWARE; if (TTF_Init() == -1) { logger->error("Unable to initialize SDL_ttf: " + std::string(TTF_GetError())); } } if (!fontCounter) { strBuf = new char[65535]; memset(strBuf, 0, 65535); } ++fontCounter; fixDirSeparators(filename); mFont = openFont(filename.c_str(), size); if (!mFont) { logger->log("Error finding font " + filename); std::string backFile("fonts/dejavusans.ttf"); mFont = openFont(fixDirSeparators(backFile).c_str(), size); if (!mFont) { logger->error("Font::Font: " + std::string(TTF_GetError())); } } TTF_SetFontStyle(mFont, style); }
bool ThemeLoader::extractFileInZip( unzFile file, const string &rootDir, bool isWsz ) { // Read info for the current file char filenameInZip[256]; unz_file_info fileInfo; if( unzGetCurrentFileInfo( file, &fileInfo, filenameInZip, sizeof( filenameInZip), NULL, 0, NULL, 0 ) != UNZ_OK ) { return false; } // Convert the file name to lower case, because some winamp skins // use the wrong case... if( isWsz ) for( size_t i = 0; i < strlen( filenameInZip ); i++ ) filenameInZip[i] = tolower( filenameInZip[i] ); // Allocate the buffer void *pBuffer = malloc( ZIP_BUFFER_SIZE ); if( !pBuffer ) return false; // Get the path of the file OSFactory *pOsFactory = OSFactory::instance( getIntf() ); string fullPath = rootDir + pOsFactory->getDirSeparator() + fixDirSeparators( filenameInZip ); string basePath = getFilePath( fullPath ); // Extract the file if is not a directory if( basePath != fullPath ) { if( unzOpenCurrentFile( file ) ) { free( pBuffer ); return false; } makedir( basePath.c_str() ); FILE *fout = fopen( fullPath.c_str(), "wb" ); if( fout == NULL ) { msg_Err( getIntf(), "error opening %s", fullPath.c_str() ); free( pBuffer ); return false; } // Extract the current file int n; do { n = unzReadCurrentFile( file, pBuffer, ZIP_BUFFER_SIZE ); if( n < 0 ) { msg_Err( getIntf(), "error while reading zip file" ); free( pBuffer ); return false; } else if( n > 0 ) { if( fwrite( pBuffer, n , 1, fout) != 1 ) { msg_Err( getIntf(), "error while writing %s", fullPath.c_str() ); free( pBuffer ); return false; } } } while( n > 0 ); fclose(fout); if( unzCloseCurrentFile( file ) != UNZ_OK ) { free( pBuffer ); return false; } } free( pBuffer ); return true; }