summaryrefslogtreecommitdiff
path: root/libopie2/opiemm
Unidiff
Diffstat (limited to 'libopie2/opiemm') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiemm/oimagescrollview.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/libopie2/opiemm/oimagescrollview.cpp b/libopie2/opiemm/oimagescrollview.cpp
index 10da823..76f50e1 100644
--- a/libopie2/opiemm/oimagescrollview.cpp
+++ b/libopie2/opiemm/oimagescrollview.cpp
@@ -192,32 +192,33 @@ bool OImageScrollView::AutoRotate()const
192 return m_states.testBit(AUTO_ROTATE); 192 return m_states.testBit(AUTO_ROTATE);
193} 193}
194 194
195void OImageScrollView::setAutoScaleRotate(bool scale, bool rotate) 195void OImageScrollView::setAutoScaleRotate(bool scale, bool rotate)
196{ 196{
197 m_states.setBit(AUTO_ROTATE,rotate); 197 m_states.setBit(AUTO_ROTATE,rotate);
198 setAutoScale(scale); 198 setAutoScale(scale);
199} 199}
200 200
201void OImageScrollView::setAutoScale(bool how) 201void OImageScrollView::setAutoScale(bool how)
202{ 202{
203 m_states.setBit(AUTO_SCALE,how); 203 m_states.setBit(AUTO_SCALE,how);
204 _image_data = QImage(); 204 _image_data = QImage();
205 if (ImageIsJpeg() && how == false && ImageScaledLoaded()==true) { 205 if (ImageIsJpeg() && how == false && ImageScaledLoaded()==true) {
206 loadJpeg(true); 206 loadJpeg(true);
207 } 207 }
208 _newImage = true;
208 generateImage(); 209 generateImage();
209} 210}
210 211
211bool OImageScrollView::AutoScale()const 212bool OImageScrollView::AutoScale()const
212{ 213{
213 return m_states.testBit(AUTO_SCALE); 214 return m_states.testBit(AUTO_SCALE);
214} 215}
215 216
216OImageScrollView::~OImageScrollView() 217OImageScrollView::~OImageScrollView()
217{ 218{
218} 219}
219 220
220void OImageScrollView::rescaleImage(int w, int h) 221void OImageScrollView::rescaleImage(int w, int h)
221{ 222{
222 if (_image_data.width()==w && _image_data.height()==h) { 223 if (_image_data.width()==w && _image_data.height()==h) {
223 return; 224 return;
@@ -335,34 +336,36 @@ void OImageScrollView::rotate_into_data(Rotation r)
335 } 336 }
336 } 337 }
337 break; 338 break;
338 default: 339 default:
339 dest = _original_data; 340 dest = _original_data;
340 break; 341 break;
341 } 342 }
342 343
343 } 344 }
344 _newImage = true; 345 _newImage = true;
345 _image_data = dest; 346 _image_data = dest;
346} 347}
347 348
348// yes - sorry - it is NOT gamma it is just BRIGHTNESS. Alwin 349// yes - sorry - it is NOT gamma it is just BRIGHTNESS. Alwin
349void OImageScrollView::apply_gamma(int aValue) 350void OImageScrollView::apply_gamma(int aValue)
350{ 351{
351 if (!_image_data.size().isValid()) return; 352 if (aValue==0 || !_image_data.size().isValid()) return;
352 float percent = ((float)aValue/100.0); 353 float percent = ((float)aValue/100.0);
354 /* make sure working on a copy */
355 _image_data.detach();
353 356
354 int segColors = _image_data.depth() > 8 ? 256 : _image_data.numColors(); 357 int segColors = _image_data.depth() > 8 ? 256 : _image_data.numColors();
355 /* must be - otherwise it displays some ... strange colors */ 358 /* must be - otherwise it displays some ... strange colors */
356 if (segColors<256) segColors=256; 359 if (segColors<256) segColors=256;
357 360
358 unsigned char *segTbl = new unsigned char[segColors]; 361 unsigned char *segTbl = new unsigned char[segColors];
359 int pixels = _image_data.depth()>8?_image_data.width()*_image_data.height() : _image_data.numColors(); 362 int pixels = _image_data.depth()>8?_image_data.width()*_image_data.height() : _image_data.numColors();
360 363
361 364
362 bool brighten = (percent >= 0); 365 bool brighten = (percent >= 0);
363 if ( percent < 0 ) { 366 if ( percent < 0 ) {
364 percent = -percent; 367 percent = -percent;
365 } 368 }
366 369
367 unsigned int *data = _image_data.depth() > 8 ? (unsigned int *)_image_data.bits() : 370 unsigned int *data = _image_data.depth() > 8 ? (unsigned int *)_image_data.bits() :
368 (unsigned int *)_image_data.colorTable(); 371 (unsigned int *)_image_data.colorTable();