summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/graphics/opie-eye/gui/imagescrollview.cpp56
-rw-r--r--noncore/graphics/opie-eye/gui/imagescrollview.h4
-rw-r--r--noncore/graphics/opie-eye/gui/mainwindow.cpp41
-rw-r--r--noncore/graphics/opie-eye/gui/mainwindow.h5
4 files changed, 95 insertions, 11 deletions
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.cpp b/noncore/graphics/opie-eye/gui/imagescrollview.cpp
index 7d83e29..ee20f40 100644
--- a/noncore/graphics/opie-eye/gui/imagescrollview.cpp
+++ b/noncore/graphics/opie-eye/gui/imagescrollview.cpp
@@ -32,22 +32,52 @@ void ImageScrollView::setImage(const QImage&img)
{
_image_data = QImage();
_original_data=img;
- first_resize_done = false;
- init();
+ if (first_resize_done) {
+ generateImage();
+ }
}
void ImageScrollView::setImage( const QString& path ) {
-
+ odebug << "load new image " << oendl;
+ _original_data.load(path);
+ _image_data = QImage();
+ if (first_resize_done) {
+ generateImage();
+ }
}
/* should be called every time the QImage changed it content */
void ImageScrollView::init()
{
+ odebug << "init " << oendl;
viewport()->setBackgroundColor(white);
- if (_original_data.size().isValid()) {
+ if (first_resize_done) {
+ last_rot = Rotate0;
+ generateImage();
+ odebug << "reinit display " << oendl;
+ } else if (_original_data.size().isValid()) {
resizeContents(_original_data.width(),_original_data.height());
}
- last_rot = Rotate0;
+}
+
+void ImageScrollView::setAutoRotate(bool how)
+{
+ /* to avoid double repaints */
+ if (rotate_to_fit != how) {
+ rotate_to_fit = how;
+ _image_data = QImage();
+ generateImage();
+ }
+}
+
+void ImageScrollView::setAutoScale(bool how)
+{
+ scale_to_fit = how;
+ if (!how) {
+ rotate_to_fit = false;
+ }
+ _image_data = QImage();
+ generateImage();
}
ImageScrollView::~ImageScrollView()
@@ -181,10 +211,8 @@ void ImageScrollView::rotate_into_data(Rotation r)
_image_data = dest;
}
-void ImageScrollView::resizeEvent(QResizeEvent * e)
+void ImageScrollView::generateImage()
{
- odebug << "ImageScrollView resizeEvent" << oendl;
- QScrollView::resizeEvent(e);
Rotation r = Rotate0;
if (width()>height()&&_original_data.width()<_original_data.height() ||
width()<height()&&_original_data.width()>_original_data.height()) {
@@ -193,6 +221,7 @@ void ImageScrollView::resizeEvent(QResizeEvent * e)
odebug << " r = " << r << oendl;
if (scale_to_fit) {
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 {
@@ -200,8 +229,8 @@ void ImageScrollView::resizeEvent(QResizeEvent * e)
}
}
rescaleImage(width(),height());
- resizeContents(width()-10,height()-10);
- } else if (!first_resize_done||r!=last_rot) {
+ resizeContents(_image_data.width(),_image_data.height());
+ } else if (!first_resize_done||r!=last_rot||_image_data.width()==0) {
if (r==Rotate0) {
_image_data = _original_data;
} else {
@@ -210,6 +239,13 @@ void ImageScrollView::resizeEvent(QResizeEvent * e)
last_rot = r;
resizeContents(_image_data.width(),_image_data.height());
}
+}
+
+void ImageScrollView::resizeEvent(QResizeEvent * e)
+{
+ odebug << "ImageScrollView resizeEvent" << oendl;
+ QScrollView::resizeEvent(e);
+ generateImage();
first_resize_done = true;
}
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.h b/noncore/graphics/opie-eye/gui/imagescrollview.h
index 864a015..dcf54ce 100644
--- a/noncore/graphics/opie-eye/gui/imagescrollview.h
+++ b/noncore/graphics/opie-eye/gui/imagescrollview.h
@@ -21,6 +21,9 @@ public:
void setImage( const QString& path );
void setDestructiveClose();
+ void setAutoRotate(bool);
+ void setAutoScale(bool);
+
enum Rotation {
Rotate0,
Rotate90,
@@ -48,6 +51,7 @@ protected:
void rescaleImage(int w, int h);
void rotate_into_data(Rotation r);
+ void generateImage();
protected slots:
virtual void viewportMouseMoveEvent(QMouseEvent* e);
diff --git a/noncore/graphics/opie-eye/gui/mainwindow.cpp b/noncore/graphics/opie-eye/gui/mainwindow.cpp
index 7f384bd..88acd59 100644
--- a/noncore/graphics/opie-eye/gui/mainwindow.cpp
+++ b/noncore/graphics/opie-eye/gui/mainwindow.cpp
@@ -93,12 +93,45 @@ PMainWindow::PMainWindow(QWidget* wid, const char* name, WFlags style)
connect( btn, SIGNAL(clicked() ),
this, SLOT(slotConfig() ) );
+ rotateButton = new QToolButton(bar);
+ rotateButton->setIconSet( Resource::loadIconSet( "rotate" ) );
+ rotateButton->setToggleButton(true);
+ rotateButton->setOn(true);
+ connect(rotateButton,SIGNAL(toggled(bool)),this,SLOT(slotRotateToggled(bool)));
+ autoRotate = true;
+
+ btn = new QToolButton(bar);
+ btn->setIconSet( Resource::loadIconSet( "1to1" ) );
+ btn->setToggleButton(true);
+ btn->setOn(false);
+ connect(btn,SIGNAL(toggled(bool)),this,SLOT(slotScaleToggled(bool)));
+ autoScale = true;
+
}
PMainWindow::~PMainWindow() {
odebug << "Shutting down" << oendl;
}
+void PMainWindow::slotRotateToggled(bool how)
+{
+ autoRotate = how;
+ if (m_disp) {
+ m_disp->setAutoRotate(how);
+ }
+}
+
+void PMainWindow::slotScaleToggled(bool how)
+{
+ autoScale = !how;
+ if (m_disp) {
+ m_disp->setAutoScale(autoScale);
+ }
+ if (!autoScale && autoRotate) {
+ rotateButton->setOn(false);
+ }
+ rotateButton->setEnabled(!how);
+}
void PMainWindow::slotConfig() {
/*
@@ -180,6 +213,11 @@ void PMainWindow::initInfo() {
}
void PMainWindow::initDisp() {
initT<ImageScrollView>( "Image ScrollView", &m_disp, ImageDisplay );
+ if (m_disp) {
+ m_disp->setAutoScale(autoScale);
+ m_disp->setAutoRotate(autoRotate);
+ }
+
}
/**
@@ -198,8 +236,9 @@ void PMainWindow::slotShowInfo( const QString& inf ) {
}
void PMainWindow::slotDisplay( const QString& inf ) {
- if ( !m_disp )
+ if ( !m_disp ) {
initDisp();
+ }
m_disp->setImage( inf );
m_stack->raiseWidget( ImageDisplay );
}
diff --git a/noncore/graphics/opie-eye/gui/mainwindow.h b/noncore/graphics/opie-eye/gui/mainwindow.h
index 35116ae..6debf7f 100644
--- a/noncore/graphics/opie-eye/gui/mainwindow.h
+++ b/noncore/graphics/opie-eye/gui/mainwindow.h
@@ -37,6 +37,8 @@ public slots:
void slotShowInfo( const QString& inf );
void slotDisplay( const QString& inf );
void slotReturn();
+ void slotRotateToggled(bool);
+ void slotScaleToggled(bool);
protected:
void raiseIconView();
@@ -53,6 +55,9 @@ private:
PIconView* m_view;
imageinfo *m_info;
ImageScrollView *m_disp;
+ bool autoRotate;
+ bool autoScale;
+ QToolButton*rotateButton;
private slots: