18 #include <QPainterPath>
19 #include "viewmanager.h"
23 #include "layercamera.h"
25 const static qreal mMinScale = 0.01;
26 const static qreal mMaxScale = 100.0;
28 const std::vector<qreal> gZoomLevels
30 0.01, 0.02, 0.04, 0.06, 0.08, 0.12,
31 0.16, 0.25, 0.33, 0.5, 0.75, 1.0,
32 1.5, 2.0, 3.0, 4.0, 5.0, 6.0,
33 8.0, 16.0, 32.0, 48.0, 64.0, 96.0
39 mDefaultEditorCamera =
new Camera;
40 mCurrentCamera = mDefaultEditorCamera;
43 ViewManager::~ViewManager() {
44 delete mDefaultEditorCamera;
47 bool ViewManager::init()
49 connect(editor(), &Editor::currentFrameChanged,
this, &ViewManager::onCurrentFrameChanged);
55 mCameraLayer =
nullptr;
56 mCurrentCamera = mDefaultEditorCamera;
57 mCurrentCamera->reset();
58 updateViewTransforms();
65 o->data()->setCurrentView(mView);
69 void ViewManager::workingLayerChanged(
Layer* layer)
71 if (layer->type() == Layer::CAMERA)
73 setCameraLayer(layer);
77 setCameraLayer(
nullptr);
83 return mViewCanvas.
map(p);
88 return mViewCanvasInverse.
map(p);
93 return mViewCanvas.
map(path);
96 QRectF ViewManager::mapCanvasToScreen(
const QRectF& rect)
const
98 return mViewCanvas.
mapRect(rect);
101 QRectF ViewManager::mapScreenToCanvas(
const QRectF& rect)
const
103 return mViewCanvasInverse.
mapRect(rect);
108 return mViewCanvas.
map(polygon);
113 return mViewCanvasInverse.
map(polygon);
118 return mViewCanvasInverse.
map(path);
126 QTransform ViewManager::getViewInverse()
const
128 return mViewCanvasInverse;
131 void ViewManager::updateViewTransforms()
135 int frame = editor()->currentFrame();
136 mCurrentCamera = mCameraLayer->getCameraAtFrame(frame);
139 mCurrentCamera->updateViewTransform();
141 mView = mCameraLayer->getViewAtFrame(frame);
145 mCurrentCamera = mDefaultEditorCamera;
146 mCurrentCamera->updateViewTransform();
148 mView = mCurrentCamera->getView();
153 float flipX = mIsFlipHorizontal ? -1.f : 1.f;
154 float flipY = mIsFlipVertical ? -1.f : 1.f;
157 mViewCanvas = mView * f * mCentre;
158 mViewCanvasInverse = mViewCanvas.
inverted();
161 QPointF ViewManager::translation()
const
165 return mCurrentCamera->translation();
170 void ViewManager::translate(
float dx,
float dy)
174 mCurrentCamera->translate(static_cast<qreal>(dx), static_cast<qreal>(dy));
175 updateViewTransforms();
181 void ViewManager::translate(
QPointF offset)
183 translate(static_cast<float>(offset.
x()), static_cast<float>(offset.
y()));
186 void ViewManager::centerView()
191 float ViewManager::rotation()
195 return static_cast<float>(mCurrentCamera->rotation());
200 void ViewManager::rotate(
float degree)
204 mCurrentCamera->rotate(static_cast<qreal>(degree));
205 updateViewTransforms();
211 void ViewManager::resetRotation()
216 qreal ViewManager::scaling()
220 return mCurrentCamera->scaling();
225 void ViewManager::scaleUp()
227 for (
size_t i = 0; i < gZoomLevels.size(); i++)
229 if (gZoomLevels[i] > scaling())
231 scale(gZoomLevels[i]);
237 scale(scaling() * 1.18);
240 void ViewManager::scaleDown()
242 for (
int i = static_cast<int>(gZoomLevels.size()) - 1; i >= 0; --i)
244 if (gZoomLevels[static_cast<unsigned>(i)] < scaling())
246 scale(gZoomLevels[static_cast<unsigned>(i)]);
250 scale(scaling() * 0.8333);
253 void ViewManager::scale100()
258 void ViewManager::scale400()
263 void ViewManager::scale300()
268 void ViewManager::scale200()
273 void ViewManager::scale50()
278 void ViewManager::scale33()
283 void ViewManager::scale25()
288 void ViewManager::scale(qreal scaleValue)
290 if (scaleValue < mMinScale)
292 scaleValue = mMinScale;
294 else if (scaleValue > mMaxScale)
296 scaleValue = mMaxScale;
301 mCurrentCamera->scale(scaleValue);
302 updateViewTransforms();
308 void ViewManager::scaleWithOffset(qreal scaleValue,
QPointF offset)
310 if (scaleValue < mMinScale)
312 scaleValue = mMinScale;
314 else if (scaleValue > mMaxScale)
316 scaleValue = mMaxScale;
321 mCurrentCamera->scaleWithOffset(scaleValue, offset);
322 updateViewTransforms();
328 void ViewManager::flipHorizontal(
bool b)
330 if (b != mIsFlipHorizontal)
332 mIsFlipHorizontal = b;
333 updateViewTransforms();
340 void ViewManager::flipVertical(
bool b)
342 if (b != mIsFlipVertical)
345 updateViewTransforms();
352 void ViewManager::setOverlayCenter(
bool b)
354 if (b != mOverlayCenter)
357 updateViewTransforms();
362 void ViewManager::setOverlayThirds(
bool b)
364 if (b != mOverlayThirds)
367 updateViewTransforms();
372 void ViewManager::setOverlayGoldenRatio(
bool b)
374 if (b != mOverlayGoldenRatio)
376 mOverlayGoldenRatio = b;
377 updateViewTransforms();
382 void ViewManager::setOverlaySafeAreas(
bool b)
384 if (b != mOverlaySafeAreas)
386 mOverlaySafeAreas = b;
387 updateViewTransforms();
392 void ViewManager::setCanvasSize(
QSize size)
397 updateViewTransforms();
401 void ViewManager::setCameraLayer(
Layer* layer)
403 if (layer !=
nullptr)
405 if (layer->type() != Layer::CAMERA)
407 Q_ASSERT(
false &&
"Only camera layers allowed pls");
414 mCameraLayer =
nullptr;
417 updateViewTransforms();
420 void ViewManager::onCurrentFrameChanged()
424 updateViewTransforms();
428 void ViewManager::resetView()
432 mCurrentCamera->reset();
433 updateViewTransforms();
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)