void PreviewEditorWindow::updateUsingEditor(Editor* editor) { if (!m_isEnabled || !editor) { hideWindow(); m_relatedEditor = nullptr; return; } if (!editor->isActive()) return; m_relatedEditor = editor; Doc* document = editor->document(); Editor* miniEditor = (m_docView ? m_docView->editor(): nullptr); if (!isVisible()) openWindow(); // Document preferences used to store the preferred zoom/scroll point auto& docPref = Preferences::instance().document(document); bool autoScroll = docPref.preview.autoScroll(); // Set the same location as in the given editor. if (!miniEditor || miniEditor->document() != document) { destroyDocView(); m_docView = new DocView(document, DocView::Preview, this); addChild(m_docView); miniEditor = m_docView->editor(); miniEditor->setZoom(render::Zoom::fromScale(docPref.preview.zoom())); miniEditor->setLayer(editor->layer()); miniEditor->setFrame(editor->frame()); miniEditor->setState(EditorStatePtr(new NavigateState)); miniEditor->setAnimationSpeedMultiplier(m_aniSpeed); miniEditor->add_observer(this); layout(); if (!autoScroll) miniEditor->setEditorScroll(docPref.preview.scroll()); } m_centerButton->setSelected(autoScroll); if (autoScroll) { gfx::Point centerPoint = editor->getVisibleSpriteBounds().center(); miniEditor->centerInSpritePoint(centerPoint); saveScrollPref(); } if (!m_playButton->isPlaying()) { miniEditor->stop(); miniEditor->setLayer(editor->layer()); miniEditor->setFrame(editor->frame()); } else { if (miniEditor->isPlaying()) { doc::FrameTag* tag = editor ->getCustomizationDelegate() ->getFrameTagProvider() ->getFrameTagByFrame(editor->frame(), true); doc::FrameTag* playingTag = editor ->getCustomizationDelegate() ->getFrameTagProvider() ->getFrameTagByFrame(m_refFrame, true); if (tag == playingTag) return; miniEditor->stop(); } if (!miniEditor->isPlaying()) miniEditor->setFrame(m_refFrame = editor->frame()); miniEditor->play(Preferences::instance().preview.playOnce(), Preferences::instance().preview.playAll()); } }