summaryrefslogtreecommitdiff
authorzecke <zecke>2004-04-07 23:33:48 (UTC)
committer zecke <zecke>2004-04-07 23:33:48 (UTC)
commit61cb9c9ad238e5aec6aaa1384549e0aab99d14bf (patch) (side-by-side diff)
treeb96da732386aa45060bd80890cd7466cbcf77afb
parent0a21abab4eed64d17c4b1475569194117dab709c (diff)
downloadopie-61cb9c9ad238e5aec6aaa1384549e0aab99d14bf.zip
opie-61cb9c9ad238e5aec6aaa1384549e0aab99d14bf.tar.gz
opie-61cb9c9ad238e5aec6aaa1384549e0aab99d14bf.tar.bz2
First version of the zoomer placement still needs some work though
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/graphics/opie-eye/gui/imagescrollview.cpp38
-rw-r--r--noncore/graphics/opie-eye/gui/imagescrollview.h7
-rw-r--r--noncore/graphics/opie-eye/lib/oimagezoomer.cpp14
3 files changed, 52 insertions, 7 deletions
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.cpp b/noncore/graphics/opie-eye/gui/imagescrollview.cpp
index ad19219..5b12258 100644
--- a/noncore/graphics/opie-eye/gui/imagescrollview.cpp
+++ b/noncore/graphics/opie-eye/gui/imagescrollview.cpp
@@ -57,12 +57,27 @@ void ImageScrollView::setImage( const QString& path ) {
}
/* should be called every time the QImage changed it content */
void ImageScrollView::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(this,SIGNAL(contentsMoving(int,int)),
+ _zoomer, (SLOT(setVisiblePoint(int,int))) );
+ connect(this,SIGNAL(imageSizeChanged(const QSize&)),
+ _zoomer, SLOT(setImageSize(const QSize&)) );
+ connect(this,SIGNAL(viewportSizeChanged(const QSize&)),
+ _zoomer, SLOT(setViewPortSize(const QSize&)) );
+
viewport()->setBackgroundColor(white);
setFocusPolicy(QWidget::StrongFocus);
if (first_resize_done) {
last_rot = Rotate0;
generateImage();
odebug << "reinit display " << oendl;
@@ -248,21 +263,38 @@ void ImageScrollView::generateImage()
rotate_into_data(r);
}
last_rot = r;
resizeContents(_image_data.width(),_image_data.height());
}
_pdata.convertFromImage(_image_data);
+
+ /*
+ * update the zoomer
+ */
+ emit imageSizeChanged( _image_data.size() );
+ rescaleImage( 128, 128 );
+ _zoomer->setImage( _image_data );
+
+ /*
+ * invalidate
+ */
_image_data=QImage();
}
void ImageScrollView::resizeEvent(QResizeEvent * e)
{
odebug << "ImageScrollView resizeEvent" << oendl;
QScrollView::resizeEvent(e);
generateImage();
first_resize_done = true;
+ emit viewportSizeChanged( viewport()->size() );
+
+ /*
+ * move scrollbar
+ */
+ _zoomer->setGeometry( viewport()->width()-100, viewport()->height()-50, 100, 50 );
}
void ImageScrollView::keyPressEvent(QKeyEvent * e)
{
if (!e) return;
int dx = horizontalScrollBar()->lineStep();
@@ -317,12 +349,13 @@ void ImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clipw
p->drawPixmap(clipx,clipy,_pdata,x,y,w,h);
}
/* using the real geometry points and not the translated points is wanted! */
void ImageScrollView::viewportMouseMoveEvent(QMouseEvent* e)
{
+ odebug << "Move X and Y " << e->x() << " " << e->y() << oendl;
int mx, my;
mx = e->x();
my = e->y();
if (_mouseStartPosX!=-1 && _mouseStartPosY!=-1) {
int diffx = _mouseStartPosX-mx;
int diffy = _mouseStartPosY-my;
@@ -343,18 +376,19 @@ void ImageScrollView::viewportMouseMoveEvent(QMouseEvent* e)
scrollBy(diffx,diffy);
}
_mouseStartPosX=mx;
_mouseStartPosY=my;
}
-void ImageScrollView::contentsMousePressEvent ( QMouseEvent * )
+void ImageScrollView::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 ;)
+ position ;)
*/
_mouseStartPosX = -1;
_mouseStartPosY = -1;
}
void ImageScrollView::setDestructiveClose() {
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.h b/noncore/graphics/opie-eye/gui/imagescrollview.h
index eb91dbd..1b25103 100644
--- a/noncore/graphics/opie-eye/gui/imagescrollview.h
+++ b/noncore/graphics/opie-eye/gui/imagescrollview.h
@@ -1,15 +1,19 @@
#ifndef _IMAGE_SCROLL_VIEW_H
#define _IMAGE_SCROLL_VIEW_H
+#include <lib/oimagezoomer.h>
+
#include <qscrollview.h>
#include <qimage.h>
#include <qpixmap.h>
#include <qstring.h>
#include <qdialog.h>
+
+
class QPainter;
class ImageScrollView:public QScrollView
{
Q_OBJECT
public:
@@ -31,17 +35,20 @@ public:
Rotate180,
Rotate270
};
signals:
void sig_return();
+ void imageSizeChanged( const QSize& );
+ void viewportSizeChanged( const QSize& );
protected:
virtual void drawContents ( QPainter * p, int clipx, int clipy, int clipw, int cliph );
void init();
+ Opie::MM::OImageZoomer *_zoomer;
QImage _image_data;
QImage _original_data;
QPixmap _pdata;
int _mouseStartPosX,_mouseStartPosY;
diff --git a/noncore/graphics/opie-eye/lib/oimagezoomer.cpp b/noncore/graphics/opie-eye/lib/oimagezoomer.cpp
index 178fbd4..ffa3c0c 100644
--- a/noncore/graphics/opie-eye/lib/oimagezoomer.cpp
+++ b/noncore/graphics/opie-eye/lib/oimagezoomer.cpp
@@ -23,12 +23,16 @@ OImageZoomer::OImageZoomer( const QPixmap& pix, QWidget* par, const char* name,
OImageZoomer::OImageZoomer( const QSize& pSize, const QSize& vSize, QWidget* par,
const char* name, WFlags fl )
: QFrame( par, name, fl ), m_imgSize( pSize ),m_visSize( vSize ) {
init();
}
+OImageZoomer::~OImageZoomer() {
+
+}
+
void OImageZoomer::init() {
setFrameStyle( Panel | Sunken );
}
void OImageZoomer::setImageSize( const QSize& size ) {
m_imgSize = size;
@@ -90,25 +94,25 @@ void OImageZoomer::drawContents( QPainter* p ) {
if ( h > c.height() ) h = c.height();
p->drawRect( x, y, w, h );
}
void OImageZoomer::mousePressEvent( QMouseEvent* ) {
-
+ m_mouseX = m_mouseY = -1;
}
void OImageZoomer::mouseMoveEvent( QMouseEvent* ev ) {
int mx, my;
mx = ev->x();
my = ev->y();
if ( m_mouseX != -1 && m_mouseY != -1 ) {
- int diffx = m_mouseX-mx;
- int diffy = m_mouseY-my;
-// emit zoomAreaRel( diffx, diffy );
-// emit zoomArea(
+ int diffx = ( mx - m_mouseX ) * m_imgSize.width() / width();
+ int diffy = ( my - m_mouseY ) * m_imgSize.height() / height();
+ emit zoomAreaRel( diffx, diffy );
+ emit zoomArea(m_visPt.x()+diffx, m_visPt.y()+diffy );
}
m_mouseX = mx;
m_mouseY = my;
}