summaryrefslogtreecommitdiff
path: root/libopie2/opiemm
Side-by-side diff
Diffstat (limited to 'libopie2/opiemm') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiemm/oimagescrollview.cpp30
1 files changed, 14 insertions, 16 deletions
diff --git a/libopie2/opiemm/oimagescrollview.cpp b/libopie2/opiemm/oimagescrollview.cpp
index 58a9748..10da823 100644
--- a/libopie2/opiemm/oimagescrollview.cpp
+++ b/libopie2/opiemm/oimagescrollview.cpp
@@ -96,72 +96,66 @@ void OImageScrollView::loadJpeg(bool interncall)
ExifData xf;
bool scanned = xf.scan(m_lastName);
int wid, hei;
wid = QApplication::desktop()->width();
hei = QApplication::desktop()->height();
if (hei>wid) {
wid = hei;
} else {
hei = wid;
}
if ( (scanned && (wid<xf.getWidth()||hei<xf.getHeight()))||!scanned ) {
param = QString( "Fast Shrink( 3 ) Scale( %1, %2, ScaleMin)" ).arg( wid ).arg( hei );
- odebug << "Load jpeg scaled \"" << param << "\"" << oendl;
iio.setParameters(param.latin1());
setImageScaledLoaded(true);
}
real_load = true;
}
} else {
if (ImageScaledLoaded()||!interncall) {
- odebug << "Load jpeg unscaled" << oendl;
real_load = true;
}
setImageScaledLoaded(false);
}
if (real_load) {
_original_data = iio.read() ? iio.image() : QImage();
}
}
void OImageScrollView::setImage( const QString& path ) {
- odebug << "load new image " << oendl;
if (m_lastName == path) return;
m_lastName = path;
_newImage = true;
_original_data = QImage();
QString itype = QImage::imageFormat(m_lastName);
- odebug << "Image type = " << itype << oendl;
if (itype == "JPEG") {
setImageIsJpeg(true);
loadJpeg();
} else {
setImageIsJpeg(false);
_original_data.load(path);
_original_data.convertDepth(QPixmap::defaultDepth());
_original_data.setAlphaBuffer(false);
}
_image_data = QImage();
if (FirstResizeDone()) {
generateImage();
if (isVisible()) viewport()->repaint(true);
}
}
/* should be called every time the QImage changed it content */
void OImageScrollView::init()
{
- odebug << "init " << oendl;
-
/*
* create the zoomer
* and connect ther various signals
*/
_zoomer = new Opie::MM::OImageZoomer( this, "The Zoomer" );
connect(_zoomer, SIGNAL( zoomAreaRel(int,int)),
this, SLOT(scrollBy(int,int)) );
connect(_zoomer, SIGNAL( zoomArea(int,int)),
this, SLOT(center(int,int)) );
connect(this,SIGNAL(contentsMoving(int,int)),
_zoomer, (SLOT(setVisiblePoint(int,int))) );
connect(this,SIGNAL(imageSizeChanged(const QSize&)),
@@ -342,52 +336,60 @@ void OImageScrollView::rotate_into_data(Rotation r)
}
break;
default:
dest = _original_data;
break;
}
}
_newImage = true;
_image_data = dest;
}
+// yes - sorry - it is NOT gamma it is just BRIGHTNESS. Alwin
void OImageScrollView::apply_gamma(int aValue)
{
if (!_image_data.size().isValid()) return;
- float percent = ((float)aValue/100);
- odebug << "Apply gamma " << percent << oendl;
- int pixels = _image_data.depth()>8?_image_data.width()*_image_data.height() : _image_data.numColors();
+ float percent = ((float)aValue/100.0);
+
int segColors = _image_data.depth() > 8 ? 256 : _image_data.numColors();
+ /* must be - otherwise it displays some ... strange colors */
+ if (segColors<256) segColors=256;
+
unsigned char *segTbl = new unsigned char[segColors];
+ int pixels = _image_data.depth()>8?_image_data.width()*_image_data.height() : _image_data.numColors();
+
+
bool brighten = (percent >= 0);
- if ( percent < 0 )
+ if ( percent < 0 ) {
percent = -percent;
+ }
unsigned int *data = _image_data.depth() > 8 ? (unsigned int *)_image_data.bits() :
(unsigned int *)_image_data.colorTable();
+ int tmp = 0;
if (brighten) {
for ( int i=0; i < segColors; ++i )
{
- int tmp = (int)(i*percent);
+ tmp = (int)(i*percent);
if ( tmp > 255 )
tmp = 255;
segTbl[i] = tmp;
}
} else {
for ( int i=0; i < segColors; ++i )
{
- int tmp = (int)(i*percent);
+ tmp = (int)(i*percent);
if ( tmp < 0 )
tmp = 0;
segTbl[i] = tmp;
}
}
if (brighten) {
for ( int i=0; i < pixels; ++i )
{
int r = qRed(data[i]);
int g = qGreen(data[i]);
int b = qBlue(data[i]);
int a = qAlpha(data[i]);
@@ -449,28 +451,26 @@ void OImageScrollView::generateImage()
_pdata = QPixmap();
if (_original_data.isNull()) {
emit imageSizeChanged( _image_data.size() );
if (_zoomer) _zoomer->setImage( _image_data );
return;
}
if (width()>height()&&_original_data.width()<_original_data.height() ||
width()<height()&&_original_data.width()>_original_data.height()) {
if (AutoRotate()) r = Rotate90;
}
int twidth,theight;
- odebug << " r = " << r << oendl;
if (AutoScale() && (_original_data.width()>width() || _original_data.height() > height()) ) {
if (!_image_data.size().isValid()||width()>_image_data.width()||height()>_image_data.height()) {
- odebug << "Rescaling data" << oendl;
if (r==Rotate0) {
_image_data = _original_data;
} else {
rotate_into_data(r);
}
_newImage = true;
}
rescaleImage(width(),height());
} else if (!FirstResizeDone()||r!=m_last_rot||_image_data.width()==0) {
if (r==Rotate0) {
_image_data = _original_data;
} else {
@@ -505,25 +505,24 @@ void OImageScrollView::generateImage()
}
/*
* invalidate
*/
_image_data=QImage();
if (isVisible()) {
updateContents(contentsX(),contentsY(),width(),height());
}
}
void OImageScrollView::resizeEvent(QResizeEvent * e)
{
- odebug << "OImageScrollView resizeEvent (" << e->size() << " - " << e->oldSize() << oendl;
QScrollView::resizeEvent(e);
if (e->oldSize()==e->size()||!isUpdatesEnabled ()) return;
generateImage();
setFirstResizeDone(true);
emit viewportSizeChanged( viewport()->size() );
}
void OImageScrollView::keyPressEvent(QKeyEvent * e)
{
if (!e) return;
int dx = horizontalScrollBar()->lineStep();
@@ -586,25 +585,24 @@ void OImageScrollView::viewportMouseMoveEvent(QMouseEvent* e)
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 ;)
*/
_mouseStartPosX = -1;
_mouseStartPosY = -1;
}
void OImageScrollView::setDestructiveClose() {
WFlags fl = getWFlags();
/* clear it just in case */