[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdeplasma-addons/dataengines/comic
From: Petri Damstén <petri.damsten () kdemail ! net>
Date: 2008-10-18 16:36:23
Message-ID: 1224347783.098027.20094.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 873058 by pdamsten:
* Add addHeader helper function for scripts to add header image to comic images
* Remove useDefaultImageHandler. We can use default image handling without setting it \
on/off.
* Coding style fixes
M +109 -57 comicproviderwrapper.cpp
M +20 -10 comicproviderwrapper.h
--- trunk/KDE/kdeplasma-addons/dataengines/comic/comicproviderwrapper.cpp \
#873057:873058 @@ -21,6 +21,8 @@
#include "comicprovider.h"
#include <QTimer>
+#include <QBuffer>
+#include <QPainter>
#include <KDebug>
#include <KStandardDirs>
#include <Plasma/Package>
@@ -28,63 +30,71 @@
#include <kross/core/interpreter.h>
#include <kross/core/manager.h>
-QStringList ComicProviderWrapper::m_extensions;
+QStringList ComicProviderWrapper::mExtensions;
QImage ImageWrapper::image() const
{
- return QImage::fromData( mData );
+ return mImage;
}
+void ImageWrapper::setImage( const QImage &image )
+{
+ mImage = image;
+}
+
QByteArray ImageWrapper::rawData() const
{
- return mData;
+ QByteArray data;
+ QBuffer buffer( &data );
+ mImage.save( &buffer );
+ return data;
}
void ImageWrapper::setRawData( const QByteArray &rawData )
{
- mData = rawData;
+ mImage = QImage::fromData( rawData );
}
ComicProviderWrapper::ComicProviderWrapper( ComicProviderKross *parent )
: QObject( parent ),
- m_action( 0 ),
- m_provider( parent ),
- m_useDefaultImageHandler( true )
+ mAction( 0 ),
+ mProvider( parent ),
+ mPackage( 0 )
{
QTimer::singleShot( 0, this, SLOT( init() ) );
}
ComicProviderWrapper::~ComicProviderWrapper()
{
+ delete mPackage;
}
void ComicProviderWrapper::init()
{
- const QString path = KStandardDirs::locate( "data", "plasma/comics/" + \
m_provider->pluginName() + "/" );
- kDebug() << path;
+ const QString path = KStandardDirs::locate( "data", "plasma/comics/" + \
mProvider->pluginName() + "/" ); if (!path.isEmpty()) {
Plasma::PackageStructure::Ptr structure = \
ComicProviderKross::packageStructure(); structure->setPath( path );
- Plasma::Package *package = new Plasma::Package( path, structure );
+ mPackage = new Plasma::Package( path, structure );
- if ( package->isValid() ) {
+ if ( mPackage->isValid() ) {
// package->filePath( "mainscript" ) returns empty if it does not exist
// We want to test extensions supported by kross with mainscript
- const QString mainscript = package->path() + structure->contentsPrefix() \
+
- structure->path( "mainscript" );
+ const QString mainscript = mPackage->path() + \
structure->contentsPrefix() + + \
structure->path( "mainscript" );
QFileInfo info( mainscript );
for ( int i = 0; i < extensions().count() && !info.exists(); ++i ) {
info.setFile( mainscript + extensions().value( i ) );
}
if ( info.exists() ) {
- m_action = new Kross::Action( parent(), m_provider->pluginName() );
- if ( m_action ) {
- m_action->addObject( this, "comic" );
- m_action->setFile( info.filePath() );
- m_action->trigger();
- m_functions = m_action->functionNames();
+ mAction = new Kross::Action( parent(), mProvider->pluginName() );
+ if ( mAction ) {
+ mAction->addObject( this, "comic" );
+ mAction->setFile( info.filePath() );
+ mAction->trigger();
+ mFunctions = mAction->functionNames();
callFunction( "init" );
}
@@ -95,7 +105,7 @@
const QStringList& ComicProviderWrapper::extensions() const
{
- if ( m_extensions.isEmpty() ) {
+ if ( mExtensions.isEmpty() ) {
Kross::InterpreterInfo* info;
QStringList list;
QString wildcards;
@@ -104,10 +114,10 @@
info = Kross::Manager::self().interpreterInfo( interpretername );
wildcards = info->wildcard();
wildcards.replace( "*", "" );
- m_extensions << wildcards.split( " " );
+ mExtensions << wildcards.split( " " );
}
}
- return m_extensions;
+ return mExtensions;
}
ComicProvider::IdentifierType ComicProviderWrapper::identifierType()
@@ -122,14 +132,13 @@
QImage ComicProviderWrapper::image()
{
- if ( m_useDefaultImageHandler ) {
- return m_image;
- }
ImageWrapper* img = qobject_cast<ImageWrapper*>( callFunction( "image" \
).value<QObject*>() );
- if ( img ) {
+ if ( functionCalled() && img ) {
+ kDebug();
return img->image();
}
- return QImage();
+ kDebug() << "default" << mKrossImage.image().size();
+ return mKrossImage.image();
}
QString ComicProviderWrapper::identifier()
@@ -164,13 +173,11 @@
void ComicProviderWrapper::pageRetrieved( int id, const QByteArray &data )
{
- if ( m_useDefaultImageHandler && id == Image ) {
- m_image = QImage::fromData( data );
- emit m_provider->finished( m_provider );
- } else if ( id == Image ) {
- m_krossImage.setRawData( data );
+ if ( id == Image ) {
+ mKrossImage.setRawData( data );
callFunction( "pageRetrieved", QVariantList() << id <<
- qVariantFromValue( qobject_cast<QObject*>( &m_krossImage ) ) \
); + qVariantFromValue( qobject_cast<QObject*>( &mKrossImage ) ) \
); + finished();
} else {
callFunction( "pageRetrieved", QVariantList() << id << data );
}
@@ -180,63 +187,64 @@
{
callFunction( "pageError", QVariantList() << id << message );
if ( !functionCalled() ) {
- emit m_provider->error( m_provider );
+ emit mProvider->error( mProvider );
}
}
QString ComicProviderWrapper::firstStripDate() const
{
- return m_provider->firstStripDate().toString( Qt::ISODate );
+ return mProvider->firstStripDate().toString( Qt::ISODate );
}
void ComicProviderWrapper::setFirstStripDate( const QString &date )
{
- m_provider->setFirstStripDate( QDate::fromString( date, Qt::ISODate ) );
+ mProvider->setFirstStripDate( QDate::fromString( date, Qt::ISODate ) );
}
int ComicProviderWrapper::firstStripNumber() const
{
- return m_provider->firstStripNumber();
+ return mProvider->firstStripNumber();
}
void ComicProviderWrapper::setFirstStripNumber( int number )
{
- m_provider->setFirstStripNumber( number );
+ mProvider->setFirstStripNumber( number );
}
QString ComicProviderWrapper::comicAuthor() const
{
- return m_provider->comicAuthor();
+ return mProvider->comicAuthor();
}
void ComicProviderWrapper::setComicAuthor( const QString &author )
{
- m_provider->setComicAuthor( author );
+ mProvider->setComicAuthor( author );
}
void ComicProviderWrapper::finished() const
{
- emit m_provider->finished( m_provider );
+ kDebug();
+ emit mProvider->finished( mProvider );
}
void ComicProviderWrapper::error() const
{
- emit m_provider->error( m_provider );
+ emit mProvider->error( mProvider );
}
QString ComicProviderWrapper::requestedDate() const
{
- return m_provider->requestedDate().toString( Qt::ISODate );
+ return mProvider->requestedDate().toString( Qt::ISODate );
}
int ComicProviderWrapper::requestedNumber() const
{
- return m_provider->requestedNumber();
+ return mProvider->requestedNumber();
}
QString ComicProviderWrapper::requestedString() const
{
- return m_provider->requestedString();
+ return mProvider->requestedString();
}
void ComicProviderWrapper::requestPage( const QString &url, int id, const \
QVariantMap &infos ) @@ -246,33 +254,77 @@
foreach ( const QString& key, infos.keys() ) {
map[key] = infos[key].toString();
}
- m_provider->requestPage( KUrl( url ), id, map );
+ mProvider->requestPage( KUrl( url ), id, map );
}
bool ComicProviderWrapper::functionCalled() const
{
- return m_funcFound;
+ return mFuncFound;
}
QVariant ComicProviderWrapper::callFunction( const QString &name, const QVariantList \
&args ) {
- if ( m_action ) {
- m_funcFound = m_functions.contains( name );
- if ( m_funcFound ) {
- return m_action->callFunction( name, args );
+ if ( mAction ) {
+ mFuncFound = mFunctions.contains( name );
+ if ( mFuncFound ) {
+ return mAction->callFunction( name, args );
}
}
return QVariant();
}
-void ComicProviderWrapper::setUseDefaultImageHandler( bool useDefaultImageHandler )
+void ComicProviderWrapper::addHeader( const QString &name, PositionType position )
{
- m_useDefaultImageHandler = useDefaultImageHandler;
-}
+ const QString headerRelLoc( mPackage->filePath( "images", name ) );
+ const QImage header( headerRelLoc );
+ const QImage comic = mKrossImage.image();
+ int height = 0;
+ int width = 0;
-bool ComicProviderWrapper::useDefaultImageHandler() const
-{
- return m_useDefaultImageHandler;
+ switch (position) {
+ case Top:
+ case Bottom:
+ height = header.height() + comic.height();
+ width = ( header.width() >= comic.width() ) ? header.width() : \
comic.width(); + break;
+ case Left:
+ case Right:
+ height = ( header.height() >= comic.height() ) ? header.height() : \
comic.height(); + width = header.width() + comic.width();
+ break;
+ }
+
+ QImage image = QImage( QSize( width, height ), QImage::Format_RGB32 );
+ image.fill( header.pixel( QPoint( 0, 0 ) ) );
+
+ QPainter painter( &image );
+
+ // center and draw the Images
+ QPoint headerPos;
+ QPoint comicPos;
+
+ switch (position) {
+ case Top:
+ headerPos = QPoint( ( ( width - header.width() ) / 2 ), 0 );
+ comicPos = QPoint( ( ( width - comic.width() ) / 2 ), header.height() );
+ break;
+ case Bottom:
+ headerPos = QPoint( ( ( width - header.width() ) / 2 ), comic.height() );
+ comicPos = QPoint( ( ( width - comic.width() ) / 2 ), 0 );
+ break;
+ case Left:
+ headerPos = QPoint( 0, ( ( height - header.height() ) / 2 ) );
+ comicPos = QPoint( header.width(), ( ( height - comic.height() ) / 2 ) );
+ break;
+ case Right:
+ headerPos = QPoint( comic.width(), ( ( height - header.height() ) / 2 ) );
+ comicPos = QPoint( 0, ( ( height - comic.height() ) / 2 ) );
+ break;
+ }
+ kDebug() << width << height << headerPos << comicPos;
+ painter.drawImage( headerPos, header );
+ painter.drawImage( comicPos, comic );
+ mKrossImage.setImage( image );
}
#include "comicproviderwrapper.moc"
--- trunk/KDE/kdeplasma-addons/dataengines/comic/comicproviderwrapper.h \
#873057:873058 @@ -28,6 +28,9 @@
namespace Kross {
class Action;
}
+namespace Plasma {
+ class Package;
+}
class ComicProviderKross;
class ImageWrapper : public QObject
@@ -37,11 +40,12 @@
Q_PROPERTY( QByteArray rawData READ rawData WRITE setRawData )
public:
QImage image() const;
+ void setImage( const QImage &image );
QByteArray rawData() const;
void setRawData( const QByteArray &rawData );
private:
- QByteArray mData;
+ QImage mImage;
};
class ComicProviderWrapper : public QObject
@@ -49,11 +53,17 @@
Q_OBJECT
Q_ENUMS( IdentifierType )
Q_ENUMS( RequestType )
+ Q_ENUMS( PositionType )
Q_PROPERTY( QString firstStripDate READ firstStripDate WRITE \
setFirstStripDate )
Q_PROPERTY( int firstStripNumber READ firstStripNumber WRITE \
setFirstStripNumber )
Q_PROPERTY( QString comicAuthor READ comicAuthor WRITE setComicAuthor )
- Q_PROPERTY( bool useDefaultImageHandler READ useDefaultImageHandler WRITE \
setUseDefaultImageHandler ) public:
+ enum PositionType {
+ Left = 0,
+ Top,
+ Right,
+ Bottom
+ };
enum RequestType {
Page = 0,
Image,
@@ -99,6 +109,7 @@
int requestedNumber() const;
QString requestedString() const;
void requestPage( const QString &url, int id, const QVariantMap &infos = \
QVariantMap() ); + void addHeader( const QString &name, PositionType position \
= Top );
void init();
@@ -107,14 +118,13 @@
const QStringList& extensions() const;
private:
- Kross::Action *m_action;
- ComicProviderKross *m_provider;
- QStringList m_functions;
- bool m_funcFound;
- bool m_useDefaultImageHandler;
- QImage m_image;
- ImageWrapper m_krossImage;
- static QStringList m_extensions;
+ Kross::Action *mAction;
+ ComicProviderKross *mProvider;
+ QStringList mFunctions;
+ bool mFuncFound;
+ ImageWrapper mKrossImage;
+ static QStringList mExtensions;
+ Plasma::Package *mPackage;
};
#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic