author | alwin <alwin> | 2004-04-22 23:48:23 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-04-22 23:48:23 (UTC) |
commit | ba10e43945b15753e0438cd0176cfa61d61c7391 (patch) (side-by-side diff) | |
tree | 114d7531958a85adc7605e54a0128561f9d4f0eb | |
parent | d93cb43bb2c79a9a8357e195fcdfd8ff140f8a75 (diff) | |
download | opie-ba10e43945b15753e0438cd0176cfa61d61c7391.zip opie-ba10e43945b15753e0438cd0176cfa61d61c7391.tar.gz opie-ba10e43945b15753e0438cd0176cfa61d61c7391.tar.bz2 |
reworked the painting algorithm again, hopefully now it works in all cases
-rw-r--r-- | libopie2/opiemm/oimagescrollview.cpp | 46 |
1 files changed, 16 insertions, 30 deletions
diff --git a/libopie2/opiemm/oimagescrollview.cpp b/libopie2/opiemm/oimagescrollview.cpp index 73df3ff..3f2699a 100644 --- a/libopie2/opiemm/oimagescrollview.cpp +++ b/libopie2/opiemm/oimagescrollview.cpp @@ -37,49 +37,49 @@ OImageScrollView::OImageScrollView( QWidget* parent, const char* name, WFlags f OImageScrollView::OImageScrollView (const QImage&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit) :QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(img), m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("") { _zoomer = 0; m_states[AUTO_SCALE]=always_scale; m_states[AUTO_ROTATE]=rfit; m_states[FIRST_RESIZE_DONE]=false; m_states[IMAGE_IS_JPEG]=false; m_states[IMAGE_SCALED_LOADED]=false; m_states[SHOW_ZOOMER]=true; _original_data.convertDepth(QPixmap::defaultDepth()); - _original_data.setAlphaBuffer(false); + //_original_data.setAlphaBuffer(false); init(); } OImageScrollView::OImageScrollView (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(),m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("") { _zoomer = 0; m_states.resize(SCROLLVIEW_BITSET_SIZE); m_states[AUTO_SCALE]=always_scale; m_states[AUTO_ROTATE]=rfit; m_states[FIRST_RESIZE_DONE]=false; m_states[IMAGE_IS_JPEG]=false; m_states[IMAGE_SCALED_LOADED]=false; m_states[SHOW_ZOOMER]=true; init(); setImage(img); } void OImageScrollView::setImage(const QImage&img) { _image_data = QImage(); _original_data=img; _original_data.convertDepth(QPixmap::defaultDepth()); - _original_data.setAlphaBuffer(false); + //_original_data.setAlphaBuffer(false); m_lastName = ""; setImageIsJpeg(false); setImageScaledLoaded(false); if (FirstResizeDone()) { generateImage(); } } void OImageScrollView::loadJpeg(bool interncall) { if (m_lastName.isEmpty()) return; QImageIO iio( m_lastName, 0l ); @@ -118,25 +118,25 @@ void OImageScrollView::setImage( const QString& path ) { 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 { setImageIsJpeg(false); _original_data.load(path); _original_data.convertDepth(QPixmap::defaultDepth()); - _original_data.setAlphaBuffer(false); + //_original_data.setAlphaBuffer(false); } _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; @@ -425,67 +425,53 @@ void OImageScrollView::keyPressEvent(QKeyEvent * e) e->accept(); } else if (e->key()==Qt::Key_Down) { scrollBy(0,dy); e->accept(); } else { e->ignore(); } QScrollView::keyPressEvent(e); } void OImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clipw, int cliph) { + if (!_pdata.size().isValid()) { + p->fillRect(clipx,clipy,clipw,cliph, backgroundColor()); + return; + } + int w = clipw; int h = cliph; int x = clipx; int y = clipy; bool erase = false; - if (!_pdata.size().isValid()) { - p->fillRect(clipx,clipy,clipw,cliph, backgroundColor()); - return; - } - if (w>_pdata.width()) { - w=_pdata.width(); - x = 0; + w = _pdata.width()-x; erase = true; - } else if (x+w>_pdata.width()){ - x = _pdata.width()-w; } - if (h>_pdata.height()) { - h=_pdata.height(); - y = 0; + h = _pdata.height()-y; erase = true; - } else if (y+h>_pdata.height()){ - y = _pdata.height()-h; } - - if (erase||_original_data.hasAlphaBuffer()||clipy>_pdata.height()||clipx>_pdata.width()) { - odebug << QSize(clipx,clipy) << " # " << QSize(clipw,cliph) << oendl; + if (!erase && (clipy+cliph>_pdata.height()||clipx+clipw>_pdata.width())) { + erase = true; + } + if (erase||_original_data.hasAlphaBuffer()) { p->fillRect(clipx,clipy,clipw,cliph, backgroundColor()); } - odebug << QSize(x,y) << " - " << QSize(w,h) << oendl; - if (clipy<=_pdata.height()&&clipx<=_pdata.width()) { -#if 0 - odebug << "painting image content" << oendl; -#endif + if (w>0 && h>0&&x<_pdata.width()&&y<_pdata.height()) { + odebug << "Drawing pixmap" << oendl; p->drawPixmap(clipx,clipy,_pdata,x,y,w,h); } -#if 0 -else { - odebug << "not painting image content" << oendl; - } -#endif } /* using the real geometry points and not the translated points is wanted! */ void OImageScrollView::viewportMouseMoveEvent(QMouseEvent* e) { int mx, my; mx = e->x(); my = e->y(); if (_mouseStartPosX!=-1 && _mouseStartPosY!=-1) { int diffx = _mouseStartPosX-mx; int diffy = _mouseStartPosY-my; scrollBy(diffx,diffy); |