/* * Class: com_google_gwt_dev_shell_moz_LowLevelMoz * Method: _executeScriptWithInfo * Signature: (ILjava/lang/String;Ljava/lang/String;I)Z */ extern "C" JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_moz_LowLevelMoz__1executeScriptWithInfo (JNIEnv* env, jclass llClass, jint scriptObjectInt, jstring code, jstring file, jint line) { Tracer tracer("LowLevelMoz._executeScriptWithInfo"); JStringWrap jcode(env, code); if (!jcode.jstr()) { tracer.setFail("null code string"); return JNI_FALSE; } JStringWrap jfile(env, file); if (!jfile.str()) { tracer.setFail("null file name"); return JNI_FALSE; } tracer.log("code=%s, file=%s, line=%d", jcode.str(), jfile.str(), line); JSContext* cx = JsRootedValue::currentContext(); nsCOMPtr<nsIScriptContext> scriptContext(GetScriptContextFromJSContext(cx)); nsIScriptGlobalObject* scriptObject = NS_REINTERPRET_CAST(nsIScriptGlobalObject*, scriptObjectInt); JSObject* scriptWindow = reinterpret_cast<JSObject*>(scriptObject->GetGlobalJSObject()); nsXPIDLString scriptString; scriptString = jcode.jstr(); nsXPIDLString aRetValue; PRBool aIsUndefined; if (NS_FAILED(scriptContext->EvaluateString(scriptString, scriptWindow, 0, jfile.str(), line, 0, aRetValue, &aIsUndefined))) { tracer.setFail("EvaluateString failed"); return JNI_FALSE; } return JNI_TRUE; }
// ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- bool Texture::save(std::string filename) { if (!filename.length()) { Log::printf("Texture::save failed to save the texture file %s (reason: filename empty)\n"); return false; } juce::File jfile(juce::File::getCurrentWorkingDirectory().getChildFile(filename.c_str())); juce::String jext=jfile.getFileExtension().toLowerCase(); if (jext==".tga") { if (!writeTga(filename,this)) return false; } else { juce::ScopedPointer<juce::ImageFileFormat> jiff; if (jext==".jpg" || jext==".jpeg") jiff=new juce::JPEGImageFormat(); else if (jext==".png" ) jiff=new juce::PNGImageFormat(); else if (jext==".git" ) jiff=new juce::GIFImageFormat(); juce::Image jimg(bpp==8? (juce::Image::SingleChannel) : (bpp==24? juce::Image::RGB : juce::Image::ARGB),width,height,false); if (!jimg.isValid()) { Log::printf("Texture::save failed to save the texture file %s \n",filename.c_str()); return false; } if (!jiff) { Log::printf("Texture::save failed to save the texture file %s (reason: unsupported extension)\n",filename.c_str()); return false; } unsigned char* src=this->buffer; //Alpha if (bpp==8) { for (unsigned int Y=0;Y<height;Y++) { for (unsigned int X=0;X<width ;X++) { juce::Colour colour(src[0],src[0],src[0],src[0]); jimg.setPixelAt(X,height-Y-1,colour); //mirror y src+=1; }} } //RGB else if (bpp==24) { for (unsigned int Y=0;Y<height;Y++) { for (unsigned int X=0;X<width ;X++) { juce::Colour colour(src[0],src[1],src[2]); jimg.setPixelAt(X,height-Y-1,colour); //mirror y src+=3; }} } //RGBA else if (bpp==32) { for (unsigned int Y=0;Y<height;Y++) { for (unsigned int X=0;X<width ;X++) { juce::Colour colour(src[0],src[1],src[2],src[3]); jimg.setPixelAt(X,height-Y-1,colour); //mirror y src+=4; }} } if (jfile.existsAsFile()) jfile.deleteFile(); juce::FileOutputStream jstream(jfile); if (jstream.failedToOpen() || !jiff->writeImageToStream(jimg,jstream)) { Log::printf("Texture::save failed to save the texture file %s (reason: failedToOpen or writeImageToStream failed)\n",filename.c_str()); return false; } } this->filename=filename; return true; }
//------------------------------------------------------------------------ //------------------------------------------------------------------------ SmartPointer<Texture> Texture::open(std::string filename,bool bUseCacheIfPossible,bool bCacheInMemory) { if (!filename.length()) { Log::printf("Texture::open cannot open texture because filename is empty\n"); return SmartPointer<Texture>(); } //use cache? if (bUseCacheIfPossible) { if (textures_in_cache.find(Utils::ToLower(filename))!=textures_in_cache.end()) { //Log::printf("Opened texture file %s from cache (already in memory)\n",Filename.c_str()); return textures_in_cache[Utils::ToLower(filename)]; } } //opening from disk juce::File jfile(juce::File::getCurrentWorkingDirectory().getChildFile(filename.c_str())); juce::String jext=jfile.getFileExtension().toLowerCase(); SmartPointer<Texture> ret; if (jext==".tga") { ret=readTga(filename); if (!ret) return ret; //failed } else { juce::Image jimg=juce::ImageFileFormat::loadFrom(jfile); if (!jimg.isValid()) { Log::printf("Texture::open cannot open texture file %s \n",filename.c_str()); return SmartPointer<Texture>(); } int width = jimg.getWidth(); int height = jimg.getHeight(); int bpp = jimg.getFormat()==juce::Image::ARGB? 32 : (jimg.getFormat()==juce::Image::RGB? 24 : (jimg.getFormat()==juce::Image::SingleChannel? 8:0)); if((width == 0) || (height == 0) || !(bpp==24 || bpp==32 || bpp==8)) { Log::printf("Texture::open failed to load the texture file %s (reason unsupported type bpp=%d width=%d height=%d\n",filename.c_str(),bpp,width,height); return SmartPointer<Texture>(); } ret=SmartPointer<Texture>(new Texture(width,height,bpp,0)); unsigned char* dst=ret->buffer; //Alpha if (bpp==8) { for (int Y=0;Y<height;Y++) { for (int X=0;X<width ;X++) { juce::Colour colour=jimg.getPixelAt(X,height-Y-1); //mirror y *dst++=colour.getAlpha(); }} } //RGB else if (bpp==24) { for (int Y=0;Y<height;Y++) { for (int X=0;X<width ;X++) { juce::Colour colour=jimg.getPixelAt(X,height-Y-1); //mirror y *dst++=colour.getRed (); *dst++=colour.getGreen(); *dst++=colour.getBlue (); }} } //RGBA else if (bpp==32) { for (int Y=0;Y<height;Y++) { for (int X=0;X<width ;X++) { juce::Colour colour=jimg.getPixelAt(X,height-Y-1); //mirror y *dst++=colour.getRed (); *dst++=colour.getGreen(); *dst++=colour.getBlue (); *dst++=colour.getAlpha(); }} } } Log::printf("image file %s loaded from disk width(%d) height(%d) bpp(%d)\n",filename.c_str(),ret->width,ret->height,ret->bpp); if (bCacheInMemory) textures_in_cache[Utils::ToLower(filename)]=ret; ret->filename=filename; return ret; }