author | alwin <alwin> | 2004-04-22 23:48:23 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-04-22 23:48:23 (UTC) |
commit | ba10e43945b15753e0438cd0176cfa61d61c7391 (patch) (unidiff) | |
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 | 48 |
1 files changed, 17 insertions, 31 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 | |||
@@ -45,9 +45,9 @@ OImageScrollView::OImageScrollView (const QImage&img, QWidget * parent, const ch | |||
45 | m_states[IMAGE_IS_JPEG]=false; | 45 | m_states[IMAGE_IS_JPEG]=false; |
46 | m_states[IMAGE_SCALED_LOADED]=false; | 46 | m_states[IMAGE_SCALED_LOADED]=false; |
47 | m_states[SHOW_ZOOMER]=true; | 47 | m_states[SHOW_ZOOMER]=true; |
48 | _original_data.convertDepth(QPixmap::defaultDepth()); | 48 | _original_data.convertDepth(QPixmap::defaultDepth()); |
49 | _original_data.setAlphaBuffer(false); | 49 | //_original_data.setAlphaBuffer(false); |
50 | init(); | 50 | init(); |
51 | } | 51 | } |
52 | 52 | ||
53 | OImageScrollView::OImageScrollView (const QString&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit) | 53 | OImageScrollView::OImageScrollView (const QString&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit) |
@@ -69,9 +69,9 @@ void OImageScrollView::setImage(const QImage&img) | |||
69 | { | 69 | { |
70 | _image_data = QImage(); | 70 | _image_data = QImage(); |
71 | _original_data=img; | 71 | _original_data=img; |
72 | _original_data.convertDepth(QPixmap::defaultDepth()); | 72 | _original_data.convertDepth(QPixmap::defaultDepth()); |
73 | _original_data.setAlphaBuffer(false); | 73 | //_original_data.setAlphaBuffer(false); |
74 | m_lastName = ""; | 74 | m_lastName = ""; |
75 | setImageIsJpeg(false); | 75 | setImageIsJpeg(false); |
76 | setImageScaledLoaded(false); | 76 | setImageScaledLoaded(false); |
77 | if (FirstResizeDone()) { | 77 | if (FirstResizeDone()) { |
@@ -126,9 +126,9 @@ void OImageScrollView::setImage( const QString& path ) { | |||
126 | } else { | 126 | } else { |
127 | setImageIsJpeg(false); | 127 | setImageIsJpeg(false); |
128 | _original_data.load(path); | 128 | _original_data.load(path); |
129 | _original_data.convertDepth(QPixmap::defaultDepth()); | 129 | _original_data.convertDepth(QPixmap::defaultDepth()); |
130 | _original_data.setAlphaBuffer(false); | 130 | //_original_data.setAlphaBuffer(false); |
131 | } | 131 | } |
132 | _image_data = QImage(); | 132 | _image_data = QImage(); |
133 | if (FirstResizeDone()) { | 133 | if (FirstResizeDone()) { |
134 | generateImage(); | 134 | generateImage(); |
@@ -433,51 +433,37 @@ void OImageScrollView::keyPressEvent(QKeyEvent * e) | |||
433 | } | 433 | } |
434 | 434 | ||
435 | void OImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clipw, int cliph) | 435 | void OImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clipw, int cliph) |
436 | { | 436 | { |
437 | if (!_pdata.size().isValid()) { | ||
438 | p->fillRect(clipx,clipy,clipw,cliph, backgroundColor()); | ||
439 | return; | ||
440 | } | ||
441 | |||
437 | int w = clipw; | 442 | int w = clipw; |
438 | int h = cliph; | 443 | int h = cliph; |
439 | int x = clipx; | 444 | int x = clipx; |
440 | int y = clipy; | 445 | int y = clipy; |
441 | bool erase = false; | 446 | bool erase = false; |
442 | 447 | ||
443 | if (!_pdata.size().isValid()) { | ||
444 | p->fillRect(clipx,clipy,clipw,cliph, backgroundColor()); | ||
445 | return; | ||
446 | } | ||
447 | |||
448 | if (w>_pdata.width()) { | 448 | if (w>_pdata.width()) { |
449 | w=_pdata.width(); | 449 | w = _pdata.width()-x; |
450 | x = 0; | 450 | erase=true; |
451 | erase = true; | ||
452 | } else if (x+w>_pdata.width()){ | ||
453 | x = _pdata.width()-w; | ||
454 | } | 451 | } |
455 | |||
456 | if (h>_pdata.height()) { | 452 | if (h>_pdata.height()) { |
457 | h=_pdata.height(); | 453 | h = _pdata.height()-y; |
458 | y = 0; | 454 | erase=true; |
455 | } | ||
456 | if (!erase && (clipy+cliph>_pdata.height()||clipx+clipw>_pdata.width())) { | ||
459 | erase = true; | 457 | erase = true; |
460 | } else if (y+h>_pdata.height()){ | ||
461 | y = _pdata.height()-h; | ||
462 | } | 458 | } |
463 | 459 | if (erase||_original_data.hasAlphaBuffer()) { | |
464 | if (erase||_original_data.hasAlphaBuffer()||clipy>_pdata.height()||clipx>_pdata.width()) { | ||
465 | odebug << QSize(clipx,clipy) << " # " << QSize(clipw,cliph) << oendl; | ||
466 | p->fillRect(clipx,clipy,clipw,cliph, backgroundColor()); | 460 | p->fillRect(clipx,clipy,clipw,cliph, backgroundColor()); |
467 | } | 461 | } |
468 | odebug << QSize(x,y) << " - " << QSize(w,h) << oendl; | 462 | if (w>0 && h>0&&x<_pdata.width()&&y<_pdata.height()) { |
469 | if (clipy<=_pdata.height()&&clipx<=_pdata.width()) { | 463 | odebug << "Drawing pixmap" << oendl; |
470 | #if 0 | ||
471 | odebug << "painting image content" << oendl; | ||
472 | #endif | ||
473 | p->drawPixmap(clipx,clipy,_pdata,x,y,w,h); | 464 | p->drawPixmap(clipx,clipy,_pdata,x,y,w,h); |
474 | } | ||
475 | #if 0 | ||
476 | else { | ||
477 | odebug << "not painting image content" << oendl; | ||
478 | } | 465 | } |
479 | #endif | ||
480 | } | 466 | } |
481 | 467 | ||
482 | /* using the real geometry points and not the translated points is wanted! */ | 468 | /* using the real geometry points and not the translated points is wanted! */ |
483 | void OImageScrollView::viewportMouseMoveEvent(QMouseEvent* e) | 469 | void OImageScrollView::viewportMouseMoveEvent(QMouseEvent* e) |