You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
260 lines
6.5 KiB
260 lines
6.5 KiB
// -*- c++ -*-
|
|
|
|
/*
|
|
* Copyright (C) 2003, Richard J. Moore <rich@kde.org>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public License
|
|
* along with this library; see the file COPYING.LIB. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include <tqfile.h>
|
|
#include <kjsembed/global.h>
|
|
#include <kjsembed/jsopaqueproxy.h>
|
|
#include <kjsembed/jsvalueproxy.h>
|
|
#include <kjsembed/jsbinding.h>
|
|
#include <tqvariant.h>
|
|
|
|
#include "image_imp.h"
|
|
|
|
namespace KJSEmbed {
|
|
namespace Bindings {
|
|
|
|
|
|
ImageImp::ImageImp( KJS::ExecState *exec, int id )
|
|
: JSProxyImp(exec), mid(id)
|
|
{
|
|
}
|
|
|
|
ImageImp::~ImageImp()
|
|
{
|
|
}
|
|
|
|
void ImageImp::addBindings( KJS::ExecState *exec, KJS::Object &object ) {
|
|
|
|
if( !JSProxy::checkType(object, JSProxy::ValueProxy, "TTQImage") ) return;
|
|
|
|
JSProxy::MethodTable methods[] = {
|
|
{ Methodwidth, "width" },
|
|
{ Methodheight, "height" },
|
|
{ Methoddepth, "depth" },
|
|
{ MethodisOk, "isOk" },
|
|
{ Methodpixmap, "pixmap" },
|
|
{ Methodload, "load" },
|
|
{ Methodsave, "save" },
|
|
{ MethodsetFormat, "setFormat" },
|
|
{ MethodsmoothScale, "smoothScale" },
|
|
{ MethodsmoothScaleMin, "smoothScaleMin" },
|
|
{ MethodsetPixmap, "setPixmap" },
|
|
{ MethodinvertPixels, "invertPixels" },
|
|
{ Methodpixel, "pixel"},
|
|
{ MethodsetPixel, "setPixel"},
|
|
{ Methodmirror, "mirror" },
|
|
{ 0, 0 }
|
|
};
|
|
JSProxy::addMethods<ImageImp>(exec, methods, object);
|
|
|
|
}
|
|
|
|
KJS::Value ImageImp::call( KJS::ExecState *exec, KJS::Object &self, const KJS::List &args ) {
|
|
if( !JSProxy::checkType(self, JSProxy::ValueProxy, "TTQImage") ) return KJS::Value();
|
|
JSValueProxy *op = JSProxy::toValueProxy( self.imp() );
|
|
img = op->toVariant().toImage();
|
|
|
|
KJS::Value retValue = KJS::Value();
|
|
switch ( mid ) {
|
|
// case Methodfilename:
|
|
// retValue = KJS::String(filename());
|
|
// break;
|
|
// case Methodformat:
|
|
// retValue = KJS::String(format());
|
|
// break;
|
|
case Methodwidth:
|
|
retValue = KJS::Number(width());
|
|
break;
|
|
case Methodheight:
|
|
retValue = KJS::Number(height());
|
|
break;
|
|
case Methoddepth:
|
|
retValue = KJS::Number(depth());
|
|
break;
|
|
case MethodisOk:
|
|
retValue = KJS::Boolean(isOk());
|
|
break;
|
|
case Methodpixmap:
|
|
{
|
|
retValue = convertToValue(exec, pixmap());
|
|
break;
|
|
}
|
|
|
|
case Methodload: {
|
|
TTQString arg0 = extractTQString( exec, args, 0);
|
|
retValue = KJS::Boolean( load( arg0 ));
|
|
break;
|
|
}
|
|
case Methodsave: {
|
|
TTQString arg0 = extractTQString( exec, args, 0);
|
|
TTQString arg1 = extractTQString( exec, args, 1);
|
|
retValue = KJS::Boolean( save( arg0, arg1 ));
|
|
break;
|
|
}
|
|
case MethodsetFormat: {
|
|
TTQString arg0 = extractTQString( exec, args, 0);
|
|
setFormat( arg0 );
|
|
break;
|
|
}
|
|
case MethodsmoothScale: {
|
|
int arg0 = extractInt( exec, args, 0);
|
|
int arg1 = extractInt( exec, args, 1);
|
|
smoothScale(arg0, arg1);
|
|
break;
|
|
}
|
|
case MethodsmoothScaleMin: {
|
|
int arg0 = extractInt( exec, args, 0);
|
|
int arg1 = extractInt( exec, args, 1);
|
|
smoothScaleMin(arg0, arg1);
|
|
break;
|
|
}
|
|
case MethodsetPixmap: {
|
|
TTQPixmap pix = extractTQPixmap(exec, args, 0);
|
|
setPixmap(pix);
|
|
break;
|
|
}
|
|
case MethodinvertPixels: {
|
|
bool alpha = extractBool( exec, args, 0);
|
|
img.invertPixels(alpha);
|
|
break;
|
|
}
|
|
case Methodpixel: {
|
|
int x = extractInt(exec, args, 0);
|
|
int y = extractInt(exec, args, 1);
|
|
retValue = KJS::Number( img.pixel(x, y) );
|
|
break;
|
|
}
|
|
case MethodsetPixel: {
|
|
int x = extractInt(exec, args, 0);
|
|
int y = extractInt(exec, args, 1);
|
|
uint col = extractUInt(exec, args, 2);
|
|
img.setPixel(x, y, col);
|
|
break;
|
|
}
|
|
case Methodmirror:
|
|
{
|
|
if ( img.isNull())
|
|
break;
|
|
|
|
bool arg0 = extractBool( exec, args, 0);
|
|
bool arg1 = extractBool( exec, args, 1);
|
|
img = img.mirror( arg0, arg1 );
|
|
}
|
|
default:
|
|
kdWarning() << "Image has no method " << mid << endl;
|
|
break;
|
|
}
|
|
|
|
op->setValue(img);
|
|
return retValue;
|
|
}
|
|
|
|
int ImageImp::width() const {
|
|
|
|
return !img.isNull() ? img.width() : 0;
|
|
}
|
|
|
|
int ImageImp::height() const {
|
|
return !img.isNull() ? img.height() : 0;
|
|
}
|
|
|
|
int ImageImp::depth() const {
|
|
return !img.isNull() ? img.depth() : 0;
|
|
}
|
|
|
|
bool ImageImp::isOk() const {
|
|
return !img.isNull();
|
|
}
|
|
|
|
TTQPixmap ImageImp::pixmap() const {
|
|
if ( img.isNull() )
|
|
return TTQPixmap();
|
|
|
|
TTQPixmap pix;
|
|
pix.convertFromImage( img );
|
|
return pix;
|
|
}
|
|
|
|
void ImageImp::setPixmap( const TTQPixmap &pix ) {
|
|
if ( img.isNull() )
|
|
img = TTQImage();
|
|
|
|
img = pix.convertToImage();
|
|
}
|
|
|
|
TTQString ImageImp::format() const {
|
|
return fmt;
|
|
}
|
|
|
|
TTQString ImageImp::filename() const {
|
|
return nm;
|
|
}
|
|
|
|
void ImageImp::setFormat( const TTQString &f ) {
|
|
fmt = f;
|
|
}
|
|
|
|
bool ImageImp::load( const TTQString &filename ) {
|
|
|
|
if ( !img.isNull() )
|
|
img = TTQImage();
|
|
|
|
nm = filename;
|
|
fmt = TTQImageIO::imageFormat( filename );
|
|
bool ok = img.load( filename );
|
|
if ( !ok ) {
|
|
kdWarning() << "Error loading " << filename << endl;
|
|
img = TTQImage();
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
bool ImageImp::save( const TTQString &filename, const TTQString &fmt ) {
|
|
|
|
if ( img.isNull() ) {
|
|
kdWarning() << "Attempt to save a null image to '" << filename << "'" << endl;
|
|
return false;
|
|
}
|
|
|
|
bool ok = img.save( filename, fmt.isNull() ? "PNG" : fmt.ascii() );
|
|
if ( ok )
|
|
nm = filename;
|
|
|
|
return ok;
|
|
}
|
|
|
|
void ImageImp::smoothScale( int w, int h ) {
|
|
if ( img.isNull())
|
|
return;
|
|
img = img.smoothScale( w, h );
|
|
}
|
|
|
|
void ImageImp::smoothScaleMin( int w, int h ) {
|
|
if ( img.isNull())
|
|
return;
|
|
img = img.smoothScale( w, h, TTQImage::ScaleMin );
|
|
}
|
|
|
|
|
|
} // namespace KJSEmbed::Bindings
|
|
} // namespace KJSEmbed
|
|
|