这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion app/src/mainwindow2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1402,7 +1402,6 @@ void MainWindow2::makeConnections(Editor* editor)
ui->actionCut->setEnabled(canCopy);
});
connect(editor, &Editor::canPasteChanged, ui->actionPaste, &QAction::setEnabled);

}

void MainWindow2::makeConnections(Editor* editor, ColorBox* colorBox)
Expand Down
9 changes: 4 additions & 5 deletions app/src/repositionframesdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ void RepositionFramesDialog::initUI()
connect(mEditor->getScribbleArea(), &ScribbleArea::selectionUpdated, this, &RepositionFramesDialog::updateDialogText);
connect(mEditor->select(), &SelectionManager::selectionReset, this, &RepositionFramesDialog::closeClicked);
mEndPoint = mStartPoint = QPoint(0,0);
mOriginalPolygonF = mEditor->select()->currentSelectionPolygonF();
mOriginalPolygonF = mEditor->select()->mySelectionRect();
updateDialogSelectedFrames();
updateDialogText();
}
Expand All @@ -65,9 +65,9 @@ void RepositionFramesDialog::updateDialogText()
{
if (mOriginalPolygonF.boundingRect().isEmpty())
{
mOriginalPolygonF = mEditor->select()->currentSelectionPolygonF();
mOriginalPolygonF = mEditor->select()->mySelectionRect();
}
mCurrentPolygonF = mEditor->select()->currentSelectionPolygonF();
mCurrentPolygonF = mEditor->select()->selectionTransform().map(mEditor->select()->mySelectionRect());
QPoint point = getRepositionPoint();
ui->labRepositioned->setText(tr("Repositioned: ( %1, %2 )").arg(point.x()).arg(point.y()));
}
Expand All @@ -94,7 +94,6 @@ void RepositionFramesDialog::repositionFrames()
return;
}

mEditor->getScribbleArea()->updateOriginalPolygonF();
QList<int> frames = mEditor->layers()->currentLayer()->getSelectedFramesByPos();
for (int i = 0; i < frames.size(); i++)
{
Expand Down Expand Up @@ -147,7 +146,7 @@ void RepositionFramesDialog::repositionFrames()
layerManager->setCurrentLayer(currLayer);
}
}
mEditor->getScribbleArea()->applySelectionChanges();
mEditor->getScribbleArea()->applyTransformedSelection();
mEditor->select()->resetSelectionProperties();
mEditor->scrubTo(mRepositionFrame);

Expand Down
7 changes: 6 additions & 1 deletion core_lib/src/canvaspainter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ void CanvasPainter::paintBitmapFrame(QPainter& painter,
return;
}

BitmapImage paintToImage;
BitmapImage paintToImage = BitmapImage(paintedImage->bounds(), Qt::transparent);
paintToImage.paste(paintedImage);

painter.setOpacity(paintedImage->getOpacity() - (1.0-painter.opacity()));
Expand Down Expand Up @@ -421,6 +421,11 @@ void CanvasPainter::paintVectorFrame(QPainter& painter,
}

QImage* strokeImage = new QImage(mCanvas->size(), QImage::Format_ARGB32_Premultiplied);

if (mRenderTransform) {
vectorImage->setSelectionTransformation(mSelectionTransform);
}

vectorImage->outputImage(strokeImage, mViewTransform, mOptions.bOutlines, mOptions.bThinLines, mOptions.bAntiAlias);

// Go through a Bitmap image to paint the onion skin colour
Expand Down
46 changes: 31 additions & 15 deletions core_lib/src/interface/backupelement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,17 @@ GNU General Public License for more details.
#include "layervector.h"
#include "object.h"
#include "selectionmanager.h"
#include "layermanager.h"

void BackupBitmapElement::restore(Editor* editor)
{
Layer* layer = editor->object()->findLayerById(this->layerId);
auto selectMan = editor->select();
selectMan->setSelection(mySelection, true);
selectMan->setTransformedSelectionRect(myTransformedSelection);
selectMan->setTempTransformedSelectionRect(myTempTransformedSelection);
selectMan->setRotation(rotationAngle);
selectMan->setSomethingSelected(somethingSelected);

if (editor->currentFrame() != this->frame) {
editor->scrubTo(this->frame);
}
editor->frameModified(this->frame);

editor->layers()->setCurrentLayer(layer);

if (this->frame > 0 && layer->getKeyFrameAt(this->frame) == nullptr)
{
Expand All @@ -54,18 +50,22 @@ void BackupBitmapElement::restore(Editor* editor)
}
}
}

auto selectMan = editor->select();
selectMan->setSelection(mySelection, true);
selectMan->setTransformAnchor(selectionAnchor);
selectMan->setRotation(rotationAngle);
selectMan->setScale(scaleX, scaleY);
selectMan->setTranslation(translation);

selectMan->calculateSelectionTransformation();

editor->frameModified(this->frame);
}

void BackupVectorElement::restore(Editor* editor)
{
Layer* layer = editor->object()->findLayerById(this->layerId);
auto selectMan = editor->select();
selectMan->setSelection(mySelection, false);
selectMan->setTransformedSelectionRect(myTransformedSelection);
selectMan->setTempTransformedSelectionRect(myTempTransformedSelection);
selectMan->setRotation(rotationAngle);
selectMan->setSomethingSelected(somethingSelected);

for (int i = 0; i < editor->object()->getLayerCount(); i++)
{
Layer* layer = editor->object()->getLayer(i);
Expand All @@ -82,7 +82,9 @@ void BackupVectorElement::restore(Editor* editor)
if (editor->currentFrame() != this->frame) {
editor->scrubTo(this->frame);
}
editor->frameModified(this->frame);

editor->layers()->setCurrentLayer(layer);

if (this->frame > 0 && layer->getKeyFrameAt(this->frame) == nullptr)
{
editor->restoreKey();
Expand All @@ -98,11 +100,25 @@ void BackupVectorElement::restore(Editor* editor)
}
}
}

auto selectMan = editor->select();
selectMan->setSelection(mySelection, false);
selectMan->setTransformAnchor(selectionAnchor);
selectMan->setRotation(rotationAngle);
selectMan->setScale(scaleX, scaleY);
selectMan->setTranslation(translation);
selectMan->calculateSelectionTransformation();

editor->frameModified(this->frame);

}

void BackupSoundElement::restore(Editor* editor)
{
Layer* layer = editor->object()->findLayerById(this->layerId);

editor->layers()->setCurrentLayer(layer);

if (editor->currentFrame() != this->frame) {
editor->scrubTo(this->frame);
}
Expand Down
6 changes: 5 additions & 1 deletion core_lib/src/interface/backupelement.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,11 @@ class BackupElement : public QObject
QString undoText;
bool somethingSelected = false;
qreal rotationAngle = 0.0;
QRectF mySelection, myTransformedSelection, myTempTransformedSelection;
qreal scaleX = 1.0;
qreal scaleY = 1.0;
QPointF translation;
QRectF mySelection;
QPointF selectionAnchor;

virtual int type() { return UNDEFINED; }
virtual void restore(Editor*) { Q_ASSERT(false); }
Expand Down
68 changes: 48 additions & 20 deletions core_lib/src/interface/editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ void Editor::makeConnections()
connect(mPreferenceManager, &PreferenceManager::optionChanged, this, &Editor::settingUpdated);
// XXX: This is a hack to prevent crashes until #864 is done (see #1412)
connect(mLayerManager, &LayerManager::layerDeleted, this, &Editor::sanitizeBackupElementsAfterLayerDeletion);
connect(mScribbleArea, &ScribbleArea::modified, this, &Editor::onModified);
connect(mLayerManager, &LayerManager::currentLayerWillChange, this, &Editor::onCurrentLayerWillChange);
}

void Editor::settingUpdated(SETTING setting)
Expand Down Expand Up @@ -153,6 +153,23 @@ void Editor::settingUpdated(SETTING setting)
}
}

void Editor::onCurrentLayerWillChange(int index)
{
Layer* newLayer = layers()->getLayer(index);
Layer* currentLayer = layers()->currentLayer();
Q_ASSERT(newLayer && currentLayer);
if (currentLayer->type() != newLayer->type()) {
// We apply transform changes upon leaving a layer and deselect all
mScribbleArea->applyTransformedSelection();

if (currentLayer->type() == Layer::VECTOR) {
static_cast<VectorImage*>(currentLayer->getKeyFrameAt(mFrame))->deselectAll();
}

select()->resetSelectionProperties();
}
}

void Editor::onModified(int layer, int frame)
{
mLastModifiedLayer = layer;
Expand Down Expand Up @@ -236,9 +253,12 @@ bool Editor::backup(int backupLayer, int backupFrame, const QString& undoText)
element->undoText = undoText;
element->somethingSelected = select()->somethingSelected();
element->mySelection = select()->mySelectionRect();
element->myTransformedSelection = select()->myTransformedSelectionRect();
element->myTempTransformedSelection = select()->myTempTransformedSelectionRect();
element->rotationAngle = select()->myRotation();
element->scaleX = select()->myScaleX();
element->scaleY = select()->myScaleY();
element->translation = select()->myTranslation();
element->selectionAnchor = select()->currentTransformAnchor();

mBackupList.append(element);
mBackupIndex++;
}
Expand All @@ -259,9 +279,11 @@ bool Editor::backup(int backupLayer, int backupFrame, const QString& undoText)
element->undoText = undoText;
element->somethingSelected = select()->somethingSelected();
element->mySelection = select()->mySelectionRect();
element->myTransformedSelection = select()->myTransformedSelectionRect();
element->myTempTransformedSelection = select()->myTempTransformedSelectionRect();
element->rotationAngle = select()->myRotation();
element->scaleX = select()->myScaleX();
element->scaleY = select()->myScaleY();
element->translation = select()->myTranslation();
element->selectionAnchor = select()->currentTransformAnchor();
mBackupList.append(element);
mBackupIndex++;
}
Expand Down Expand Up @@ -458,18 +480,7 @@ void Editor::undo()
qDebug() << "Undo" << mBackupIndex;
mBackupList[mBackupIndex]->restore(this);
mBackupIndex--;
mScribbleArea->cancelTransformedSelection();

Layer* layer = layers()->currentLayer();
if (layer == nullptr) { return; }

select()->resetSelectionTransform();
if (layer->type() == Layer::VECTOR)
{
VectorImage *vectorImage = static_cast<VectorImage*>(layer->getKeyFrameAt(mFrame));
vectorImage->calculateSelectionRect();
select()->setSelection(vectorImage->getSelectionRect(), false);
}
emit updateBackup();
}
}
Expand Down Expand Up @@ -614,7 +625,7 @@ void Editor::pasteToCanvas(BitmapImage* bitmapImage, int frameNumber)
// TODO: currently we don't support placing an image without already pasting it on an already existing
// image, this should be reworked such that a hovering selection could be shown, before applying it...
select()->setSelection(bitmapImage->bounds());
mScribbleArea->paintTransformedSelection();
emit frameModified(frameNumber);
}

void Editor::pasteToCanvas(VectorImage* vectorImage, int frameNumber)
Expand All @@ -628,7 +639,7 @@ void Editor::pasteToCanvas(VectorImage* vectorImage, int frameNumber)
VectorImage* canvasImage = static_cast<VectorImage*>(currentLayer->getLastKeyFrameAtPosition(frameNumber));
canvasImage->paste(*vectorImage);
select()->setSelection(vectorImage->getSelectionRect());
mScribbleArea->paintTransformedSelection();
emit frameModified(frameNumber);
}

void Editor::pasteToFrames()
Expand Down Expand Up @@ -699,7 +710,12 @@ void Editor::paste()
}

void Editor::flipSelection(bool flipVertical)
{
{
if (flipVertical) {
backup(tr("Flip selection vertically"));
} else {
backup(tr("Flip selection horizontally"));
}
mScribbleArea->flipSelection(flipVertical);
}

Expand All @@ -718,12 +734,24 @@ void Editor::repositionImage(QPoint transform, int frame)
}
}

void Editor::setModified(const Layer* layer, int frameNumber)
{
if (layer == nullptr) { return; }

layer->setModified(frameNumber, true);

emit frameModified(frameNumber);
}

void Editor::setModified(int layerNumber, int frameNumber)
{
setModified(object()->getLayer(layerNumber), frameNumber);
}

void Editor::clipboardChanged()
{
Layer* layer = layers()->currentLayer();


clipboards()->setFromSystemClipboard(mScribbleArea->getCentralPoint(), layer);

bool canCopyState = canCopy();
Expand Down
5 changes: 5 additions & 0 deletions core_lib/src/interface/editor.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,9 @@ class Editor : public QObject
*/
void updateFrame(int frameNumber);

void setModified(const Layer* layer, int frameNumber);
void setModified(int layerNumber, int frameNumber);

void clearCurrentFrame();

bool importImage(const QString& filePath);
Expand Down Expand Up @@ -193,6 +196,8 @@ class Editor : public QObject
* (see #1412).
*/
void sanitizeBackupElementsAfterLayerDeletion(int layerIndex);

void onCurrentLayerWillChange(int index);
void undo();
void redo();

Expand Down
Loading