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.
tdewebdev/quanta/dialogs/tagdialogs/pictureview.cpp

104 lines
2.8 KiB

/***************************************************************************
pictureview.cpp - description
-------------------
begin : Mon Nov 29 1999
copyright : (C) 1999 by Dmitry Poplavsky & Yacovlev Alexander
email : pdima@mail.univ.kiev.ua
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "pictureview.h"
#include "pictureview.moc"
#include "tqpainter.h"
#include <tqimage.h>
PictureView::PictureView(TQWidget *parent, char *file, const char *name ) : TQFrame(parent,name)
{
if ( file ) {
pix = new TQImage(file);
picwidth = pix->width();
picheight = pix->height();
x_of = 0;
y_of = 0;
scale();
} else {
pix = new TQImage();
picwidth = 0;
picheight = 0;
x_of = 0;
y_of = 0;
}
setFrameStyle ( Box|Sunken );
}
PictureView::~PictureView()
{
}
void PictureView::paintEvent( TQPaintEvent * e )
{
TQPainter p;
p.begin( this );
p.drawImage( x_of, y_of, *pix );
p.end();
TQFrame::paintEvent(e);
}
void PictureView::resizeEvent ( TQResizeEvent * e){
scale();
TQFrame::resizeEvent(e);
}
/** set image */
void PictureView::slotSetImage(const TQString& file)
{
pix->load( file );
picwidth = pix->width();
picheight = pix->height();
scale();
repaint();
}
/** try scale image */
void PictureView::scale(){
float width_ot,height_ot;
width_ot = 1;
height_ot = 1;
x_of = y_of = 0;
if ( picwidth > size().width() ) width_ot = (float)size().width()/(float)picwidth;
else x_of = (size().width()-picwidth)/2;
if ( picheight > size().height() ) height_ot = (float)size().height()/(float)picheight;
else y_of = (size().height()-picheight)/2;
if ( width_ot < 1 || height_ot < 1) {
if ( width_ot < height_ot) {
*pix = pix->smoothScale( (int)(width_ot*picwidth), (int)(width_ot*picheight));
y_of = ( size().height()-(int)(width_ot*picheight) )/2;
}
else {
*pix = pix->smoothScale( (int)(height_ot*picwidth), (int)(height_ot*picheight));
x_of = ( size().width()-(int)(height_ot*picwidth) )/2;
}
picwidth = size().width();
picheight = size().height();
}
}