summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiemm/oimagescrollview.cpp31
-rw-r--r--libopie2/opiemm/oimagescrollview.h13
2 files changed, 19 insertions, 25 deletions
diff --git a/libopie2/opiemm/oimagescrollview.cpp b/libopie2/opiemm/oimagescrollview.cpp
index 30a8fba..61b2062 100644
--- a/libopie2/opiemm/oimagescrollview.cpp
+++ b/libopie2/opiemm/oimagescrollview.cpp
@@ -1,22 +1,21 @@
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#include <qpe/qcopenvelope_qws.h>
11 10
12/* for usage with the bitset */ 11/* for usage with the bitset */
13#define AUTO_SCALE 0 12#define AUTO_SCALE 0
14#define AUTO_ROTATE 1 13#define AUTO_ROTATE 1
15#define SHOW_ZOOMER 2 14#define SHOW_ZOOMER 2
16#define FIRST_RESIZE_DONE 3 15#define FIRST_RESIZE_DONE 3
17#define IMAGE_IS_JPEG 4 16#define IMAGE_IS_JPEG 4
18#define IMAGE_SCALED_LOADED 5 17#define IMAGE_SCALED_LOADED 5
19 18
20#define SCROLLVIEW_BITSET_SIZE 6 19#define SCROLLVIEW_BITSET_SIZE 6
21 20
22namespace Opie { 21namespace Opie {
@@ -101,57 +100,43 @@ void OImageScrollView::loadJpeg(bool interncall)
101 iio.setParameters(param.latin1()); 100 iio.setParameters(param.latin1());
102 setImageScaledLoaded(true); 101 setImageScaledLoaded(true);
103 real_load = true; 102 real_load = true;
104 } 103 }
105 } else { 104 } else {
106 if (ImageScaledLoaded()||!interncall) { 105 if (ImageScaledLoaded()||!interncall) {
107 odebug << "Load jpeg unscaled" << oendl; 106 odebug << "Load jpeg unscaled" << oendl;
108 real_load = true; 107 real_load = true;
109 } 108 }
110 setImageScaledLoaded(false); 109 setImageScaledLoaded(false);
111 } 110 }
112 if (real_load) { 111 if (real_load) {
113 {
114 QCopEnvelope( "QPE/System", "busy()" );
115 }
116 _original_data = iio.read() ? iio.image() : QImage(); 112 _original_data = iio.read() ? iio.image() : QImage();
117 {
118 QCopEnvelope env( "QPE/System", "notBusy(QString)" );
119 env << "Image loaded";
120 }
121 } 113 }
122} 114}
123 115
124void OImageScrollView::setImage( const QString& path ) { 116void OImageScrollView::setImage( const QString& path ) {
125 odebug << "load new image " << oendl; 117 odebug << "load new image " << oendl;
126 if (m_lastName == path) return; 118 if (m_lastName == path) return;
127 m_lastName = path; 119 m_lastName = path;
128 _original_data = QImage(); 120 _original_data = QImage();
129 QString itype = QImage::imageFormat(m_lastName); 121 QString itype = QImage::imageFormat(m_lastName);
130 odebug << "Image type = " << itype << oendl; 122 odebug << "Image type = " << itype << oendl;
131 if (itype == "JPEG") { 123 if (itype == "JPEG") {
132 setImageIsJpeg(true); 124 setImageIsJpeg(true);
133 loadJpeg(); 125 loadJpeg();
134 } else { 126 } else {
135 {
136 QCopEnvelope( "QPE/System", "busy()" );
137 }
138 setImageIsJpeg(false); 127 setImageIsJpeg(false);
139 _original_data.load(path); 128 _original_data.load(path);
140 _original_data.convertDepth(QPixmap::defaultDepth()); 129 _original_data.convertDepth(QPixmap::defaultDepth());
141 _original_data.setAlphaBuffer(false); 130 _original_data.setAlphaBuffer(false);
142 {
143 QCopEnvelope env( "QPE/System", "notBusy(QString)" );
144 env << "Image loaded";
145 }
146 } 131 }
147 _image_data = QImage(); 132 _image_data = QImage();
148 if (FirstResizeDone()) { 133 if (FirstResizeDone()) {
149 generateImage(); 134 generateImage();
150 if (isVisible()) viewport()->repaint(true); 135 if (isVisible()) viewport()->repaint(true);
151 } 136 }
152} 137}
153 138
154/* should be called every time the QImage changed it content */ 139/* should be called every time the QImage changed it content */
155void OImageScrollView::init() 140void OImageScrollView::init()
156{ 141{
157 odebug << "init " << oendl; 142 odebug << "init " << oendl;
@@ -191,30 +176,33 @@ void OImageScrollView::setAutoRotate(bool how)
191 if (AutoRotate() != how) { 176 if (AutoRotate() != how) {
192 m_states.setBit(AUTO_ROTATE,how); 177 m_states.setBit(AUTO_ROTATE,how);
193 _image_data = QImage(); 178 _image_data = QImage();
194 generateImage(); 179 generateImage();
195 } 180 }
196} 181}
197 182
198bool OImageScrollView::AutoRotate()const 183bool OImageScrollView::AutoRotate()const
199{ 184{
200 return m_states.testBit(AUTO_ROTATE); 185 return m_states.testBit(AUTO_ROTATE);
201} 186}
202 187
188void OImageScrollView::setAutoScaleRotate(bool scale, bool rotate)
189{
190 m_states.setBit(AUTO_ROTATE,rotate);
191 setAutoScale(scale);
192}
193
203void OImageScrollView::setAutoScale(bool how) 194void OImageScrollView::setAutoScale(bool how)
204{ 195{
205 m_states.setBit(AUTO_SCALE,how); 196 m_states.setBit(AUTO_SCALE,how);
206 if (!how) {
207 setAutoRotate(false);
208 }
209 _image_data = QImage(); 197 _image_data = QImage();
210 if (ImageIsJpeg() && how == false && ImageScaledLoaded()==true) { 198 if (ImageIsJpeg() && how == false && ImageScaledLoaded()==true) {
211 loadJpeg(true); 199 loadJpeg(true);
212 } 200 }
213 generateImage(); 201 generateImage();
214} 202}
215 203
216bool OImageScrollView::AutoScale()const 204bool OImageScrollView::AutoScale()const
217{ 205{
218 return m_states.testBit(AUTO_SCALE); 206 return m_states.testBit(AUTO_SCALE);
219} 207}
220 208
@@ -349,27 +337,24 @@ void OImageScrollView::rotate_into_data(Rotation r)
349 _image_data = dest; 337 _image_data = dest;
350} 338}
351 339
352void OImageScrollView::generateImage() 340void OImageScrollView::generateImage()
353{ 341{
354 Rotation r = Rotate0; 342 Rotation r = Rotate0;
355 _pdata = QPixmap(); 343 _pdata = QPixmap();
356 if (_original_data.isNull()) { 344 if (_original_data.isNull()) {
357 emit imageSizeChanged( _image_data.size() ); 345 emit imageSizeChanged( _image_data.size() );
358 if (_zoomer) _zoomer->setImage( _image_data ); 346 if (_zoomer) _zoomer->setImage( _image_data );
359 return; 347 return;
360 } 348 }
361 {
362 QCopEnvelope( "QPE/System", "busy()" );
363 }
364 if (width()>height()&&_original_data.width()<_original_data.height() || 349 if (width()>height()&&_original_data.width()<_original_data.height() ||
365 width()<height()&&_original_data.width()>_original_data.height()) { 350 width()<height()&&_original_data.width()>_original_data.height()) {
366 if (AutoRotate()) r = Rotate90; 351 if (AutoRotate()) r = Rotate90;
367 } 352 }
368 353
369 354
370 odebug << " r = " << r << oendl; 355 odebug << " r = " << r << oendl;
371 if (AutoScale() && (_original_data.width()>width() || _original_data.height() > height()) ) { 356 if (AutoScale() && (_original_data.width()>width() || _original_data.height() > height()) ) {
372 if (!_image_data.size().isValid()||width()>_image_data.width()||height()>_image_data.height()) { 357 if (!_image_data.size().isValid()||width()>_image_data.width()||height()>_image_data.height()) {
373 odebug << "Rescaling data" << oendl; 358 odebug << "Rescaling data" << oendl;
374 if (r==Rotate0) { 359 if (r==Rotate0) {
375 _image_data = _original_data; 360 _image_data = _original_data;
@@ -399,28 +384,24 @@ void OImageScrollView::generateImage()
399 /* 384 /*
400 * move scrollbar 385 * move scrollbar
401 */ 386 */
402 if (_zoomer) { 387 if (_zoomer) {
403 _zoomer->setGeometry( viewport()->width()-_image_data.width()/2, viewport()->height()-_image_data.height()/2, 388 _zoomer->setGeometry( viewport()->width()-_image_data.width()/2, viewport()->height()-_image_data.height()/2,
404 _image_data.width()/2, _image_data.height()/2 ); 389 _image_data.width()/2, _image_data.height()/2 );
405 _zoomer->setImage( _image_data ); 390 _zoomer->setImage( _image_data );
406 } 391 }
407 /* 392 /*
408 * invalidate 393 * invalidate
409 */ 394 */
410 _image_data=QImage(); 395 _image_data=QImage();
411 {
412 QCopEnvelope env( "QPE/System", "notBusy(QString)" );
413 env << "Image generated";
414 }
415} 396}
416 397
417void OImageScrollView::resizeEvent(QResizeEvent * e) 398void OImageScrollView::resizeEvent(QResizeEvent * e)
418{ 399{
419 odebug << "OImageScrollView resizeEvent" << oendl; 400 odebug << "OImageScrollView resizeEvent" << oendl;
420 QScrollView::resizeEvent(e); 401 QScrollView::resizeEvent(e);
421 generateImage(); 402 generateImage();
422 setFirstResizeDone(true); 403 setFirstResizeDone(true);
423 emit viewportSizeChanged( viewport()->size() ); 404 emit viewportSizeChanged( viewport()->size() );
424 405
425} 406}
426 407
diff --git a/libopie2/opiemm/oimagescrollview.h b/libopie2/opiemm/oimagescrollview.h
index 94fddb6..01a2d56 100644
--- a/libopie2/opiemm/oimagescrollview.h
+++ b/libopie2/opiemm/oimagescrollview.h
@@ -79,24 +79,37 @@ public:
79 virtual void setAutoRotate(bool how); 79 virtual void setAutoRotate(bool how);
80 /** 80 /**
81 * set if the image should be scaled to the size of the viewport if larger(!) 81 * set if the image should be scaled to the size of the viewport if larger(!)
82 * 82 *
83 * if autoscaling is set when loading a jpeg image, it will use a feature of 83 * if autoscaling is set when loading a jpeg image, it will use a feature of
84 * jpeg lib to load the image scaled to display size. If switch of later the 84 * jpeg lib to load the image scaled to display size. If switch of later the
85 * image will reloaded. 85 * image will reloaded.
86 * 86 *
87 * @param how true - display image scaled down otherwise not 87 * @param how true - display image scaled down otherwise not
88 */ 88 */
89 virtual void setAutoScale(bool how); 89 virtual void setAutoScale(bool how);
90 /** 90 /**
91 * set if the image should be scaled to the size of the viewport if larger(!)
92 * and/or rotate to best fit. You avoid double repainting when you want to switch
93 * booth values.
94 *
95 * if autoscaling is set when loading a jpeg image, it will use a feature of
96 * jpeg lib to load the image scaled to display size. If switch of later the
97 * image will reloaded.
98 *
99 * @param scale true - display image scaled down otherwise not
100 * @param rotate true - the image will rotate for best fit
101 */
102 virtual void setAutoScaleRotate(bool scale, bool rotate);
103 /**
91 * set if there should be displayed a small zoomer widget at the right bottom of 104 * set if there should be displayed a small zoomer widget at the right bottom of
92 * the view when the image is larger than the viewport. 105 * the view when the image is larger than the viewport.
93 * 106 *
94 * @param how true - display zoomer 107 * @param how true - display zoomer
95 */ 108 */
96 virtual void setShowZoomer(bool how); 109 virtual void setShowZoomer(bool how);
97 110
98 /** 111 /**
99 * return the current value of the autorotate flag. 112 * return the current value of the autorotate flag.
100 */ 113 */
101 virtual bool AutoRotate()const; 114 virtual bool AutoRotate()const;
102 /** 115 /**