Update new Zerary columns to use Implicit Holds

This commit is contained in:
manongjohn 2022-01-07 08:02:24 -05:00
parent 09c244429d
commit 755955236b
3 changed files with 31 additions and 9 deletions

View file

@ -11,6 +11,7 @@
#include "toonz/tcolumnfx.h"
#include "toonz/fxdag.h"
#include "toonz/txshlevelcolumn.h"
#include "toonz/preferences.h"
//-----------------------------------------------------------------------------
@ -194,7 +195,12 @@ void TCellData::cloneZeraryFx(int index, std::vector<TXshCell> &cells) const {
newFxLevel->setColumn(newFxColumn);
// replace the zerary fx cells by the new fx
int r;
for (r = firstNotEmptyIndex; r < (index + 1) * m_rowCount; r++)
cells[r] = TXshCell(newFxLevel, m_cells[r].getFrameId());
for (r = firstNotEmptyIndex; r < (index + 1) * m_rowCount; r++) {
if (Preferences::instance()->isImplicitHoldEnabled() &&
m_cells[r].getFrameId().isEmptyFrame())
cells[r] = TXshCell(0, m_cells[r].getFrameId());
else
cells[r] = TXshCell(newFxLevel, m_cells[r].getFrameId());
}
}
}

View file

@ -16,6 +16,7 @@
#include "toonz/tfxhandle.h"
#include "toonz/tcolumnhandle.h"
#include "toonz/tscenehandle.h"
#include "toonz/preferences.h"
#include "historytypes.h"
// TnzBase includes
@ -309,7 +310,9 @@ TXshZeraryFxColumn *FxCommandUndo::createZeraryFxColumn(TXsheet *xsh, TFx *zfx,
int frameCount = xsh->getScene()->getFrameCount() - row;
TXshZeraryFxColumn *column =
new TXshZeraryFxColumn(frameCount > 0 ? frameCount : 100);
new TXshZeraryFxColumn(Preferences::instance()->isImplicitHoldEnabled()
? 1
: (frameCount > 0 ? frameCount : 100));
column->getZeraryColumnFx()->setZeraryFx(zfx);
column->insertEmptyCells(0, row);
@ -2541,7 +2544,9 @@ void UndoPasteFxs::initialize(const std::map<TFx *, int> &zeraryFxColumnSize,
// column with
// the specified column size
std::map<TFx *, int>::const_iterator it = zeraryFxColumnSize.find(fx);
int rows = (it == zeraryFxColumnSize.end()) ? 100 : it->second;
int rows = Preferences::instance()->isImplicitHoldEnabled()
? 1
: ((it == zeraryFxColumnSize.end()) ? 100 : it->second);
TXshZeraryFxColumn *column = new TXshZeraryFxColumn(rows);
TZeraryColumnFx *zcfx = column->getZeraryColumnFx();

View file

@ -7,6 +7,7 @@
#include "toonz/txsheet.h"
#include "toonz/fxdag.h"
#include "toonz/txshzeraryfxlevel.h"
#include "toonz/preferences.h"
#include "tstream.h"
@ -21,6 +22,7 @@ TXshZeraryFxColumn::TXshZeraryFxColumn(int frameCount)
m_zeraryColumnFx->setColumn(this);
m_zeraryFxLevel->addRef();
m_zeraryFxLevel->setColumn(this);
if (frameCount <= 0) return;
for (int i = 0; i < frameCount; i++)
setCell(i, TXshCell(m_zeraryFxLevel, TFrameId(1)));
}
@ -37,8 +39,13 @@ TXshZeraryFxColumn::TXshZeraryFxColumn(const TXshZeraryFxColumn &src)
m_zeraryFxLevel->setColumn(this);
m_first = src.m_first;
int i;
for (i = 0; i < (int)src.m_cells.size(); i++)
m_cells.push_back(TXshCell(m_zeraryFxLevel, src.m_cells[i].getFrameId()));
for (i = 0; i < (int)src.m_cells.size(); i++) {
if (Preferences::instance()->isImplicitHoldEnabled() &&
src.m_cells[i].getFrameId().isEmptyFrame())
m_cells.push_back(TXshCell(0, src.m_cells[i].getFrameId()));
else
m_cells.push_back(TXshCell(m_zeraryFxLevel, src.m_cells[i].getFrameId()));
}
assert((int)src.m_cells.size() == (int)m_cells.size());
TFx *fx = src.getZeraryColumnFx()->getZeraryFx();
if (fx) {
@ -104,9 +111,13 @@ bool TXshZeraryFxColumn::setCells(int row, int rowCount,
bool isEmptyColumn = isEmpty() && getZeraryColumnFx()->getZeraryFx() == 0;
int i;
for (i = 0; i < rowCount; i++) {
if (isEmptyColumn)
newCells.push_back(TXshCell(m_zeraryFxLevel, cells[i].getFrameId()));
else
if (isEmptyColumn) {
if (Preferences::instance()->isImplicitHoldEnabled() &&
cells[i].getFrameId().isEmptyFrame())
newCells.push_back(TXshCell(0, cells[i].getFrameId()));
else
newCells.push_back(TXshCell(m_zeraryFxLevel, cells[i].getFrameId()));
} else
newCells.push_back(cells[i]);
}
// Sto settando delle celle in una colonna nuova, devo settare anche