summaryrefslogtreecommitdiff
Side-by-side diff
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
@@ -423,66 +423,81 @@ void OImageScrollView::keyPressEvent(QKeyEvent * e)
} else if (e->key()==Qt::Key_Up) {
scrollBy(0,0-dy);
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)
{
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;
erase = true;
} else if (x+w>_pdata.width()){
x = _pdata.width()-w;
}
+
if (h>_pdata.height()) {
h=_pdata.height();
y = 0;
erase = true;
} else if (y+h>_pdata.height()){
y = _pdata.height()-h;
}
- if (erase||_original_data.hasAlphaBuffer()) {
+
+ if (erase||_original_data.hasAlphaBuffer()||clipy>_pdata.height()||clipx>_pdata.width()) {
+ odebug << QSize(clipx,clipy) << " # " << QSize(clipw,cliph) << oendl;
p->fillRect(clipx,clipy,clipw,cliph, backgroundColor());
}
- p->drawPixmap(clipx,clipy,_pdata,x,y,w,h);
+ odebug << QSize(x,y) << " - " << QSize(w,h) << oendl;
+ if (clipy<=_pdata.height()&&clipx<=_pdata.width()) {
+#if 0
+ odebug << "painting image content" << oendl;
+#endif
+ 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);
}
_mouseStartPosX=mx;
_mouseStartPosY=my;
}
void OImageScrollView::contentsMousePressEvent ( QMouseEvent * e)
{
odebug << " X and Y " << e->x() << " " << e->y() << oendl;
/* this marks the beginning of a possible mouse move. Due internal reasons of QT
the geometry values here may real differ from that set in MoveEvent (I don't know
why). For getting them in real context, we use the first move-event to set the start
position ;)