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 | |||
@@ -1,178 +1,178 @@ | |||
1 | #include "oimagescrollview.h" | 1 | #include "oimagescrollview.h" |
2 | 2 | ||
3 | #include <opie2/oimagezoomer.h> | 3 | #include <opie2/oimagezoomer.h> |
4 | #include <opie2/odebug.h> | 4 | #include <opie2/odebug.h> |
5 | #include <opie2/oapplication.h> | 5 | #include <opie2/oapplication.h> |
6 | #include <opie2/owait.h> | 6 | #include <opie2/owait.h> |
7 | 7 | ||
8 | #include <qimage.h> | 8 | #include <qimage.h> |
9 | #include <qlayout.h> | 9 | #include <qlayout.h> |
10 | 10 | ||
11 | /* for usage with the bitset */ | 11 | /* for usage with the bitset */ |
12 | #define AUTO_SCALE 0 | 12 | #define AUTO_SCALE 0 |
13 | #define AUTO_ROTATE 1 | 13 | #define AUTO_ROTATE 1 |
14 | #define SHOW_ZOOMER 2 | 14 | #define SHOW_ZOOMER 2 |
15 | #define FIRST_RESIZE_DONE 3 | 15 | #define FIRST_RESIZE_DONE 3 |
16 | #define IMAGE_IS_JPEG 4 | 16 | #define IMAGE_IS_JPEG 4 |
17 | #define IMAGE_SCALED_LOADED 5 | 17 | #define IMAGE_SCALED_LOADED 5 |
18 | 18 | ||
19 | #define SCROLLVIEW_BITSET_SIZE 6 | 19 | #define SCROLLVIEW_BITSET_SIZE 6 |
20 | 20 | ||
21 | namespace Opie { | 21 | namespace Opie { |
22 | namespace MM { | 22 | namespace MM { |
23 | OImageScrollView::OImageScrollView( QWidget* parent, const char* name, WFlags f ) | 23 | OImageScrollView::OImageScrollView( QWidget* parent, const char* name, WFlags f ) |
24 | :QScrollView(parent,name,f|Qt::WRepaintNoErase ),_image_data(),_original_data(), | 24 | :QScrollView(parent,name,f|Qt::WRepaintNoErase ),_image_data(),_original_data(), |
25 | m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("") | 25 | m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("") |
26 | { | 26 | { |
27 | _zoomer = 0; | 27 | _zoomer = 0; |
28 | m_states[AUTO_SCALE]=true; | 28 | m_states[AUTO_SCALE]=true; |
29 | m_states[AUTO_ROTATE]=true; | 29 | m_states[AUTO_ROTATE]=true; |
30 | m_states[FIRST_RESIZE_DONE]=false; | 30 | m_states[FIRST_RESIZE_DONE]=false; |
31 | m_states[IMAGE_IS_JPEG]=false; | 31 | m_states[IMAGE_IS_JPEG]=false; |
32 | m_states[IMAGE_SCALED_LOADED]=false; | 32 | m_states[IMAGE_SCALED_LOADED]=false; |
33 | m_states[SHOW_ZOOMER]=true; | 33 | m_states[SHOW_ZOOMER]=true; |
34 | init(); | 34 | init(); |
35 | } | 35 | } |
36 | 36 | ||
37 | OImageScrollView::OImageScrollView (const QImage&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit) | 37 | OImageScrollView::OImageScrollView (const QImage&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit) |
38 | :QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(img), | 38 | :QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(img), |
39 | m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("") | 39 | m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("") |
40 | { | 40 | { |
41 | _zoomer = 0; | 41 | _zoomer = 0; |
42 | m_states[AUTO_SCALE]=always_scale; | 42 | m_states[AUTO_SCALE]=always_scale; |
43 | m_states[AUTO_ROTATE]=rfit; | 43 | m_states[AUTO_ROTATE]=rfit; |
44 | m_states[FIRST_RESIZE_DONE]=false; | 44 | m_states[FIRST_RESIZE_DONE]=false; |
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) |
54 | :QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(),m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("") | 54 | :QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(),m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("") |
55 | { | 55 | { |
56 | _zoomer = 0; | 56 | _zoomer = 0; |
57 | m_states.resize(SCROLLVIEW_BITSET_SIZE); | 57 | m_states.resize(SCROLLVIEW_BITSET_SIZE); |
58 | m_states[AUTO_SCALE]=always_scale; | 58 | m_states[AUTO_SCALE]=always_scale; |
59 | m_states[AUTO_ROTATE]=rfit; | 59 | m_states[AUTO_ROTATE]=rfit; |
60 | m_states[FIRST_RESIZE_DONE]=false; | 60 | m_states[FIRST_RESIZE_DONE]=false; |
61 | m_states[IMAGE_IS_JPEG]=false; | 61 | m_states[IMAGE_IS_JPEG]=false; |
62 | m_states[IMAGE_SCALED_LOADED]=false; | 62 | m_states[IMAGE_SCALED_LOADED]=false; |
63 | m_states[SHOW_ZOOMER]=true; | 63 | m_states[SHOW_ZOOMER]=true; |
64 | init(); | 64 | init(); |
65 | setImage(img); | 65 | setImage(img); |
66 | } | 66 | } |
67 | 67 | ||
68 | void OImageScrollView::setImage(const QImage&img) | 68 | 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()) { |
78 | generateImage(); | 78 | generateImage(); |
79 | } | 79 | } |
80 | } | 80 | } |
81 | 81 | ||
82 | void OImageScrollView::loadJpeg(bool interncall) | 82 | void OImageScrollView::loadJpeg(bool interncall) |
83 | { | 83 | { |
84 | if (m_lastName.isEmpty()) return; | 84 | if (m_lastName.isEmpty()) return; |
85 | QImageIO iio( m_lastName, 0l ); | 85 | QImageIO iio( m_lastName, 0l ); |
86 | QString param; | 86 | QString param; |
87 | bool real_load = false; | 87 | bool real_load = false; |
88 | if (AutoScale()) { | 88 | if (AutoScale()) { |
89 | if (!interncall) { | 89 | if (!interncall) { |
90 | int wid, hei; | 90 | int wid, hei; |
91 | wid = QApplication::desktop()->width(); | 91 | wid = QApplication::desktop()->width(); |
92 | hei = QApplication::desktop()->height(); | 92 | hei = QApplication::desktop()->height(); |
93 | if (hei>wid) { | 93 | if (hei>wid) { |
94 | wid = hei; | 94 | wid = hei; |
95 | } else { | 95 | } else { |
96 | hei = wid; | 96 | hei = wid; |
97 | } | 97 | } |
98 | param = QString( "Fast Shrink( 3 ) Scale( %1, %2, ScaleMin)" ).arg( wid ).arg( hei ); | 98 | param = QString( "Fast Shrink( 3 ) Scale( %1, %2, ScaleMin)" ).arg( wid ).arg( hei ); |
99 | odebug << "Load jpeg scaled \"" << param << "\"" << oendl; | 99 | odebug << "Load jpeg scaled \"" << param << "\"" << oendl; |
100 | iio.setParameters(param.latin1()); | 100 | iio.setParameters(param.latin1()); |
101 | setImageScaledLoaded(true); | 101 | setImageScaledLoaded(true); |
102 | real_load = true; | 102 | real_load = true; |
103 | } | 103 | } |
104 | } else { | 104 | } else { |
105 | if (ImageScaledLoaded()||!interncall) { | 105 | if (ImageScaledLoaded()||!interncall) { |
106 | odebug << "Load jpeg unscaled" << oendl; | 106 | odebug << "Load jpeg unscaled" << oendl; |
107 | real_load = true; | 107 | real_load = true; |
108 | } | 108 | } |
109 | setImageScaledLoaded(false); | 109 | setImageScaledLoaded(false); |
110 | } | 110 | } |
111 | if (real_load) { | 111 | if (real_load) { |
112 | _original_data = iio.read() ? iio.image() : QImage(); | 112 | _original_data = iio.read() ? iio.image() : QImage(); |
113 | } | 113 | } |
114 | } | 114 | } |
115 | 115 | ||
116 | void OImageScrollView::setImage( const QString& path ) { | 116 | void OImageScrollView::setImage( const QString& path ) { |
117 | odebug << "load new image " << oendl; | 117 | odebug << "load new image " << oendl; |
118 | if (m_lastName == path) return; | 118 | if (m_lastName == path) return; |
119 | m_lastName = path; | 119 | m_lastName = path; |
120 | _original_data = QImage(); | 120 | _original_data = QImage(); |
121 | QString itype = QImage::imageFormat(m_lastName); | 121 | QString itype = QImage::imageFormat(m_lastName); |
122 | odebug << "Image type = " << itype << oendl; | 122 | odebug << "Image type = " << itype << oendl; |
123 | if (itype == "JPEG") { | 123 | if (itype == "JPEG") { |
124 | setImageIsJpeg(true); | 124 | setImageIsJpeg(true); |
125 | loadJpeg(); | 125 | loadJpeg(); |
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(); |
135 | if (isVisible()) viewport()->repaint(true); | 135 | if (isVisible()) viewport()->repaint(true); |
136 | } | 136 | } |
137 | } | 137 | } |
138 | 138 | ||
139 | /* should be called every time the QImage changed it content */ | 139 | /* should be called every time the QImage changed it content */ |
140 | void OImageScrollView::init() | 140 | void OImageScrollView::init() |
141 | { | 141 | { |
142 | odebug << "init " << oendl; | 142 | odebug << "init " << oendl; |
143 | 143 | ||
144 | /* | 144 | /* |
145 | * create the zoomer | 145 | * create the zoomer |
146 | * and connect ther various signals | 146 | * and connect ther various signals |
147 | */ | 147 | */ |
148 | _zoomer = new Opie::MM::OImageZoomer( this, "The Zoomer" ); | 148 | _zoomer = new Opie::MM::OImageZoomer( this, "The Zoomer" ); |
149 | connect(_zoomer, SIGNAL( zoomAreaRel(int,int)), | 149 | connect(_zoomer, SIGNAL( zoomAreaRel(int,int)), |
150 | this, SLOT(scrollBy(int,int)) ); | 150 | this, SLOT(scrollBy(int,int)) ); |
151 | connect(_zoomer, SIGNAL( zoomArea(int,int)), | 151 | connect(_zoomer, SIGNAL( zoomArea(int,int)), |
152 | this, SLOT(center(int,int)) ); | 152 | this, SLOT(center(int,int)) ); |
153 | connect(this,SIGNAL(contentsMoving(int,int)), | 153 | connect(this,SIGNAL(contentsMoving(int,int)), |
154 | _zoomer, (SLOT(setVisiblePoint(int,int))) ); | 154 | _zoomer, (SLOT(setVisiblePoint(int,int))) ); |
155 | connect(this,SIGNAL(imageSizeChanged(const QSize&)), | 155 | connect(this,SIGNAL(imageSizeChanged(const QSize&)), |
156 | _zoomer, SLOT(setImageSize(const QSize&)) ); | 156 | _zoomer, SLOT(setImageSize(const QSize&)) ); |
157 | connect(this,SIGNAL(viewportSizeChanged(const QSize&)), | 157 | connect(this,SIGNAL(viewportSizeChanged(const QSize&)), |
158 | _zoomer, SLOT(setViewPortSize(const QSize&)) ); | 158 | _zoomer, SLOT(setViewPortSize(const QSize&)) ); |
159 | 159 | ||
160 | setBackgroundColor(white); | 160 | setBackgroundColor(white); |
161 | setFocusPolicy(QWidget::StrongFocus); | 161 | setFocusPolicy(QWidget::StrongFocus); |
162 | setImageScaledLoaded(false); | 162 | setImageScaledLoaded(false); |
163 | setImageIsJpeg(false); | 163 | setImageIsJpeg(false); |
164 | if (FirstResizeDone()) { | 164 | if (FirstResizeDone()) { |
165 | m_last_rot = Rotate0; | 165 | m_last_rot = Rotate0; |
166 | generateImage(); | 166 | generateImage(); |
167 | } else if (_original_data.size().isValid()) { | 167 | } else if (_original_data.size().isValid()) { |
168 | if (image_fit_into(_original_data.size()) || !ShowZoomer()) _zoomer->hide(); | 168 | if (image_fit_into(_original_data.size()) || !ShowZoomer()) _zoomer->hide(); |
169 | resizeContents(_original_data.width(),_original_data.height()); | 169 | resizeContents(_original_data.width(),_original_data.height()); |
170 | } | 170 | } |
171 | } | 171 | } |
172 | 172 | ||
173 | void OImageScrollView::setAutoRotate(bool how) | 173 | void OImageScrollView::setAutoRotate(bool how) |
174 | { | 174 | { |
175 | /* to avoid double repaints */ | 175 | /* to avoid double repaints */ |
176 | if (AutoRotate() != how) { | 176 | if (AutoRotate() != how) { |
177 | m_states.setBit(AUTO_ROTATE,how); | 177 | m_states.setBit(AUTO_ROTATE,how); |
178 | _image_data = QImage(); | 178 | _image_data = QImage(); |
@@ -389,139 +389,125 @@ void OImageScrollView::generateImage() | |||
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 | ||
402 | void OImageScrollView::resizeEvent(QResizeEvent * e) | 402 | void 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 | ||
412 | void OImageScrollView::keyPressEvent(QKeyEvent * e) | 412 | void 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 | ||
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) |
484 | { | 470 | { |
485 | int mx, my; | 471 | int mx, my; |
486 | mx = e->x(); | 472 | mx = e->x(); |
487 | my = e->y(); | 473 | my = e->y(); |
488 | if (_mouseStartPosX!=-1 && _mouseStartPosY!=-1) { | 474 | if (_mouseStartPosX!=-1 && _mouseStartPosY!=-1) { |
489 | int diffx = _mouseStartPosX-mx; | 475 | int diffx = _mouseStartPosX-mx; |
490 | int diffy = _mouseStartPosY-my; | 476 | int diffy = _mouseStartPosY-my; |
491 | scrollBy(diffx,diffy); | 477 | scrollBy(diffx,diffy); |
492 | } | 478 | } |
493 | _mouseStartPosX=mx; | 479 | _mouseStartPosX=mx; |
494 | _mouseStartPosY=my; | 480 | _mouseStartPosY=my; |
495 | } | 481 | } |
496 | 482 | ||
497 | void OImageScrollView::contentsMousePressEvent ( QMouseEvent * e) | 483 | void OImageScrollView::contentsMousePressEvent ( QMouseEvent * e) |
498 | { | 484 | { |
499 | odebug << " X and Y " << e->x() << " " << e->y() << oendl; | 485 | odebug << " X and Y " << e->x() << " " << e->y() << oendl; |
500 | /* this marks the beginning of a possible mouse move. Due internal reasons of QT | 486 | /* this marks the beginning of a possible mouse move. Due internal reasons of QT |
501 | the geometry values here may real differ from that set in MoveEvent (I don't know | 487 | the geometry values here may real differ from that set in MoveEvent (I don't know |
502 | why). For getting them in real context, we use the first move-event to set the start | 488 | why). For getting them in real context, we use the first move-event to set the start |
503 | position ;) | 489 | position ;) |
504 | */ | 490 | */ |
505 | _mouseStartPosX = -1; | 491 | _mouseStartPosX = -1; |
506 | _mouseStartPosY = -1; | 492 | _mouseStartPosY = -1; |
507 | } | 493 | } |
508 | 494 | ||
509 | void OImageScrollView::setDestructiveClose() { | 495 | void OImageScrollView::setDestructiveClose() { |
510 | WFlags fl = getWFlags(); | 496 | WFlags fl = getWFlags(); |
511 | /* clear it just in case */ | 497 | /* clear it just in case */ |
512 | fl &= ~WDestructiveClose; | 498 | fl &= ~WDestructiveClose; |
513 | fl |= WDestructiveClose; | 499 | fl |= WDestructiveClose; |
514 | setWFlags( fl ); | 500 | setWFlags( fl ); |
515 | } | 501 | } |
516 | 502 | ||
517 | bool OImageScrollView::image_fit_into(const QSize&s ) | 503 | bool OImageScrollView::image_fit_into(const QSize&s ) |
518 | { | 504 | { |
519 | if (s.width()>width()||s.height()>height()) { | 505 | if (s.width()>width()||s.height()>height()) { |
520 | return false; | 506 | return false; |
521 | } | 507 | } |
522 | return true; | 508 | return true; |
523 | } | 509 | } |
524 | 510 | ||
525 | void OImageScrollView::setShowZoomer(bool how) | 511 | void OImageScrollView::setShowZoomer(bool how) |
526 | { | 512 | { |
527 | m_states.setBit(SHOW_ZOOMER,how); | 513 | m_states.setBit(SHOW_ZOOMER,how); |