author | alwin <alwin> | 2004-04-05 22:09:25 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-04-05 22:09:25 (UTC) |
commit | 266b184c615022484b988e1638be768b11c0c19b (patch) (side-by-side diff) | |
tree | b2560b3a64c49db414fa950fc3ef4670e25cd5ca /noncore/graphics/opie-eye/gui/imagescrollview.cpp | |
parent | 930abeed35ee6dd3aaec491f13d400f825b9d9d1 (diff) | |
download | opie-266b184c615022484b988e1638be768b11c0c19b.zip opie-266b184c615022484b988e1638be768b11c0c19b.tar.gz opie-266b184c615022484b988e1638be768b11c0c19b.tar.bz2 |
yeah - autoresize and autoscale now have toggle-buttons and the image display
respect these buttons
ToDo:
find a good way for prescaled loading of images if autoScale is on (in respect
to autorotate and so on)
Diffstat (limited to 'noncore/graphics/opie-eye/gui/imagescrollview.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/graphics/opie-eye/gui/imagescrollview.cpp | 56 |
1 files changed, 46 insertions, 10 deletions
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.cpp b/noncore/graphics/opie-eye/gui/imagescrollview.cpp index 7d83e29..ee20f40 100644 --- a/noncore/graphics/opie-eye/gui/imagescrollview.cpp +++ b/noncore/graphics/opie-eye/gui/imagescrollview.cpp @@ -23,40 +23,70 @@ ImageScrollView::ImageScrollView (const QImage&img, QWidget * parent, const char ImageScrollView::ImageScrollView (const QString&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit) :QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(img),scale_to_fit(always_scale), rotate_to_fit(rfit),first_resize_done(false) { init(); } void ImageScrollView::setImage(const QImage&img) { _image_data = QImage(); _original_data=img; - first_resize_done = false; - init(); + if (first_resize_done) { + generateImage(); + } } void ImageScrollView::setImage( const QString& path ) { - + odebug << "load new image " << oendl; + _original_data.load(path); + _image_data = QImage(); + if (first_resize_done) { + generateImage(); + } } /* should be called every time the QImage changed it content */ void ImageScrollView::init() { + odebug << "init " << oendl; viewport()->setBackgroundColor(white); - if (_original_data.size().isValid()) { + if (first_resize_done) { + last_rot = Rotate0; + generateImage(); + odebug << "reinit display " << oendl; + } else if (_original_data.size().isValid()) { resizeContents(_original_data.width(),_original_data.height()); } - last_rot = Rotate0; +} + +void ImageScrollView::setAutoRotate(bool how) +{ + /* to avoid double repaints */ + if (rotate_to_fit != how) { + rotate_to_fit = how; + _image_data = QImage(); + generateImage(); + } +} + +void ImageScrollView::setAutoScale(bool how) +{ + scale_to_fit = how; + if (!how) { + rotate_to_fit = false; + } + _image_data = QImage(); + generateImage(); } ImageScrollView::~ImageScrollView() { } void ImageScrollView::rescaleImage(int w, int h) { if (_image_data.width()==w && _image_data.height()==h) { return; } double hs = (double)h / (double)_image_data.height() ; @@ -172,53 +202,59 @@ void ImageScrollView::rotate_into_data(Rotation r) } } break; default: dest = _original_data; break; } } _image_data = dest; } -void ImageScrollView::resizeEvent(QResizeEvent * e) +void ImageScrollView::generateImage() { - odebug << "ImageScrollView resizeEvent" << oendl; - QScrollView::resizeEvent(e); Rotation r = Rotate0; if (width()>height()&&_original_data.width()<_original_data.height() || width()<height()&&_original_data.width()>_original_data.height()) { if (rotate_to_fit) r = Rotate90; } odebug << " r = " << r << oendl; if (scale_to_fit) { 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(width()-10,height()-10); - } else if (!first_resize_done||r!=last_rot) { + resizeContents(_image_data.width(),_image_data.height()); + } else if (!first_resize_done||r!=last_rot||_image_data.width()==0) { if (r==Rotate0) { _image_data = _original_data; } else { rotate_into_data(r); } last_rot = r; resizeContents(_image_data.width(),_image_data.height()); } +} + +void ImageScrollView::resizeEvent(QResizeEvent * e) +{ + odebug << "ImageScrollView resizeEvent" << oendl; + QScrollView::resizeEvent(e); + generateImage(); first_resize_done = true; } void ImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clipw, int cliph) { int w = clipw; int h = cliph; int x = clipx; int y = clipy; bool erase = false; if (!_image_data.size().isValid()) { |