summaryrefslogtreecommitdiff
authoralwin <alwin>2004-04-21 10:47:31 (UTC)
committer alwin <alwin>2004-04-21 10:47:31 (UTC)
commit6902a2e25e93f2c2d472b89a35e19668dffd4866 (patch) (unidiff)
tree7512cf17ca49b420dd4e6c9758fcc846b5e8cd1a
parentf4ab243362a9b93f17e92bbf3189324f66c8f686 (diff)
downloadopie-6902a2e25e93f2c2d472b89a35e19668dffd4866.zip
opie-6902a2e25e93f2c2d472b89a35e19668dffd4866.tar.gz
opie-6902a2e25e93f2c2d472b89a35e19668dffd4866.tar.bz2
improved painting, eg., when clip area is outside image we must not
paint the image of course....
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiemm/oimagescrollview.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/libopie2/opiemm/oimagescrollview.cpp b/libopie2/opiemm/oimagescrollview.cpp
index a8165a4..73df3ff 100644
--- a/libopie2/opiemm/oimagescrollview.cpp
+++ b/libopie2/opiemm/oimagescrollview.cpp
@@ -415,82 +415,97 @@ void OImageScrollView::keyPressEvent(QKeyEvent * e)
415 int dx = horizontalScrollBar()->lineStep(); 415 int dx = horizontalScrollBar()->lineStep();
416 int dy = verticalScrollBar()->lineStep(); 416 int dy = verticalScrollBar()->lineStep();
417 if (e->key()==Qt::Key_Right) { 417 if (e->key()==Qt::Key_Right) {
418 scrollBy(dx,0); 418 scrollBy(dx,0);
419 e->accept(); 419 e->accept();
420 } else if (e->key()==Qt::Key_Left) { 420 } else if (e->key()==Qt::Key_Left) {
421 scrollBy(0-dx,0); 421 scrollBy(0-dx,0);
422 e->accept(); 422 e->accept();
423 } else if (e->key()==Qt::Key_Up) { 423 } else if (e->key()==Qt::Key_Up) {
424 scrollBy(0,0-dy); 424 scrollBy(0,0-dy);
425 e->accept(); 425 e->accept();
426 } else if (e->key()==Qt::Key_Down) { 426 } else if (e->key()==Qt::Key_Down) {
427 scrollBy(0,dy); 427 scrollBy(0,dy);
428 e->accept(); 428 e->accept();
429 } else { 429 } else {
430 e->ignore(); 430 e->ignore();
431 } 431 }
432 QScrollView::keyPressEvent(e); 432 QScrollView::keyPressEvent(e);
433} 433}
434 434
435void OImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clipw, int cliph) 435void OImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clipw, int cliph)
436{ 436{
437 int w = clipw; 437 int w = clipw;
438 int h = cliph; 438 int h = cliph;
439 int x = clipx; 439 int x = clipx;
440 int y = clipy; 440 int y = clipy;
441 bool erase = false; 441 bool erase = false;
442 442
443 if (!_pdata.size().isValid()) { 443 if (!_pdata.size().isValid()) {
444 p->fillRect(clipx,clipy,clipw,cliph, backgroundColor()); 444 p->fillRect(clipx,clipy,clipw,cliph, backgroundColor());
445 return; 445 return;
446 } 446 }
447
447 if (w>_pdata.width()) { 448 if (w>_pdata.width()) {
448 w=_pdata.width(); 449 w=_pdata.width();
449 x = 0; 450 x = 0;
450 erase = true; 451 erase = true;
451 } else if (x+w>_pdata.width()){ 452 } else if (x+w>_pdata.width()){
452 x = _pdata.width()-w; 453 x = _pdata.width()-w;
453 } 454 }
455
454 if (h>_pdata.height()) { 456 if (h>_pdata.height()) {
455 h=_pdata.height(); 457 h=_pdata.height();
456 y = 0; 458 y = 0;
457 erase = true; 459 erase = true;
458 } else if (y+h>_pdata.height()){ 460 } else if (y+h>_pdata.height()){
459 y = _pdata.height()-h; 461 y = _pdata.height()-h;
460 } 462 }
461 if (erase||_original_data.hasAlphaBuffer()) { 463
464 if (erase||_original_data.hasAlphaBuffer()||clipy>_pdata.height()||clipx>_pdata.width()) {
465 odebug << QSize(clipx,clipy) << " # " << QSize(clipw,cliph) << oendl;
462 p->fillRect(clipx,clipy,clipw,cliph, backgroundColor()); 466 p->fillRect(clipx,clipy,clipw,cliph, backgroundColor());
463 } 467 }
464 p->drawPixmap(clipx,clipy,_pdata,x,y,w,h); 468 odebug << QSize(x,y) << " - " << QSize(w,h) << oendl;
469 if (clipy<=_pdata.height()&&clipx<=_pdata.width()) {
470#if 0
471 odebug << "painting image content" << oendl;
472#endif
473 p->drawPixmap(clipx,clipy,_pdata,x,y,w,h);
474 }
475#if 0
476else {
477 odebug << "not painting image content" << oendl;
478 }
479#endif
465} 480}
466 481
467/* using the real geometry points and not the translated points is wanted! */ 482/* using the real geometry points and not the translated points is wanted! */
468void OImageScrollView::viewportMouseMoveEvent(QMouseEvent* e) 483void OImageScrollView::viewportMouseMoveEvent(QMouseEvent* e)
469{ 484{
470 int mx, my; 485 int mx, my;
471 mx = e->x(); 486 mx = e->x();
472 my = e->y(); 487 my = e->y();
473 if (_mouseStartPosX!=-1 && _mouseStartPosY!=-1) { 488 if (_mouseStartPosX!=-1 && _mouseStartPosY!=-1) {
474 int diffx = _mouseStartPosX-mx; 489 int diffx = _mouseStartPosX-mx;
475 int diffy = _mouseStartPosY-my; 490 int diffy = _mouseStartPosY-my;
476 scrollBy(diffx,diffy); 491 scrollBy(diffx,diffy);
477 } 492 }
478 _mouseStartPosX=mx; 493 _mouseStartPosX=mx;
479 _mouseStartPosY=my; 494 _mouseStartPosY=my;
480} 495}
481 496
482void OImageScrollView::contentsMousePressEvent ( QMouseEvent * e) 497void OImageScrollView::contentsMousePressEvent ( QMouseEvent * e)
483{ 498{
484 odebug << " X and Y " << e->x() << " " << e->y() << oendl; 499 odebug << " X and Y " << e->x() << " " << e->y() << oendl;
485 /* this marks the beginning of a possible mouse move. Due internal reasons of QT 500 /* this marks the beginning of a possible mouse move. Due internal reasons of QT
486 the geometry values here may real differ from that set in MoveEvent (I don't know 501 the geometry values here may real differ from that set in MoveEvent (I don't know
487 why). For getting them in real context, we use the first move-event to set the start 502 why). For getting them in real context, we use the first move-event to set the start
488 position ;) 503 position ;)
489 */ 504 */
490 _mouseStartPosX = -1; 505 _mouseStartPosX = -1;
491 _mouseStartPosY = -1; 506 _mouseStartPosY = -1;
492} 507}
493 508
494void OImageScrollView::setDestructiveClose() { 509void OImageScrollView::setDestructiveClose() {
495 WFlags fl = getWFlags(); 510 WFlags fl = getWFlags();
496 /* clear it just in case */ 511 /* clear it just in case */