Source Code (Use browser search to find items of interest.)

Class Index

kview'KImageCanvas (./kdegraphics/kview/canvas.h:24)

class KImageCanvas : public QScrollView
{
	Q_OBJECT
public:
	enum Error { OK, BadPath, BadFormat, NoMemory };
	/**
	* KImageCanvas Constructor
	*/
	KImageCanvas( QWidget *parent = 0 );

	/**
	* KImageCanvas Destructor
	*/
	virtual ~KImageCanvas();

	/**
	* Check canvas status.
	* @return Status code
	* @see ::Error
	*/
	Error status() const;
public:
	/**
	*
	*/
	int load( const char *file, const char *URL=0, bool max = false );
	/**
	*
	*/
	bool save( const char *URL, const char *format=0 );

	/**
	* Resets the image to as loaded.
	*/
	void reset();

	/**
	* Clears the image to blank.
	*/
	void clear();
	
	/**
	* Transform the image by the matrix.
	*/
	void transformImage( const QWMatrix& mat );



	/**
	* Tile the image to the desktop
	*/
	void tileToDesktop() const;

	/**
	*
	*/
	void maxToDesktop() const;
	/**
	*
	*/
	void maxpectToDesktop() const;

	/**
	* Get the current image.
	*/
	QImage getImage() const;

	/**
	* Get the url for the current image.
	*/
	QString url() const;

	void copyImage( QPaintDevice *dest ) const;

	KVImageHolder *client() { return _client; }
	
public slots:
	void setImage( const QImage& );

	/**
	* Crop image to the current selection, if any.
	* If there is no selection, nothing happens.
	*/
	void cropImage();

	void maxToWin();
	void maxpectToWin();

	// image scrolling

	void pageDown() { verticalScrollBar()->addPage(); }
	void pageUp() { verticalScrollBar()->subtractPage(); }

	void lineDown() { verticalScrollBar()->addLine(); }
	void lineUp() { verticalScrollBar()->subtractLine(); }

	void pageRight() { horizontalScrollBar()->addPage(); }
	void pageLeft() { horizontalScrollBar()->subtractPage(); }

	void lineRight() { horizontalScrollBar()->addLine(); }
	void lineLeft() { horizontalScrollBar()->subtractLine(); }

protected:
	/**
	*
	*/
	void resizeEvent( QResizeEvent * );
	
	void mouseReleaseEvent( QMouseEvent * );

	/**
	* Sets the status.
	*/
	void setStatus( Error );

signals:
	/**
	*
	*/
	void imageSizeChanged();
    void contextPress(const QPoint&);

private:
	Error		_status;
	QString		_file;

	QSize		_originalSize;
	KVImageHolder	*_client;

	QPixmap		*_orig;

	/**
	* Returns a pixmap that is to be used for editing.
	*/
	QPixmap *transPixmap();
};

inline void KImageCanvas::setStatus( Error e )
{
	_status = e;
}

inline QString KImageCanvas::url() const
{
	return _file;
}

/**
* Image widget, used as child in canvas.
*/

kview'KImageCanvas::KImageCanvas() (./kdegraphics/kview/canvas.cpp:28)

KImageCanvas::KImageCanvas( QWidget *parent )
	: QScrollView( parent ),
	_status( OK ),
	_file( "" ),
	_client( 0 ),
	_orig( 0 )
{
	_client = new KVImageHolder( this );
	
	connect(_client, SIGNAL( contextPress(const QPoint&) ), 
		this, SIGNAL ( contextPress(const QPoint&) ));
	addChild( _client );

	_client->setAutoResize( TRUE );
	_client->hide();
}


kview'KImageCanvas::~KImageCanvas() (./kdegraphics/kview/canvas.cpp:45)

KImageCanvas::~KImageCanvas()
{
	delete _orig;
}

KImageCanvas::Error KImageCanvas::status() const
{
	return _status;
}


kview'KImageCanvas::load() (./kdegraphics/kview/canvas.cpp:55)

int KImageCanvas::load( const char *file, const char *URL,
	bool max )
{
	if( file == 0 ) {
		setStatus( BadPath );
		return 0;
	}

	QString realfile = file;
	bool std = false;

	if( realfile == "-") {
		// stdin
		std = true;
		realfile = loadStdin();

		if( realfile.isEmpty() ) {
			setStatus( BadPath );
			return 0;
		}
	}

	static int allocContext = 0;
	if( allocContext )  {
		QColor::destroyAllocContext( allocContext );
	}

	allocContext = QColor::enterAllocContext();

	QApplication::setOverrideCursor( WaitCursor );

	QPixmap newImage;
	bool loadOK = newImage.load( realfile );

	if( !loadOK && realfile.contains( ".tga", false ) ) {
		loadOK = newImage.load( realfile, "TGA" );
	}

	QColor::leaveAllocContext();

	if( std ) {
		unlink( realfile );
	}

	if( loadOK ) {
		delete _orig; // delete old buffered image
		_orig = 0;

		_client->move( 0, 0 );
		_originalSize = size();
		if ( max ) {
			maxpect( this, &newImage );
		}
		_client->setImagePix( newImage );
		_client->show();
		
		updateScrollBars();

		_file = ( URL ? URL : realfile.data() );
		setStatus( OK );
		setCaption( _file );
		QApplication::restoreOverrideCursor();
		return -1;
	}
	else {
		warning( "Couldn't open %s", realfile.data() );
		setStatus( BadPath );
	}

	QApplication::restoreOverrideCursor();
	return 0;
}


kview'KImageCanvas::save() (./kdegraphics/kview/canvas.cpp:128)

bool KImageCanvas::save( const char *urls, const char *format )
{
	if( urls == 0 ) {
		warning( "KImageCanvas::save called with null url" );
	}

	if( format == 0 ) {
		format = "BMP";
	}

	return _client->imagePix()->save( urls, format );
}


kview'KImageCanvas::reset() (./kdegraphics/kview/canvas.cpp:141)

void KImageCanvas::reset()
{
	if( _orig == 0 ) {
		return;
	}

	_client->setImagePix( *_orig );
	emit imageSizeChanged();
}


kview'KImageCanvas::clear() (./kdegraphics/kview/canvas.cpp:151)

void KImageCanvas::clear()
{
	_client->setBackgroundColor( QColor(0,0,0) );
	_client->resize( 0, 0 );
}


kview'KImageCanvas::transformImage() (./kdegraphics/kview/canvas.cpp:157)

void KImageCanvas::transformImage( const QWMatrix& mat )
{
	const QPixmap *image = transPixmap();

	if( image == 0 ) {
		return;
	}

	QApplication::setOverrideCursor( waitCursor );
	QPixmap newimage = _orig->xForm( mat );

	_client->clearSelection();
	_client->setImagePix( newimage );

	QApplication::restoreOverrideCursor();
}


kview'KImageCanvas::tileToDesktop() (./kdegraphics/kview/canvas.cpp:174)

void KImageCanvas::tileToDesktop() const
{

	const QPixmap *image = _client->imagePix();

	if( image == 0 ) {
		return;
	}

	qApp->desktop()->setBackgroundPixmap(
			*image );
}


kview'KImageCanvas::maxToDesktop() (./kdegraphics/kview/canvas.cpp:187)

void KImageCanvas::maxToDesktop() const
{
	if( _client->imagePix() == 0 )
		return;
	
	QPixmap image = *(_client->imagePix());

	int h = qApp->desktop()->height();
	int w = qApp->desktop()->width();

	image.convertFromImage(image.convertToImage().smoothScale(w,h));

	qApp->desktop()->setBackgroundPixmap( image );

}


kview'KImageCanvas::maxpectToDesktop() (./kdegraphics/kview/canvas.cpp:203)

void KImageCanvas::maxpectToDesktop() const
{
	if( _client->imagePix() == 0 )
		return;
	
	QPixmap image = *(_client->imagePix());

	double dh = (double)qApp->desktop()->height()/(double)image.height();
	double dw = (double)qApp->desktop()->width()/(double)image.width();
	double d = ( dh < dw ? dh : dw );
	
	image.convertFromImage(image.convertToImage().smoothScale(
		int(d*image.width()),
		int (d*image.height())));

	qApp->desktop()->setBackgroundPixmap( image );
}


kview'KImageCanvas::resizeEvent() (./kdegraphics/kview/canvas.cpp:232)

void KImageCanvas::resizeEvent( QResizeEvent *ev )
{
	QScrollView::resizeEvent( ev );

	emit imageSizeChanged();
}


kview'KImageCanvas::getImage() (./kdegraphics/kview/canvas.cpp:239)

QImage KImageCanvas::getImage() const
{
	return _client->imagePix()->convertToImage();
}


kview'KImageCanvas::setImage() (./kdegraphics/kview/canvas.cpp:244)

void KImageCanvas::setImage( const QImage& image )
{
	transPixmap();

	QPixmap pixmap;
	pixmap.convertFromImage( image );

	_client->setImagePix( pixmap );

	emit imageSizeChanged();
}


kview'KImageCanvas::transPixmap() (./kdegraphics/kview/canvas.cpp:256)

QPixmap *KImageCanvas::transPixmap()
{
        QPixmap *client = _client->imagePix();

	if( client == 0 ) {
		return 0;
	}

	if( _orig == 0 ) {
		_orig = new QPixmap( *client );
	}

	return client;
}


kview'KImageCanvas::cropImage() (./kdegraphics/kview/canvas.cpp:271)

void KImageCanvas::cropImage()
{
	QRect select = _client->selected();

	if ( select.isNull() ) {
		return;
	}

	transPixmap();

	QPixmap *oldpix = _client->imagePix();

	QPixmap newpix( select.width(), select.height() );
	
	bitBlt( &newpix, 0, 0, oldpix, select.left(),
		select.top(), select.width(), select.height(), CopyROP );

	_client->setImagePix( newpix );
	emit imageSizeChanged();
}



kview'KImageCanvas::maxToWin() (./kdegraphics/kview/canvas.cpp:329)

void KImageCanvas::maxToWin()
{
	transPixmap();

	if( _client->imagePix() == 0 )
		return;
	
	QPixmap image = *(_client->imagePix());

	image.convertFromImage(image.convertToImage().smoothScale(
			width(),height()));
	_client->setImagePix( image );
	
	emit imageSizeChanged();
}


kview'KImageCanvas::maxpectToWin() (./kdegraphics/kview/canvas.cpp:345)

void KImageCanvas::maxpectToWin()
{
	transPixmap();

	if( _client->imagePix() == 0 )
		return;
	
	QPixmap image = *(_client->imagePix());


	double dh = (double)height()/(double)image.height();
	double dw = (double)width()/(double)image.width();

	double d = ( dh < dw ? dh : dw );
	
	image.convertFromImage(image.convertToImage().smoothScale(int(d*image.width()),
								   int (d*image.height())));

	_client->setImagePix( image );
	emit imageSizeChanged();
}


kview'KImageCanvas::copyImage() (./kdegraphics/kview/canvas.cpp:367)

void KImageCanvas::copyImage( QPaintDevice *dest ) const
{
	QPainter painter( dest );
	painter.drawPixmap( 0, 0, *(_client->imagePix()) );
}


kview'KImageCanvas::mouseReleaseEvent() (./kdegraphics/kview/canvas.cpp:373)

void KImageCanvas::mouseReleaseEvent( QMouseEvent *ev )
{
	// wheel support
	// maybe one day this will work...

#if 0
	switch ( ev->button() ) {
		case 4: lineUp();	break;
		case 5: lineDown();	break;
		default:	
			QScrollView::mouseReleaseEvent( ev );
	}
#else
	QScrollView::mouseReleaseEvent( ev );
#endif

}

/*
******************************
* KVImageHolder implementation
*/


kview'KImageCanvas::url() (./kdegraphics/kview/canvas.h:166)

inline QString KImageCanvas::url() const
{
	return _file;
}

/**
* Image widget, used as child in canvas.
*/