< prev index next >

src/java.desktop/share/native/libsplashscreen/splashscreen_impl.c

Print this page




   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 #include "splashscreen_impl.h"
  27 #include "splashscreen_gfx_impl.h"
  28 





  29 int splashIsVisible = 0;
  30 
  31 Splash *
  32 SplashGetInstance()
  33 {
  34     static Splash splash;
  35     static int preInitialized = 0;
  36     if (!preInitialized) {
  37         memset(&splash, 0, sizeof(Splash));
  38         splash.currentFrame = -1;
  39         preInitialized = 1;
  40     }
  41     return &splash;
  42 }
  43 
  44 SPLASHEXPORT void
  45 SplashSetFileJarName(const char* fileName, const char* jarName) {
  46     Splash *splash = SplashGetInstance();
  47 
  48     free(splash->fileName);


 375 
 376 int SplashStreamInitFile(SplashStream * pStream, const char* filename) {
 377     pStream->arg.stdio.f = fopen(filename, "rb");
 378     pStream->read = readFile;
 379     pStream->peek = peekFile;
 380     pStream->close = closeFile;
 381     return pStream->arg.stdio.f != 0;
 382 }
 383 
 384 int SplashStreamInitMemory(SplashStream * pStream, void* pData, int size) {
 385     pStream->arg.mem.pData = (unsigned char*)pData;
 386     pStream->arg.mem.pDataEnd = (unsigned char*)pData + size;
 387     pStream->read = readMem;
 388     pStream->peek = peekMem;
 389     pStream->close = closeMem;
 390     return 1;
 391 }
 392 
 393 SPLASHEXPORT int
 394 SplashGetScaledImgNameMaxPstfixLen(const char *fileName){
 395     return strlen(fileName) + strlen(".java-scale-200") + 1;


























































 396 }



   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 #include "splashscreen_impl.h"
  27 #include "splashscreen_gfx_impl.h"
  28 #define BUFF_SIZE 1024
  29 #ifdef _MSC_VER
  30 # ifndef snprintf
  31 #       define snprintf _snprintf
  32 # endif
  33 #endif
  34 int splashIsVisible = 0;
  35 
  36 Splash *
  37 SplashGetInstance()
  38 {
  39     static Splash splash;
  40     static int preInitialized = 0;
  41     if (!preInitialized) {
  42         memset(&splash, 0, sizeof(Splash));
  43         splash.currentFrame = -1;
  44         preInitialized = 1;
  45     }
  46     return &splash;
  47 }
  48 
  49 SPLASHEXPORT void
  50 SplashSetFileJarName(const char* fileName, const char* jarName) {
  51     Splash *splash = SplashGetInstance();
  52 
  53     free(splash->fileName);


 380 
 381 int SplashStreamInitFile(SplashStream * pStream, const char* filename) {
 382     pStream->arg.stdio.f = fopen(filename, "rb");
 383     pStream->read = readFile;
 384     pStream->peek = peekFile;
 385     pStream->close = closeFile;
 386     return pStream->arg.stdio.f != 0;
 387 }
 388 
 389 int SplashStreamInitMemory(SplashStream * pStream, void* pData, int size) {
 390     pStream->arg.mem.pData = (unsigned char*)pData;
 391     pStream->arg.mem.pDataEnd = (unsigned char*)pData + size;
 392     pStream->read = readMem;
 393     pStream->peek = peekMem;
 394     pStream->close = closeMem;
 395     return 1;
 396 }
 397 
 398 SPLASHEXPORT int
 399 SplashGetScaledImgNameMaxPstfixLen(const char *fileName){
 400     return strlen(fileName) + strlen("@100pct") + 1;
 401 }
 402 
 403 jboolean GetScaledImageName(const char *fileName,char *scaleImageName, 
 404         float *scaleFactor, const size_t scaledImageLength) {
 405     FILE *fp = NULL;
 406     if (*scaleFactor > 1.0) {
 407         char strDpi[BUFF_SIZE];
 408         char *dupFileName = strdup(fileName);
 409         char *fileExtension = strrchr(dupFileName, '.');
 410         size_t length = 0;
 411         int retVal = 0;
 412         if((*scaleFactor * 100) != ((int)(*scaleFactor)) * 100) {
 413             snprintf(strDpi, BUFF_SIZE, "%s%d%s", "@", (int)(*scaleFactor * 100), "pct");
 414         } else {
 415             snprintf(strDpi, BUFF_SIZE, "%s%d%s", "@", (int)(*scaleFactor), "x");
 416         }
 417         /*File is missing extension */
 418         if (fileExtension == NULL) {
 419             length = strlen(dupFileName) +
 420                 strlen(strDpi) + 1;
 421             if (length > scaledImageLength) {
 422                 *scaleFactor = 1;
 423                 free(dupFileName);
 424                 return JNI_FALSE;
 425             }
 426             retVal = snprintf(scaleImageName, length, "%s%s", dupFileName,
 427                 strDpi);
 428             if (retVal < 0 || (retVal != length - 1)) {
 429                 *scaleFactor = 1;
 430                 free(dupFileName);
 431                 return JNI_FALSE;
 432             }
 433         } else {
 434             int length_Without_Ext = fileExtension - dupFileName;
 435             length = length_Without_Ext + strlen(strDpi) +
 436                 strlen(fileExtension) + 1;
 437             if (length > scaledImageLength) {
 438                 *scaleFactor = 1;
 439                 free(dupFileName);
 440                 return JNI_FALSE;
 441             }
 442             retVal = snprintf(scaleImageName, length, "%.*s%s%s",
 443                 length_Without_Ext, dupFileName, strDpi, fileExtension);
 444             if (retVal < 0 || (retVal != length - 1)) {
 445                 *scaleFactor = 1;
 446                 free(dupFileName);
 447                 return JNI_FALSE;
 448             }
 449         }
 450         free(dupFileName);
 451         if (!(fp = fopen(scaleImageName, "r"))) {
 452             *scaleFactor = 1;
 453             return JNI_FALSE;
 454         }
 455         fclose(fp);
 456         return JNI_TRUE;
 457     }
 458     return JNI_FALSE;
 459 }
 460 
< prev index next >