Diffstat (limited to 'noncore/graphics/opie-eye/gui/imagescrollview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/graphics/opie-eye/gui/imagescrollview.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.cpp b/noncore/graphics/opie-eye/gui/imagescrollview.cpp new file mode 100644 index 0000000..f36b717 --- a/dev/null +++ b/noncore/graphics/opie-eye/gui/imagescrollview.cpp @@ -0,0 +1,97 @@ +#include "imagescrollview.h" + +#include <qimage.h> +#include <qlayout.h> + +ImageScrollView::ImageScrollView (const QImage&img, QWidget * parent, const char * name, WFlags f) + :QScrollView(parent,name,f|Qt::WRepaintNoErase),_image_data(img) +{ + init(); +} + +ImageScrollView::ImageScrollView (const QString&img, QWidget * parent, const char * name, WFlags f) + :QScrollView(parent,name,f/*|Qt::WRepaintNoErase*/),_image_data(img) +{ + init(); +} + +void ImageScrollView::setImage(const QImage&img) +{ + _image_data = img; + init(); +} + +/* should be called every time the QImage changed it content */ +void ImageScrollView::init() +{ + viewport()->setBackgroundColor(white); + resizeContents(_image_data.width(),_image_data.height()); +} + +ImageScrollView::~ImageScrollView() +{ +} + +void ImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clipw, int cliph) +{ + int w = clipw; + int h = cliph; + int x = clipx; + int y = clipy; + bool erase = false; + + if (w>_image_data.width()) { + w=_image_data.width(); + x = 0; + erase = true; + } else if (x+w>_image_data.width()){ + x = _image_data.width()-w; + } + if (h>_image_data.height()) { + h=_image_data.height(); + y = 0; + erase = true; + } else if (y+h>_image_data.height()){ + y = _image_data.height()-h; + } + if (erase) { + p->fillRect(clipx,clipy,clipw,cliph,white); + } + p->drawImage(clipx,clipy,_image_data,x,y,w,h); +} + +void ImageScrollView::viewportMouseMoveEvent(QMouseEvent* e) +{ + int mx, my; + viewportToContents( e->x(), e->y(), mx, my ); + + scrollBy(_mouseStartPosX-mx,my-_mouseStartPosY); + + _mouseStartPosX=mx; + _mouseStartPosY=my; +} + +void ImageScrollView::contentsMouseReleaseEvent ( QMouseEvent * e) +{ + viewportToContents( e->x(), e->y(), _mouseStartPosX,_mouseStartPosY ); +} + +void ImageScrollView::contentsMousePressEvent ( QMouseEvent * e) +{ + viewportToContents( e->x(), e->y(), _mouseStartPosX,_mouseStartPosY ); +} + +/* for testing */ +ImageDlg::ImageDlg(const QString&fname,QWidget * parent, const char * name) + :QDialog(parent,name,true,WStyle_ContextHelp) +{ + QVBoxLayout*dlglayout = new QVBoxLayout(this); + dlglayout->setSpacing(2); + dlglayout->setMargin(1); + ImageScrollView*inf = new ImageScrollView(fname,this); + dlglayout->addWidget(inf); +} + +ImageDlg::~ImageDlg() +{ +} |