18 #include "viewmanager.h"
22 const static float mMinScale = 0.01f;
23 const static float mMaxScale = 100.0f;
26 ViewManager::ViewManager(QObject *parent) :
BaseManager(parent)
30 bool ViewManager::init()
37 mView = o->data()->getCurrentView();
39 if ( mView.isIdentity() )
43 updateViewTransforms();
50 o->data()->setCurrentView( mView );
54 QPointF ViewManager::mapCanvasToScreen( QPointF p )
56 return mViewCanvas.map( p );
59 QPointF ViewManager::mapScreenToCanvas(QPointF p)
61 return mViewCanvasInverse.map( p );
64 QPainterPath ViewManager::mapCanvasToScreen(
const QPainterPath& path )
66 return mViewCanvas.map( path );
69 QRectF ViewManager::mapCanvasToScreen(
const QRectF& rect )
71 return mViewCanvas.mapRect( rect ) ;
74 QRectF ViewManager::mapScreenToCanvas(
const QRectF& rect )
76 return mViewCanvasInverse.mapRect( rect ) ;
79 QPainterPath ViewManager::mapScreenToCanvas(
const QPainterPath& path )
81 return mViewCanvasInverse.map( path );
84 QTransform ViewManager::getView()
89 void ViewManager::updateViewTransforms()
92 t.translate(mTranslate.x(), mTranslate.y());
97 float flipX = mIsFlipHorizontal ? -1.f : 1.f;
98 float flipY = mIsFlipVertical ? -1.f : 1.f;
101 s.scale(mScale * flipX, mScale * flipY);
104 c.translate(mCanvasSize.width() / 2.f, mCanvasSize.height() / 2.f);
108 mViewInverse = mView.inverted();
109 mViewCanvas = mView * mCentre;
110 mViewCanvasInverse = mViewCanvas.inverted();
113 void ViewManager::translate(
float dx,
float dy)
115 mTranslate = QPointF(dx, dy);
116 updateViewTransforms();
118 Q_EMIT viewChanged();
121 void ViewManager::translate(QPointF offset)
123 translate( offset.x(), offset.y() );
126 void ViewManager::rotate(
float degree)
131 mRotate = mRotate - 360.f;
133 else if (mRotate < 0.f)
135 mRotate = mRotate + 360.f;
138 updateViewTransforms();
140 Q_EMIT viewChanged();
143 void ViewManager::scaleUp()
145 scale(mScale * 1.18f);
148 void ViewManager::scaleDown()
150 scale(mScale * 0.8333f);
153 void ViewManager::scale(
float scaleValue)
155 if (scaleValue < mMinScale)
157 scaleValue = mMinScale;
159 else if (scaleValue > mMaxScale)
161 scaleValue = mMaxScale;
163 else if (scaleValue == mMinScale || scaleValue == mMaxScale)
168 updateViewTransforms();
170 Q_EMIT viewChanged();
173 void ViewManager::flipHorizontal(
bool b )
175 if ( b != mIsFlipHorizontal )
177 mIsFlipHorizontal = b;
178 updateViewTransforms();
180 Q_EMIT viewChanged();
184 void ViewManager::flipVertical(
bool b )
186 if ( b != mIsFlipVertical )
189 updateViewTransforms();
191 Q_EMIT viewChanged();
195 void ViewManager::setCanvasSize( QSize size )
198 mCentre = QTransform::fromTranslate(mCanvasSize.width() / 2.f, mCanvasSize.height() / 2.f);
200 updateViewTransforms();
201 Q_EMIT viewChanged();
204 void ViewManager::resetView()