Added an ImageLoader Object to Support Multi Threading in Loading an Image
[photoenhancer] / src / core / baseui / workspace.cpp
1 #include "workspace.h"
2 #include <QPainter>
3 ImageLoader::ImageLoader()
4 {
5     url=QString();
6 }
7 void ImageLoader::fetchImage(QString path)
8 {
9     url=path;
10     start();
11 }
12 void ImageLoader::run()
13 {
14     QImage image(url);
15     emit ready(image);
16 }
17
18 Workspace::Workspace(QWidget *parent) :
19     QWidget(parent)
20 {
21     qRegisterMetaType<QImage>("QImage &" );
22     mImageLoader=new ImageLoader();
23     connect(mImageLoader,SIGNAL(ready(QImage&)),this,SLOT(onImageLoaded(QImage&)));
24 }
25 void  Workspace::loadImage(QString fileName)
26 {
27    mImageLoader->fetchImage(fileName);
28 }
29 void Workspace::onImageLoaded(QImage &image)
30 {
31      mImage=image.copy();
32      update();
33 }
34
35 void  Workspace::zoomIn()
36 {
37     mImage=mImage.scaledToHeight(mImage.height()*1.5);
38     mImage=mImage.scaledToWidth(mImage.width()*1.5);
39     update();
40 }
41 void  Workspace::zoomOut()
42 {
43     mImage=mImage.scaledToHeight(mImage.height()*0.5);
44     mImage=mImage.scaledToWidth(mImage.width()*0.5);
45     update();
46 }
47
48 void  Workspace::paintEvent(QPaintEvent *p)
49 {
50     QPainter painter(this);
51     painter.drawImage(mImage.rect(),mImage);
52 }