Kross::Api::Object::Ptr Filter::process(Kross::Api::List::Ptr args) { PaintLayer* src = (PaintLayer*)args->item(0).data(); if(!m_filter->workWith( src->paintLayer()->paintDevice()->colorSpace())) { throw Kross::Api::Exception::Ptr( new Kross::Api::Exception( i18n("An error has occured in %1").arg("process") ) ); } QRect rect; if( args->count() >1) { uint x = Kross::Api::Variant::toVariant(args->item(1)).toUInt(); uint y = Kross::Api::Variant::toVariant(args->item(2)).toUInt(); uint w = Kross::Api::Variant::toVariant(args->item(3)).toUInt(); uint h = Kross::Api::Variant::toVariant(args->item(4)).toUInt(); rect = QRect(x, y, w, h); } else { QRect r1 = src->paintLayer()->paintDevice()->extent(); QRect r2 = src->paintLayer()->image()->bounds(); rect = r1.intersect(r2); } m_filter->process( src->paintLayer()->paintDevice(), src->paintLayer()->paintDevice(), m_config->filterConfiguration(), rect ); return 0; }