This commit is contained in:
Jeremy Bullock 2020-04-08 21:45:17 -06:00
parent 63e824b224
commit 118ba5bcc9
9 changed files with 873 additions and 897 deletions

File diff suppressed because it is too large Load diff

View file

@ -167,12 +167,12 @@ public:
TPoint m_liveViewZoomOffset = TPoint(0, 0); TPoint m_liveViewZoomOffset = TPoint(0, 0);
EdsUInt32 m_liveViewZoom = 1; EdsUInt32 m_liveViewZoom = 1;
bool m_pickLiveViewZoom = false; bool m_pickLiveViewZoom = false;
bool m_liveViewZoomReadyToPick = true; bool m_liveViewZoomReadyToPick = true;
TPointD m_liveViewZoomPickPoint = TPointD(0.0, 0.0); TPointD m_liveViewZoomPickPoint = TPointD(0.0, 0.0);
TPoint m_zoomRectDimensions = TPoint(0, 0); TPoint m_zoomRectDimensions = TPoint(0, 0);
TPoint m_calculatedZoomPoint = TPoint(0, 0); TPoint m_calculatedZoomPoint = TPoint(0, 0);
TPoint m_finalZoomPoint = TPoint(0, 0); TPoint m_finalZoomPoint = TPoint(0, 0);
TRect m_zoomRect = TRect(0, 0, 0, 0); TRect m_zoomRect = TRect(0, 0, 0, 0);
// Webcam Public Properties // Webcam Public Properties
QString m_webcamDeviceName; QString m_webcamDeviceName;

View file

@ -195,7 +195,7 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) {
m_resolutionCombo = new QComboBox(this); m_resolutionCombo = new QComboBox(this);
m_resolutionCombo->setFixedWidth(fontMetrics().width("0000 x 0000") + 25); m_resolutionCombo->setFixedWidth(fontMetrics().width("0000 x 0000") + 25);
m_resolutionLabel = new QLabel(tr("Resolution: "), this); m_resolutionLabel = new QLabel(tr("Resolution: "), this);
m_cameraStatusLabel = new QLabel(tr("Camera Status"), this); m_cameraStatusLabel = new QLabel(tr("Camera Status"), this);
QPushButton *refreshCamListButton = new QPushButton(tr("Refresh"), this); QPushButton *refreshCamListButton = new QPushButton(tr("Refresh"), this);
refreshCamListButton->setFixedHeight(28); refreshCamListButton->setFixedHeight(28);
refreshCamListButton->setStyleSheet("padding: 0 2;"); refreshCamListButton->setStyleSheet("padding: 0 2;");
@ -1152,7 +1152,7 @@ void StopMotionController::refreshMode() {
m_cameraStatusLabel->hide(); m_cameraStatusLabel->hide();
return; return;
} }
QString mode = m_stopMotion->getMode(); QString mode = m_stopMotion->getMode();
QString battery = m_stopMotion->getCurrentBatteryLevel(); QString battery = m_stopMotion->getCurrentBatteryLevel();
m_cameraModeLabel->setText(tr("Mode: ") + mode); m_cameraModeLabel->setText(tr("Mode: ") + mode);
m_cameraStatusLabel->setText("Mode: " + mode + " - Battery: " + battery); m_cameraStatusLabel->setText("Mode: " + mode + " - Battery: " + battery);
@ -1630,57 +1630,55 @@ void StopMotionController::hideEvent(QHideEvent *event) {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void StopMotionController::keyPressEvent(QKeyEvent *event) { void StopMotionController::keyPressEvent(QKeyEvent *event) {
int key = event->key();
int key = event->key(); TFrameHandle *fh = TApp::instance()->getCurrentFrame();
TFrameHandle* fh = TApp::instance()->getCurrentFrame(); int origFrame = fh->getFrame();
int origFrame = fh->getFrame(); if ((m_stopMotion->m_pickLiveViewZoom || m_stopMotion->m_zooming) &&
if ((m_stopMotion->m_pickLiveViewZoom || m_stopMotion->m_zooming) && (key == Qt::Key_Left || key == Qt::Key_Right || key == Qt::Key_Up || key == Qt::Key_Down (key == Qt::Key_Left || key == Qt::Key_Right || key == Qt::Key_Up ||
|| key == Qt::Key_2 || key == Qt::Key_4 || key == Qt::Key_6 || key == Qt::Key_8)) { key == Qt::Key_Down || key == Qt::Key_2 || key == Qt::Key_4 ||
if (m_stopMotion->m_liveViewZoomReadyToPick == true) { key == Qt::Key_6 || key == Qt::Key_8)) {
if (key == Qt::Key_Left || key == Qt::Key_4) { if (m_stopMotion->m_liveViewZoomReadyToPick == true) {
m_stopMotion->m_liveViewZoomPickPoint.x -= 10; if (key == Qt::Key_Left || key == Qt::Key_4) {
} m_stopMotion->m_liveViewZoomPickPoint.x -= 10;
if (key == Qt::Key_Right || key == Qt::Key_6) { }
m_stopMotion->m_liveViewZoomPickPoint.x += 10; if (key == Qt::Key_Right || key == Qt::Key_6) {
} m_stopMotion->m_liveViewZoomPickPoint.x += 10;
if (key == Qt::Key_Up || key == Qt::Key_8) { }
m_stopMotion->m_liveViewZoomPickPoint.y += 10; if (key == Qt::Key_Up || key == Qt::Key_8) {
} m_stopMotion->m_liveViewZoomPickPoint.y += 10;
if (key == Qt::Key_Down || key == Qt::Key_2) { }
m_stopMotion->m_liveViewZoomPickPoint.y -= 10; if (key == Qt::Key_Down || key == Qt::Key_2) {
} m_stopMotion->m_liveViewZoomPickPoint.y -= 10;
if (m_stopMotion->m_zooming) { }
m_stopMotion->setZoomPoint(); if (m_stopMotion->m_zooming) {
} m_stopMotion->setZoomPoint();
} }
m_stopMotion->calculateZoomPoint(); }
event->accept(); m_stopMotion->calculateZoomPoint();
} event->accept();
else if (key == Qt::Key_Up || key == Qt::Key_Left) { } else if (key == Qt::Key_Up || key == Qt::Key_Left) {
fh->prevFrame(); fh->prevFrame();
event->accept(); event->accept();
} } else if (key == Qt::Key_Down || key == Qt::Key_Right) {
else if (key == Qt::Key_Down || key == Qt::Key_Right) { fh->nextFrame();
fh->nextFrame(); event->accept();
event->accept(); } else if (key == Qt::Key_Home) {
} fh->firstFrame();
else if (key == Qt::Key_Home) { event->accept();
fh->firstFrame(); } else if (key == Qt::Key_End) {
event->accept(); fh->lastFrame();
} event->accept();
else if (key == Qt::Key_End) { } else if (!m_stopMotion->m_pickLiveViewZoom &&
fh->lastFrame(); (key == Qt::Key_Return || key == Qt::Key_Enter)) {
event->accept();
}
else if (!m_stopMotion->m_pickLiveViewZoom && (key == Qt::Key_Return || key == Qt::Key_Enter)) {
m_captureButton->animateClick(); m_captureButton->animateClick();
event->accept(); event->accept();
} } else if (m_stopMotion->m_pickLiveViewZoom &&
else if (m_stopMotion->m_pickLiveViewZoom && (key == Qt::Key_Escape || key == Qt::Key_Enter || key == Qt::Key_Return )) { (key == Qt::Key_Escape || key == Qt::Key_Enter ||
m_stopMotion->toggleZoomPicking(); key == Qt::Key_Return)) {
} m_stopMotion->toggleZoomPicking();
}
else else
event->ignore(); event->ignore();
} }

View file

@ -74,7 +74,8 @@ class StopMotionController final : public QWidget {
*m_focusFar3Button, *m_captureFilterSettingsBtn; *m_focusFar3Button, *m_captureFilterSettingsBtn;
QHBoxLayout *m_focusAndZoomLayout; QHBoxLayout *m_focusAndZoomLayout;
QLabel *m_frameInfoLabel, *m_cameraSettingsLabel, *m_cameraModeLabel, QLabel *m_frameInfoLabel, *m_cameraSettingsLabel, *m_cameraModeLabel,
*m_kelvinLabel, *m_resolutionLabel, *m_directShowLabel, *m_cameraStatusLabel; *m_kelvinLabel, *m_resolutionLabel, *m_directShowLabel,
*m_cameraStatusLabel;
QToolButton *m_previousLevelButton, *m_previousFrameButton, QToolButton *m_previousLevelButton, *m_previousFrameButton,
*m_previousXSheetFrameButton; *m_previousXSheetFrameButton;
@ -103,7 +104,7 @@ protected:
void hideEvent(QHideEvent *event); void hideEvent(QHideEvent *event);
// void mousePressEvent(QMouseEvent *event) override; // void mousePressEvent(QMouseEvent *event) override;
// void keyPressEvent(QKeyEvent *event); // void keyPressEvent(QKeyEvent *event);
void keyPressEvent(QKeyEvent* event) override; void keyPressEvent(QKeyEvent *event) override;
protected slots: protected slots:
void refreshCameraList(); void refreshCameraList();

View file

@ -467,7 +467,8 @@ bool GenericSaveFilePopup::execute() {
// (yep, even if a DIFFERENT type was specified - next time do it right :P) // (yep, even if a DIFFERENT type was specified - next time do it right :P)
const QStringList &extList = m_browser->getFilterTypes(); const QStringList &extList = m_browser->getFilterTypes();
if (!m_isDirectoryOnly && !extList.contains(QString::fromStdString(path.getType()))) { if (!m_isDirectoryOnly &&
!extList.contains(QString::fromStdString(path.getType()))) {
path = path =
TFilePath(path.getWideString() + L"." + extList.first().toStdWString()); TFilePath(path.getWideString() + L"." + extList.first().toStdWString());
} }
@ -1220,10 +1221,10 @@ bool LoadLevelPopup::execute() {
args.frameIdsSet.push_back(tmp_fids); args.frameIdsSet.push_back(tmp_fids);
} }
int xFrom = m_xFrom->text().toInt(); int xFrom = m_xFrom->text().toInt();
if (xFrom) args.xFrom = xFrom; if (xFrom) args.xFrom = xFrom;
int xTo = m_xTo->text().toInt(); int xTo = m_xTo->text().toInt();
if (xTo) args.xTo = xTo; if (xTo) args.xTo = xTo;
args.levelName = m_levelName->text().toStdWString(); args.levelName = m_levelName->text().toStdWString();
args.step = m_stepCombo->currentIndex(); args.step = m_stepCombo->currentIndex();
@ -1574,7 +1575,7 @@ bool SaveLevelAsPopup::execute() {
TXshSimpleLevel *sl = dynamic_cast<TXshSimpleLevel *>( TXshSimpleLevel *sl = dynamic_cast<TXshSimpleLevel *>(
TApp::instance()->getCurrentLevel()->getLevel()); TApp::instance()->getCurrentLevel()->getLevel());
if (!sl) return false; if (!sl) return false;
std::string ext = sl->getPath().getType(); std::string ext = sl->getPath().getType();
if (fp.getType() == "") fp = fp.withType(ext); if (fp.getType() == "") fp = fp.withType(ext);
IoCmd::LoadResourceArguments args(fp); IoCmd::LoadResourceArguments args(fp);
@ -2231,7 +2232,7 @@ void BrowserPopup::initFolder(TFilePath path) {
} }
if (!TFileStatus(path).doesExist()) { if (!TFileStatus(path).doesExist()) {
ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene(); ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
if (scene) path = scene->decodeFilePath(path); if (scene) path = scene->decodeFilePath(path);
} }
if (!path.getType().empty()) path = path.getParentDir(); if (!path.getType().empty()) path = path.getParentDir();
@ -2300,8 +2301,8 @@ void BrowserPopupController::openPopup(QStringList filters,
QString BrowserPopupController::getPath(bool codePath) { QString BrowserPopupController::getPath(bool codePath) {
m_isExecute = false; m_isExecute = false;
if (!m_browserPopup) return QString(); if (!m_browserPopup) return QString();
ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene(); ToonzScene *scene = TApp::instance()->getCurrentScene()->getScene();
TFilePath fp = m_browserPopup->getPath(); TFilePath fp = m_browserPopup->getPath();
if (scene && codePath) fp = scene->codeFilePath(fp); if (scene && codePath) fp = scene->codeFilePath(fp);
std::cout << ::to_string(fp) << std::endl; std::cout << ::to_string(fp) << std::endl;
return toQString(fp); return toQString(fp);

View file

@ -1197,7 +1197,7 @@ void MainWindow::onMenuCheckboxChanged() {
#endif #endif
else if (cm->getAction(MI_RasterizePli) == action) { else if (cm->getAction(MI_RasterizePli) == action) {
if (!QGLPixelBuffer::hasOpenGLPbuffers()) isChecked = 0; if (!QGLPixelBuffer::hasOpenGLPbuffers()) isChecked = 0;
RasterizePliToggleAction = isChecked; RasterizePliToggleAction = isChecked;
} else if (cm->getAction(MI_SafeArea) == action) } else if (cm->getAction(MI_SafeArea) == action)
SafeAreaToggleAction = isChecked; SafeAreaToggleAction = isChecked;
else if (cm->getAction(MI_ViewColorcard) == action) else if (cm->getAction(MI_ViewColorcard) == action)
@ -1621,7 +1621,8 @@ void MainWindow::defineActions() {
createMenuRenderAction(MI_Preview, tr("&Preview"), "Ctrl+R"); createMenuRenderAction(MI_Preview, tr("&Preview"), "Ctrl+R");
createMenuFileAction(MI_SoundTrack, tr("&Export Soundtrack"), ""); createMenuFileAction(MI_SoundTrack, tr("&Export Soundtrack"), "");
#ifdef WITH_STOPMOTION #ifdef WITH_STOPMOTION
createMenuFileAction(MI_StopMotionExportImageSequence, tr("&Export Stop Motion Image Sequence"), ""); createMenuFileAction(MI_StopMotionExportImageSequence,
tr("&Export Stop Motion Image Sequence"), "");
#endif #endif
createMenuRenderAction(MI_SavePreviewedFrames, tr("&Save Previewed Frames"), createMenuRenderAction(MI_SavePreviewedFrames, tr("&Save Previewed Frames"),
""); "");
@ -2372,7 +2373,8 @@ void MainWindow::defineActions() {
createAction(MI_StopMotionToggleLiveView, tr("Toggle Stop Motion Live View"), createAction(MI_StopMotionToggleLiveView, tr("Toggle Stop Motion Live View"),
""); "");
createAction(MI_StopMotionToggleZoom, tr("Toggle Stop Motion Zoom"), ""); createAction(MI_StopMotionToggleZoom, tr("Toggle Stop Motion Zoom"), "");
createAction(MI_StopMotionPickFocusCheck, tr("Pick Focus Check Location"), ""); createAction(MI_StopMotionPickFocusCheck, tr("Pick Focus Check Location"),
"");
createAction(MI_StopMotionLowerSubsampling, createAction(MI_StopMotionLowerSubsampling,
tr("Lower Stop Motion Level Subsampling"), ""); tr("Lower Stop Motion Level Subsampling"), "");
createAction(MI_StopMotionRaiseSubsampling, createAction(MI_StopMotionRaiseSubsampling,
@ -2467,7 +2469,7 @@ void MainWindow::clearCacheFolder() {
// 1. $CACHE/[Current ProcessID] // 1. $CACHE/[Current ProcessID]
// 2. $CACHE/temp/[Current scene folder] if the current scene is untitled // 2. $CACHE/temp/[Current scene folder] if the current scene is untitled
TFilePath cacheRoot = ToonzFolder::getCacheRootFolder(); TFilePath cacheRoot = ToonzFolder::getCacheRootFolder();
if (cacheRoot.isEmpty()) cacheRoot = TEnv::getStuffDir() + "cache"; if (cacheRoot.isEmpty()) cacheRoot = TEnv::getStuffDir() + "cache";
TFilePathSet filesToBeRemoved; TFilePathSet filesToBeRemoved;
@ -2581,9 +2583,9 @@ RecentFiles::~RecentFiles() {}
void RecentFiles::addFilePath(QString path, FileType fileType, void RecentFiles::addFilePath(QString path, FileType fileType,
QString projectName) { QString projectName) {
QList<QString> files = QList<QString> files =
(fileType == Scene) (fileType == Scene) ? m_recentScenes : (fileType == Level)
? m_recentScenes ? m_recentLevels
: (fileType == Level) ? m_recentLevels : m_recentFlipbookImages; : m_recentFlipbookImages;
int i; int i;
for (i = 0; i < files.size(); i++) for (i = 0; i < files.size(); i++)
if (files.at(i) == path) { if (files.at(i) == path) {
@ -2750,9 +2752,9 @@ void RecentFiles::saveRecentFiles() {
QList<QString> RecentFiles::getFilesNameList(FileType fileType) { QList<QString> RecentFiles::getFilesNameList(FileType fileType) {
QList<QString> files = QList<QString> files =
(fileType == Scene) (fileType == Scene) ? m_recentScenes : (fileType == Level)
? m_recentScenes ? m_recentLevels
: (fileType == Level) ? m_recentLevels : m_recentFlipbookImages; : m_recentFlipbookImages;
QList<QString> names; QList<QString> names;
int i; int i;
for (i = 0; i < files.size(); i++) { for (i = 0; i < files.size(); i++) {
@ -2779,9 +2781,9 @@ void RecentFiles::refreshRecentFilesMenu(FileType fileType) {
menu->setEnabled(false); menu->setEnabled(false);
else { else {
CommandId clearActionId = CommandId clearActionId =
(fileType == Scene) (fileType == Scene) ? MI_ClearRecentScene : (fileType == Level)
? MI_ClearRecentScene ? MI_ClearRecentLevel
: (fileType == Level) ? MI_ClearRecentLevel : MI_ClearRecentImage; : MI_ClearRecentImage;
menu->setActions(names); menu->setActions(names);
menu->addSeparator(); menu->addSeparator();
QAction *clearAction = CommandManager::instance()->getAction(clearActionId); QAction *clearAction = CommandManager::instance()->getAction(clearActionId);

View file

@ -297,7 +297,7 @@ void invalidateIcons() {
s.m_paintIndex = mask & ToonzCheck::ePaint ? tc->getColorIndex() : -1; s.m_paintIndex = mask & ToonzCheck::ePaint ? tc->getColorIndex() : -1;
IconGenerator::instance()->setSettings(s); IconGenerator::instance()->setSettings(s);
// Force icons to refresh // Force icons to refresh
TXshLevel *sl = TApp::instance()->getCurrentLevel()->getLevel(); TXshLevel *sl = TApp::instance()->getCurrentLevel()->getLevel();
if (sl) { if (sl) {
std::vector<TFrameId> fids; std::vector<TFrameId> fids;
@ -1585,24 +1585,25 @@ void SceneViewer::drawOverlay() {
#ifdef WITH_STOPMOTION #ifdef WITH_STOPMOTION
// draw Stop Motion Zoom Box // draw Stop Motion Zoom Box
if (m_stopMotion->m_liveViewStatus == 2 && m_stopMotion->m_pickLiveViewZoom) { if (m_stopMotion->m_liveViewStatus == 2 &&
glPushMatrix(); m_stopMotion->m_pickLiveViewZoom) {
tglMultMatrix(m_drawCameraAff); glPushMatrix();
m_pixelSize = sqrt(tglGetPixelSize2()) * getDevPixRatio(); tglMultMatrix(m_drawCameraAff);
TRect rect = m_stopMotion->m_zoomRect; m_pixelSize = sqrt(tglGetPixelSize2()) * getDevPixRatio();
TRect rect = m_stopMotion->m_zoomRect;
glColor3d(1.0, 0.0, 0.0); glColor3d(1.0, 0.0, 0.0);
// border
glBegin(GL_LINE_STRIP);
glVertex2d(rect.x0, rect.y0);
glVertex2d(rect.x0, rect.y1 - m_pixelSize);
glVertex2d(rect.x1 - m_pixelSize, rect.y1 - m_pixelSize);
glVertex2d(rect.x1 - m_pixelSize, rect.y0);
glVertex2d(rect.x0, rect.y0);
glEnd();
glPopMatrix(); // border
glBegin(GL_LINE_STRIP);
glVertex2d(rect.x0, rect.y0);
glVertex2d(rect.x0, rect.y1 - m_pixelSize);
glVertex2d(rect.x1 - m_pixelSize, rect.y1 - m_pixelSize);
glVertex2d(rect.x1 - m_pixelSize, rect.y0);
glVertex2d(rect.x0, rect.y0);
glEnd();
glPopMatrix();
} }
#endif #endif
@ -1985,9 +1986,9 @@ void SceneViewer::drawScene() {
} }
#ifdef WITH_STOPMOTION #ifdef WITH_STOPMOTION
if (m_stopMotion->m_liveViewStatus == 2 && if (m_stopMotion->m_liveViewStatus == 2 &&
(!frameHandle->isPlaying() || (!frameHandle->isPlaying() ||
frame == m_stopMotion->getXSheetFrameNumber())) { frame == m_stopMotion->getXSheetFrameNumber())) {
if (m_hasStopMotionLineUpImage && m_stopMotion->m_showLineUpImage) { if (m_hasStopMotionLineUpImage && m_stopMotion->m_showLineUpImage) {
Stage::Player smPlayer; Stage::Player smPlayer;
double dpiX, dpiY; double dpiX, dpiY;
@ -2046,7 +2047,7 @@ double SceneViewer::projectToZ(const TPointD &delta) {
GLint viewport[4]; GLint viewport[4];
double modelview[16], projection[16]; double modelview[16], projection[16];
glGetIntegerv(GL_VIEWPORT, viewport); glGetIntegerv(GL_VIEWPORT, viewport);
for (int i = 0; i < 16; i++) for (int i = 0; i < 16; i++)
projection[i] = (double)m_projectionMatrix.constData()[i]; projection[i] = (double)m_projectionMatrix.constData()[i];
glGetDoublev(GL_MODELVIEW_MATRIX, modelview); glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
@ -2208,9 +2209,8 @@ void SceneViewer::zoomQt(bool forward, bool reset) {
if (reset || ((m_zoomScale3D < 500 || !forward) && if (reset || ((m_zoomScale3D < 500 || !forward) &&
(m_zoomScale3D > 0.01 || forward))) { (m_zoomScale3D > 0.01 || forward))) {
double oldZoomScale = m_zoomScale3D; double oldZoomScale = m_zoomScale3D;
m_zoomScale3D = m_zoomScale3D = reset ? 1 : ImageUtils::getQuantizedZoomFactor(
reset ? 1 m_zoomScale3D, forward);
: ImageUtils::getQuantizedZoomFactor(m_zoomScale3D, forward);
m_pan3D = -(m_zoomScale3D / oldZoomScale) * -m_pan3D; m_pan3D = -(m_zoomScale3D / oldZoomScale) * -m_pan3D;
} }
@ -2231,18 +2231,17 @@ void SceneViewer::zoomQt(bool forward, bool reset) {
int i; int i;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
TAffine &viewAff = m_viewAff[i]; TAffine &viewAff = m_viewAff[i];
if (m_isFlippedX) viewAff = viewAff * TScale(-1, 1); if (m_isFlippedX) viewAff = viewAff * TScale(-1, 1);
if (m_isFlippedX) viewAff = viewAff * TScale(1, -1); if (m_isFlippedX) viewAff = viewAff * TScale(1, -1);
double scale2 = std::abs(viewAff.det()); double scale2 = std::abs(viewAff.det());
if (m_isFlippedX) viewAff = viewAff * TScale(-1, 1); if (m_isFlippedX) viewAff = viewAff * TScale(-1, 1);
if (m_isFlippedX) viewAff = viewAff * TScale(1, -1); if (m_isFlippedX) viewAff = viewAff * TScale(1, -1);
if (reset || ((scale2 < 100000 || !forward) && if (reset || ((scale2 < 100000 || !forward) &&
(scale2 > 0.001 * 0.05 || forward))) { (scale2 > 0.001 * 0.05 || forward))) {
double oldZoomScale = sqrt(scale2) * dpiFactor; double oldZoomScale = sqrt(scale2) * dpiFactor;
double zoomScale = double zoomScale = reset ? 1 : ImageUtils::getQuantizedZoomFactor(
reset ? 1 oldZoomScale, forward);
: ImageUtils::getQuantizedZoomFactor(oldZoomScale, forward);
// threshold value -0.001 is intended to absorb the error of calculation // threshold value -0.001 is intended to absorb the error of calculation
if ((oldZoomScale - zoomScaleFittingWithScreen) * if ((oldZoomScale - zoomScaleFittingWithScreen) *
@ -2543,9 +2542,9 @@ void SceneViewer::fitToCamera() {
TPointD P11 = cameraAff * cameraRect.getP11(); TPointD P11 = cameraAff * cameraRect.getP11();
TPointD p0 = TPointD(std::min({P00.x, P01.x, P10.x, P11.x}), TPointD p0 = TPointD(std::min({P00.x, P01.x, P10.x, P11.x}),
std::min({P00.y, P01.y, P10.y, P11.y})); std::min({P00.y, P01.y, P10.y, P11.y}));
TPointD p1 = TPointD(std::max({P00.x, P01.x, P10.x, P11.x}), TPointD p1 = TPointD(std::max({P00.x, P01.x, P10.x, P11.x}),
std::max({P00.y, P01.y, P10.y, P11.y})); std::max({P00.y, P01.y, P10.y, P11.y}));
cameraRect = TRectD(p0.x, p0.y, p1.x, p1.y); cameraRect = TRectD(p0.x, p0.y, p1.x, p1.y);
// Pan // Pan
if (!is3DView()) { if (!is3DView()) {
@ -2598,8 +2597,8 @@ void SceneViewer::resetZoom() {
TPointD realCenter(m_viewAff[m_viewMode].a13, m_viewAff[m_viewMode].a23); TPointD realCenter(m_viewAff[m_viewMode].a13, m_viewAff[m_viewMode].a23);
TAffine aff = TAffine aff =
getNormalZoomScale() * TRotation(realCenter, m_rotationAngle[m_viewMode]); getNormalZoomScale() * TRotation(realCenter, m_rotationAngle[m_viewMode]);
aff.a13 = realCenter.x; aff.a13 = realCenter.x;
aff.a23 = realCenter.y; aff.a23 = realCenter.y;
if (m_isFlippedX) aff = aff * TScale(-1, 1); if (m_isFlippedX) aff = aff * TScale(-1, 1);
if (m_isFlippedY) aff = aff * TScale(1, -1); if (m_isFlippedY) aff = aff * TScale(1, -1);
setViewMatrix(aff, m_viewMode); setViewMatrix(aff, m_viewMode);
@ -2656,17 +2655,16 @@ void SceneViewer::setActualPixelSize() {
} else } else
dpi = sl->getDpi(fid); dpi = sl->getDpi(fid);
const double inch = Stage::inch; const double inch = Stage::inch;
TAffine tempAff = getNormalZoomScale(); TAffine tempAff = getNormalZoomScale();
if (m_isFlippedX) tempAff = tempAff * TScale(-1, 1); if (m_isFlippedX) tempAff = tempAff * TScale(-1, 1);
if (m_isFlippedY) tempAff = tempAff * TScale(1, -1); if (m_isFlippedY) tempAff = tempAff * TScale(1, -1);
TPointD tempScale = dpi; TPointD tempScale = dpi;
if (m_isFlippedX) tempScale.x = -tempScale.x; if (m_isFlippedX) tempScale.x = -tempScale.x;
if (m_isFlippedY) tempScale.y = -tempScale.y; if (m_isFlippedY) tempScale.y = -tempScale.y;
for (int i = 0; i < m_viewAff.size(); ++i) for (int i = 0; i < m_viewAff.size(); ++i)
setViewMatrix(dpi == TPointD(0, 0) setViewMatrix(dpi == TPointD(0, 0) ? tempAff : TScale(tempScale.x / inch,
? tempAff tempScale.y / inch),
: TScale(tempScale.x / inch, tempScale.y / inch),
i); i);
m_pos = QPoint(0, 0); m_pos = QPoint(0, 0);
@ -2949,7 +2947,7 @@ void drawSpline(const TAffine &viewMatrix, const TRect &clipRect, bool camera3d,
TStageObject *pegbar = TStageObject *pegbar =
objId != TStageObjectId::NoneId ? xsh->getStageObject(objId) : 0; objId != TStageObjectId::NoneId ? xsh->getStageObject(objId) : 0;
const TStroke *stroke = 0; const TStroke *stroke = 0;
if (pegbar && pegbar->getSpline()) stroke = pegbar->getSpline()->getStroke(); if (pegbar && pegbar->getSpline()) stroke = pegbar->getSpline()->getStroke();
if (!stroke) return; if (!stroke) return;

View file

@ -75,7 +75,7 @@ namespace {
void initToonzEvent(TMouseEvent &toonzEvent, QMouseEvent *event, void initToonzEvent(TMouseEvent &toonzEvent, QMouseEvent *event,
int widgetHeight, double pressure, int devPixRatio) { int widgetHeight, double pressure, int devPixRatio) {
toonzEvent.m_pos = TPointD(event->pos().x() * devPixRatio, toonzEvent.m_pos = TPointD(event->pos().x() * devPixRatio,
widgetHeight - 1 - event->pos().y() * devPixRatio); widgetHeight - 1 - event->pos().y() * devPixRatio);
toonzEvent.m_mousePos = event->pos(); toonzEvent.m_mousePos = event->pos();
toonzEvent.m_pressure = 1.0; toonzEvent.m_pressure = 1.0;
@ -908,12 +908,12 @@ void SceneViewer::wheelEvent(QWheelEvent *event) {
default: // Qt::MouseEventSynthesizedByQt, default: // Qt::MouseEventSynthesizedByQt,
// Qt::MouseEventSynthesizedByApplication // Qt::MouseEventSynthesizedByApplication
{ {
std::cout << "not supported event: Qt::MouseEventSynthesizedByQt, " std::cout << "not supported event: Qt::MouseEventSynthesizedByQt, "
"Qt::MouseEventSynthesizedByApplication" "Qt::MouseEventSynthesizedByApplication"
<< std::endl; << std::endl;
break; break;
} }
} // end switch } // end switch
@ -1009,8 +1009,8 @@ void SceneViewer::gestureEvent(QGestureEvent *e) {
qreal rotationDelta = qreal rotationDelta =
gesture->rotationAngle() - gesture->lastRotationAngle(); gesture->rotationAngle() - gesture->lastRotationAngle();
if (m_isFlippedX != m_isFlippedY) rotationDelta = -rotationDelta; if (m_isFlippedX != m_isFlippedY) rotationDelta = -rotationDelta;
TAffine aff = getViewMatrix().inv(); TAffine aff = getViewMatrix().inv();
TPointD center = aff * TPointD(0, 0); TPointD center = aff * TPointD(0, 0);
if (!m_rotating && !m_zooming) { if (!m_rotating && !m_zooming) {
m_rotationDelta += rotationDelta; m_rotationDelta += rotationDelta;
double absDelta = abs(m_rotationDelta); double absDelta = abs(m_rotationDelta);
@ -1089,115 +1089,118 @@ void SceneViewer::touchEvent(QTouchEvent *e, int type) {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
bool SceneViewer::event(QEvent *e) { bool SceneViewer::event(QEvent *e) {
/* /*
switch (e->type()) { switch (e->type()) {
// case QEvent::Enter: // case QEvent::Enter:
// qDebug() << "[enter] ************************** Enter"; // qDebug() << "[enter] ************************** Enter";
// break; // break;
// case QEvent::Leave: // case QEvent::Leave:
// qDebug() << "[enter] ************************** Leave"; // qDebug() << "[enter] ************************** Leave";
// break; // break;
case QEvent::TabletPress: { case QEvent::TabletPress: {
QTabletEvent *te = static_cast<QTabletEvent *>(e); QTabletEvent *te = static_cast<QTabletEvent *>(e);
qDebug() << "[enter] ************************** TabletPress mouseState(" qDebug() << "[enter] ************************** TabletPress mouseState("
<< m_mouseState << ") tabletState(" << m_tabletState << m_mouseState << ") tabletState(" << m_tabletState
<< ") pressure(" << m_pressure << ") pointerType(" << ") pressure(" << m_pressure << ") pointerType("
<< te->pointerType() << ") device(" << te->device() << ")"; << te->pointerType() << ") device(" << te->device() << ")";
} break; } break;
// case QEvent::TabletMove: // case QEvent::TabletMove:
// qDebug() << "[enter] ************************** TabletMove // qDebug() << "[enter] ************************** TabletMove
//mouseState("<<m_mouseState<<") tabletState("<<m_tabletState<<") pressure(" //mouseState("<<m_mouseState<<") tabletState("<<m_tabletState<<") pressure("
//<< m_pressure << ")"; //<< m_pressure << ")";
// break; // break;
case QEvent::TabletRelease: case QEvent::TabletRelease:
qDebug() << "[enter] ************************** TabletRelease mouseState(" qDebug() << "[enter] ************************** TabletRelease mouseState("
<< m_mouseState << ") tabletState(" << m_tabletState << ")"; << m_mouseState << ") tabletState(" << m_tabletState << ")";
break; break;
case QEvent::TouchBegin: case QEvent::TouchBegin:
qDebug() << "[enter] ************************** TouchBegin"; qDebug() << "[enter] ************************** TouchBegin";
break; break;
case QEvent::TouchEnd: case QEvent::TouchEnd:
qDebug() << "[enter] ************************** TouchEnd"; qDebug() << "[enter] ************************** TouchEnd";
break; break;
case QEvent::TouchCancel: case QEvent::TouchCancel:
qDebug() << "[enter] ************************** TouchCancel"; qDebug() << "[enter] ************************** TouchCancel";
break; break;
case QEvent::Gesture: case QEvent::Gesture:
qDebug() << "[enter] ************************** Gesture"; qDebug() << "[enter] ************************** Gesture";
break; break;
case QEvent::MouseButtonPress: case QEvent::MouseButtonPress:
qDebug() qDebug()
<< "[enter] ************************** MouseButtonPress mouseState(" << "[enter] ************************** MouseButtonPress mouseState("
<< m_mouseState << ") tabletState(" << m_tabletState << ") pressure(" << m_mouseState << ") tabletState(" << m_tabletState << ") pressure("
<< m_pressure << ") tabletEvent(" << m_tabletEvent << ")"; << m_pressure << ") tabletEvent(" << m_tabletEvent << ")";
break; break;
// case QEvent::MouseMove: // case QEvent::MouseMove:
// qDebug() << "[enter] ************************** MouseMove mouseState(" // qDebug() << "[enter] ************************** MouseMove mouseState("
//<< m_mouseState << ") tabletState("<<m_tabletState<<") pressure(" << //<< m_mouseState << ") tabletState("<<m_tabletState<<") pressure(" <<
//m_pressure << ")"; //m_pressure << ")";
// break; // break;
case QEvent::MouseButtonRelease: case QEvent::MouseButtonRelease:
qDebug() qDebug()
<< "[enter] ************************** MouseButtonRelease mouseState(" << "[enter] ************************** MouseButtonRelease mouseState("
<< m_mouseState << ") tabletState(" << m_tabletState << ")"; << m_mouseState << ") tabletState(" << m_tabletState << ")";
break; break;
case QEvent::MouseButtonDblClick: case QEvent::MouseButtonDblClick:
qDebug() << "[enter] ============================== MouseButtonDblClick"; qDebug() << "[enter] ============================== MouseButtonDblClick";
break; break;
} }
*/ */
#ifdef WITH_STOPMOTION #ifdef WITH_STOPMOTION
int key = 0; int key = 0;
if (e->type() == QEvent::KeyPress) { if (e->type() == QEvent::KeyPress) {
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(e); QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
key = keyEvent->key(); key = keyEvent->key();
if ((m_stopMotion->m_pickLiveViewZoom || m_stopMotion->m_zooming) && (key == Qt::Key_Left || key == Qt::Key_Right || key == Qt::Key_Up || key == Qt::Key_Down if ((m_stopMotion->m_pickLiveViewZoom || m_stopMotion->m_zooming) &&
|| key == Qt::Key_2 || key == Qt::Key_4 || key == Qt::Key_6 || key == Qt::Key_8)) { (key == Qt::Key_Left || key == Qt::Key_Right || key == Qt::Key_Up ||
if (m_stopMotion->m_liveViewZoomReadyToPick == true) { key == Qt::Key_Down || key == Qt::Key_2 || key == Qt::Key_4 ||
if (key == Qt::Key_Left || key == Qt::Key_4) { key == Qt::Key_6 || key == Qt::Key_8)) {
m_stopMotion->m_liveViewZoomPickPoint.x -= 10; if (m_stopMotion->m_liveViewZoomReadyToPick == true) {
} if (key == Qt::Key_Left || key == Qt::Key_4) {
if (key == Qt::Key_Right || key == Qt::Key_6) { m_stopMotion->m_liveViewZoomPickPoint.x -= 10;
m_stopMotion->m_liveViewZoomPickPoint.x += 10;
}
if (key == Qt::Key_Up || key == Qt::Key_8) {
m_stopMotion->m_liveViewZoomPickPoint.y += 10;
}
if (key == Qt::Key_Down || key == Qt::Key_2) {
m_stopMotion->m_liveViewZoomPickPoint.y -= 10;
}
if (m_stopMotion->m_zooming) {
m_stopMotion->setZoomPoint();
}
}
m_stopMotion->calculateZoomPoint();
e->accept();
return true;
} }
else if (m_stopMotion->m_pickLiveViewZoom && (key == Qt::Key_Escape || key == Qt::Key_Enter || key == Qt::Key_Return)) { if (key == Qt::Key_Right || key == Qt::Key_6) {
m_stopMotion->toggleZoomPicking(); m_stopMotion->m_liveViewZoomPickPoint.x += 10;
e->accept();
return true;
} }
else if (m_stopMotion->m_liveViewStatus == 2 && (key == Qt::Key_Enter || key == Qt::Key_Return)) { if (key == Qt::Key_Up || key == Qt::Key_8) {
m_stopMotion->captureImage(); m_stopMotion->m_liveViewZoomPickPoint.y += 10;
e->accept();
return true;
} }
if (key == Qt::Key_Down || key == Qt::Key_2) {
m_stopMotion->m_liveViewZoomPickPoint.y -= 10;
}
if (m_stopMotion->m_zooming) {
m_stopMotion->setZoomPoint();
}
}
m_stopMotion->calculateZoomPoint();
e->accept();
return true;
} else if (m_stopMotion->m_pickLiveViewZoom &&
(key == Qt::Key_Escape || key == Qt::Key_Enter ||
key == Qt::Key_Return)) {
m_stopMotion->toggleZoomPicking();
e->accept();
return true;
} else if (m_stopMotion->m_liveViewStatus == 2 &&
(key == Qt::Key_Enter || key == Qt::Key_Return)) {
m_stopMotion->captureImage();
e->accept();
return true;
} }
}
#endif #endif
if (e->type() == QEvent::Gesture && CommandManager::instance() if (e->type() == QEvent::Gesture &&
->getAction(MI_TouchGestureControl) CommandManager::instance()
->isChecked()) { ->getAction(MI_TouchGestureControl)
->isChecked()) {
gestureEvent(static_cast<QGestureEvent *>(e)); gestureEvent(static_cast<QGestureEvent *>(e));
return true; return true;
} }
@ -1237,7 +1240,7 @@ bool SceneViewer::event(QEvent *e) {
// Disable keyboard shortcuts while the tool is busy with a mouse drag // Disable keyboard shortcuts while the tool is busy with a mouse drag
// operation. // operation.
if ( tool->isDragging() ) { if (tool->isDragging()) {
e->accept(); e->accept();
} }
@ -1665,13 +1668,13 @@ void SceneViewer::dropEvent(QDropEvent *e) {
IoCmd::loadResources(args); IoCmd::loadResources(args);
if (acceptResourceOrFolderDrop(mimeData->urls())) { if (acceptResourceOrFolderDrop(mimeData->urls())) {
// Force Copy Action // Force Copy Action
e->setDropAction(Qt::CopyAction); e->setDropAction(Qt::CopyAction);
// For files, don't accept original proposed action in case it's a move // For files, don't accept original proposed action in case it's a move
e->accept(); e->accept();
return; return;
} }
} }
e->acceptProposedAction(); e->acceptProposedAction();
} }
@ -1685,8 +1688,8 @@ void SceneViewer::onToolSwitched() {
TTool *tool = TApp::instance()->getCurrentTool()->getTool(); TTool *tool = TApp::instance()->getCurrentTool()->getTool();
if (tool) { if (tool) {
tool->updateMatrix(); tool->updateMatrix();
if (tool->getViewer()) tool->getViewer()->setGuidedStrokePickerMode(0); if (tool->getViewer()) tool->getViewer()->setGuidedStrokePickerMode(0);
} }
onLevelChanged(); onLevelChanged();

View file

@ -920,7 +920,6 @@ void TXshSimpleLevel::loadData(TIStream &is) {
if (is.getTagParam("isStopMotionLevel", v)) if (is.getTagParam("isStopMotionLevel", v))
isStopMotionLevel = std::stoi(v); isStopMotionLevel = std::stoi(v);
m_properties->setDpiPolicy(dpiPolicy); m_properties->setDpiPolicy(dpiPolicy);
m_properties->setDpi(TPointD(xdpi, ydpi)); m_properties->setDpi(TPointD(xdpi, ydpi));
m_properties->setSubsampling(subsampling); m_properties->setSubsampling(subsampling);