summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiemm/oimagescrollview.cpp30
1 files changed, 11 insertions, 19 deletions
diff --git a/libopie2/opiemm/oimagescrollview.cpp b/libopie2/opiemm/oimagescrollview.cpp
index 68b06af..30a8fba 100644
--- a/libopie2/opiemm/oimagescrollview.cpp
+++ b/libopie2/opiemm/oimagescrollview.cpp
@@ -87,25 +87,25 @@ void OImageScrollView::loadJpeg(bool interncall)
QString param;
bool real_load = false;
if (AutoScale()) {
if (!interncall) {
int wid, hei;
wid = QApplication::desktop()->width();
hei = QApplication::desktop()->height();
if (hei>wid) {
wid = hei;
} else {
hei = wid;
}
- param = QString( "Fast Shrink( 3 ) Scale( %1, %2, ScaleFree)" ).arg( wid ).arg( hei );
+ param = QString( "Fast Shrink( 3 ) Scale( %1, %2, ScaleMin)" ).arg( wid ).arg( hei );
odebug << "Load jpeg scaled \"" << param << "\"" << oendl;
iio.setParameters(param.latin1());
setImageScaledLoaded(true);
real_load = true;
}
} else {
if (ImageScaledLoaded()||!interncall) {
odebug << "Load jpeg unscaled" << oendl;
real_load = true;
}
setImageScaledLoaded(false);
}
@@ -116,45 +116,47 @@ void OImageScrollView::loadJpeg(bool interncall)
_original_data = iio.read() ? iio.image() : QImage();
{
QCopEnvelope env( "QPE/System", "notBusy(QString)" );
env << "Image loaded";
}
}
}
void OImageScrollView::setImage( const QString& path ) {
odebug << "load new image " << oendl;
if (m_lastName == path) return;
m_lastName = path;
+ _original_data = QImage();
QString itype = QImage::imageFormat(m_lastName);
odebug << "Image type = " << itype << oendl;
if (itype == "JPEG") {
setImageIsJpeg(true);
loadJpeg();
} else {
{
QCopEnvelope( "QPE/System", "busy()" );
}
setImageIsJpeg(false);
_original_data.load(path);
_original_data.convertDepth(QPixmap::defaultDepth());
_original_data.setAlphaBuffer(false);
{
QCopEnvelope env( "QPE/System", "notBusy(QString)" );
env << "Image loaded";
}
}
_image_data = QImage();
if (FirstResizeDone()) {
generateImage();
+ if (isVisible()) viewport()->repaint(true);
}
}
/* should be called every time the QImage changed it content */
void OImageScrollView::init()
{
odebug << "init " << oendl;
/*
* create the zoomer
* and connect ther various signals
*/
@@ -341,57 +343,62 @@ void OImageScrollView::rotate_into_data(Rotation r)
default:
dest = _original_data;
break;
}
}
_image_data = dest;
}
void OImageScrollView::generateImage()
{
Rotation r = Rotate0;
- if (_original_data.isNull()) return;
+ _pdata = QPixmap();
+ if (_original_data.isNull()) {
+ emit imageSizeChanged( _image_data.size() );
+ if (_zoomer) _zoomer->setImage( _image_data );
+ return;
+ }
{
QCopEnvelope( "QPE/System", "busy()" );
}
if (width()>height()&&_original_data.width()<_original_data.height() ||
width()<height()&&_original_data.width()>_original_data.height()) {
if (AutoRotate()) r = Rotate90;
}
+
odebug << " r = " << r << oendl;
- if (AutoScale()) {
+ if (AutoScale() && (_original_data.width()>width() || _original_data.height() > height()) ) {
if (!_image_data.size().isValid()||width()>_image_data.width()||height()>_image_data.height()) {
odebug << "Rescaling data" << oendl;
if (r==Rotate0) {
_image_data = _original_data;
} else {
rotate_into_data(r);
}
}
rescaleImage(width(),height());
resizeContents(_image_data.width(),_image_data.height());
} else if (!FirstResizeDone()||r!=m_last_rot||_image_data.width()==0) {
if (r==Rotate0) {
_image_data = _original_data;
} else {
rotate_into_data(r);
}
m_last_rot = r;
resizeContents(_image_data.width(),_image_data.height());
}
_pdata.convertFromImage(_image_data);
-
/*
* update the zoomer
*/
check_zoomer();
emit imageSizeChanged( _image_data.size() );
rescaleImage( 128, 128 );
/*
* move scrollbar
*/
if (_zoomer) {
_zoomer->setGeometry( viewport()->width()-_image_data.width()/2, viewport()->height()-_image_data.height()/2,
_image_data.width()/2, _image_data.height()/2 );
@@ -466,45 +473,30 @@ void OImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clip
} else if (y+h>_pdata.height()){
y = _pdata.height()-h;
}
if (erase||_original_data.hasAlphaBuffer()) {
p->fillRect(clipx,clipy,clipw,cliph,white);
}
p->drawPixmap(clipx,clipy,_pdata,x,y,w,h);
}
/* using the real geometry points and not the translated points is wanted! */
void OImageScrollView::viewportMouseMoveEvent(QMouseEvent* e)
{
- odebug << "Move X and Y " << e->x() << " " << e->y() << oendl;
int mx, my;
mx = e->x();
my = e->y();
if (_mouseStartPosX!=-1 && _mouseStartPosY!=-1) {
int diffx = _mouseStartPosX-mx;
int diffy = _mouseStartPosY-my;
-#if 0
- QScrollBar*xbar = horizontalScrollBar();
- QScrollBar*ybar = verticalScrollBar();
- if (xbar->value()+diffx>xbar->maxValue()) {
- diffx = xbar->maxValue()-xbar->value();
- } else if (xbar->value()+diffx<0) {
- diffx=0-xbar->value();
- }
- if (ybar->value()+diffy>ybar->maxValue()) {
- diffy = ybar->maxValue()-ybar->value();
- } else if (ybar->value()+diffy<0) {
- diffy=0-ybar->value();
- }
-#endif
scrollBy(diffx,diffy);
}
_mouseStartPosX=mx;
_mouseStartPosY=my;
}
void OImageScrollView::contentsMousePressEvent ( QMouseEvent * e)
{
odebug << " X and Y " << e->x() << " " << e->y() << oendl;
/* this marks the beginning of a possible mouse move. Due internal reasons of QT
the geometry values here may real differ from that set in MoveEvent (I don't know
why). For getting them in real context, we use the first move-event to set the start