From 266b184c615022484b988e1638be768b11c0c19b Mon Sep 17 00:00:00 2001 From: alwin Date: Mon, 05 Apr 2004 22:09:25 +0000 Subject: yeah - autoresize and autoscale now have toggle-buttons and the image display respect these buttons ToDo: find a good way for prescaled loading of images if autoScale is on (in respect to autorotate and so on) --- 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()_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 @@ -92,6 +92,20 @@ PMainWindow::PMainWindow(QWidget* wid, const char* name, WFlags style) btn->setIconSet( Resource::loadIconSet( "SettingsIcon" ) ); 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; } @@ -99,6 +113,25 @@ 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( "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: -- cgit v0.9.0.2