summaryrefslogtreecommitdiff
Unidiff
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
@@ -383,146 +383,161 @@ void OImageScrollView::generateImage()
383 rescaleImage( 128, 128 ); 383 rescaleImage( 128, 128 );
384 resizeContents(twidth,theight); 384 resizeContents(twidth,theight);
385 /* 385 /*
386 * move scrollbar 386 * move scrollbar
387 */ 387 */
388 if (_zoomer) { 388 if (_zoomer) {
389 _zoomer->setGeometry( viewport()->width()-_image_data.width()/2, viewport()->height()-_image_data.height()/2, 389 _zoomer->setGeometry( viewport()->width()-_image_data.width()/2, viewport()->height()-_image_data.height()/2,
390 _image_data.width()/2, _image_data.height()/2 ); 390 _image_data.width()/2, _image_data.height()/2 );
391 _zoomer->setImage( _image_data ); 391 _zoomer->setImage( _image_data );
392 } 392 }
393 /* 393 /*
394 * invalidate 394 * invalidate
395 */ 395 */
396 _image_data=QImage(); 396 _image_data=QImage();
397 if (isVisible()) { 397 if (isVisible()) {
398 updateContents(contentsX(),contentsY(),width(),height()); 398 updateContents(contentsX(),contentsY(),width(),height());
399 } 399 }
400} 400}
401 401
402void OImageScrollView::resizeEvent(QResizeEvent * e) 402void OImageScrollView::resizeEvent(QResizeEvent * e)
403{ 403{
404 odebug << "OImageScrollView resizeEvent" << oendl; 404 odebug << "OImageScrollView resizeEvent" << oendl;
405 QScrollView::resizeEvent(e); 405 QScrollView::resizeEvent(e);
406 generateImage(); 406 generateImage();
407 setFirstResizeDone(true); 407 setFirstResizeDone(true);
408 emit viewportSizeChanged( viewport()->size() ); 408 emit viewportSizeChanged( viewport()->size() );
409 409
410} 410}
411 411
412void OImageScrollView::keyPressEvent(QKeyEvent * e) 412void OImageScrollView::keyPressEvent(QKeyEvent * e)
413{ 413{
414 if (!e) return; 414 if (!e) return;
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 */
497 fl &= ~WDestructiveClose; 512 fl &= ~WDestructiveClose;
498 fl |= WDestructiveClose; 513 fl |= WDestructiveClose;
499 setWFlags( fl ); 514 setWFlags( fl );
500} 515}
501 516
502bool OImageScrollView::image_fit_into(const QSize&s ) 517bool OImageScrollView::image_fit_into(const QSize&s )
503{ 518{
504 if (s.width()>width()||s.height()>height()) { 519 if (s.width()>width()||s.height()>height()) {
505 return false; 520 return false;
506 } 521 }
507 return true; 522 return true;
508} 523}
509 524
510void OImageScrollView::setShowZoomer(bool how) 525void OImageScrollView::setShowZoomer(bool how)
511{ 526{
512 m_states.setBit(SHOW_ZOOMER,how); 527 m_states.setBit(SHOW_ZOOMER,how);
513 check_zoomer(); 528 check_zoomer();
514} 529}
515 530
516bool OImageScrollView::ShowZoomer()const 531bool OImageScrollView::ShowZoomer()const
517{ 532{
518 return m_states.testBit(SHOW_ZOOMER); 533 return m_states.testBit(SHOW_ZOOMER);
519} 534}
520 535
521void OImageScrollView::check_zoomer() 536void OImageScrollView::check_zoomer()
522{ 537{
523 if (!_zoomer) return; 538 if (!_zoomer) return;
524 if ( (!ShowZoomer()||image_fit_into(_pdata.size()) ) && _zoomer->isVisible()) { 539 if ( (!ShowZoomer()||image_fit_into(_pdata.size()) ) && _zoomer->isVisible()) {
525 _zoomer->hide(); 540 _zoomer->hide();
526 } else if ( ShowZoomer() && !image_fit_into(_pdata.size()) && _zoomer->isHidden()){ 541 } else if ( ShowZoomer() && !image_fit_into(_pdata.size()) && _zoomer->isHidden()){
527 _zoomer->show(); 542 _zoomer->show();
528 } 543 }