summaryrefslogtreecommitdiff
path: root/libopie2
authoralwin <alwin>2004-04-22 23:48:23 (UTC)
committer alwin <alwin>2004-04-22 23:48:23 (UTC)
commitba10e43945b15753e0438cd0176cfa61d61c7391 (patch) (side-by-side diff)
tree114d7531958a85adc7605e54a0128561f9d4f0eb /libopie2
parentd93cb43bb2c79a9a8357e195fcdfd8ff140f8a75 (diff)
downloadopie-ba10e43945b15753e0438cd0176cfa61d61c7391.zip
opie-ba10e43945b15753e0438cd0176cfa61d61c7391.tar.gz
opie-ba10e43945b15753e0438cd0176cfa61d61c7391.tar.bz2
reworked the painting algorithm again, hopefully now it works in all cases
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiemm/oimagescrollview.cpp48
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
@@ -37,49 +37,49 @@ OImageScrollView::OImageScrollView( QWidget* parent, const char* name, WFlags f
OImageScrollView::OImageScrollView (const QImage&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit)
:QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(img),
m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("")
{
_zoomer = 0;
m_states[AUTO_SCALE]=always_scale;
m_states[AUTO_ROTATE]=rfit;
m_states[FIRST_RESIZE_DONE]=false;
m_states[IMAGE_IS_JPEG]=false;
m_states[IMAGE_SCALED_LOADED]=false;
m_states[SHOW_ZOOMER]=true;
_original_data.convertDepth(QPixmap::defaultDepth());
- _original_data.setAlphaBuffer(false);
+ //_original_data.setAlphaBuffer(false);
init();
}
OImageScrollView::OImageScrollView (const QString&img, QWidget * parent, const char * name, WFlags f,bool always_scale,bool rfit)
:QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(),_original_data(),m_states(SCROLLVIEW_BITSET_SIZE),m_lastName("")
{
_zoomer = 0;
m_states.resize(SCROLLVIEW_BITSET_SIZE);
m_states[AUTO_SCALE]=always_scale;
m_states[AUTO_ROTATE]=rfit;
m_states[FIRST_RESIZE_DONE]=false;
m_states[IMAGE_IS_JPEG]=false;
m_states[IMAGE_SCALED_LOADED]=false;
m_states[SHOW_ZOOMER]=true;
init();
setImage(img);
}
void OImageScrollView::setImage(const QImage&img)
{
_image_data = QImage();
_original_data=img;
_original_data.convertDepth(QPixmap::defaultDepth());
- _original_data.setAlphaBuffer(false);
+ //_original_data.setAlphaBuffer(false);
m_lastName = "";
setImageIsJpeg(false);
setImageScaledLoaded(false);
if (FirstResizeDone()) {
generateImage();
}
}
void OImageScrollView::loadJpeg(bool interncall)
{
if (m_lastName.isEmpty()) return;
QImageIO iio( m_lastName, 0l );
@@ -118,25 +118,25 @@ void OImageScrollView::setImage( const QString& path ) {
if (m_lastName == path) return;
m_lastName = path;
_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);
+ //_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;
@@ -425,67 +425,53 @@ void OImageScrollView::keyPressEvent(QKeyEvent * e)
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)
{
+ if (!_pdata.size().isValid()) {
+ p->fillRect(clipx,clipy,clipw,cliph, backgroundColor());
+ return;
+ }
+
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;
+ w = _pdata.width()-x;
+ erase=true;
}
-
if (h>_pdata.height()) {
- h=_pdata.height();
- y = 0;
+ h = _pdata.height()-y;
+ erase=true;
+ }
+ if (!erase && (clipy+cliph>_pdata.height()||clipx+clipw>_pdata.width())) {
erase = true;
- } else if (y+h>_pdata.height()){
- y = _pdata.height()-h;
}
-
- if (erase||_original_data.hasAlphaBuffer()||clipy>_pdata.height()||clipx>_pdata.width()) {
- odebug << QSize(clipx,clipy) << " # " << QSize(clipw,cliph) << oendl;
+ if (erase||_original_data.hasAlphaBuffer()) {
p->fillRect(clipx,clipy,clipw,cliph, backgroundColor());
}
- odebug << QSize(x,y) << " - " << QSize(w,h) << oendl;
- if (clipy<=_pdata.height()&&clipx<=_pdata.width()) {
-#if 0
- odebug << "painting image content" << oendl;
-#endif
+ if (w>0 && h>0&&x<_pdata.width()&&y<_pdata.height()) {
+ odebug << "Drawing pixmap" << oendl;
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);