From a495be841d3034ccda6064f4f175cca34ab3fdb4 Mon Sep 17 00:00:00 2001 From: manongjohn Date: Feb 22 2019 00:04:10 +0000 Subject: Merge OT master updates and fixed conflicts --- diff --git a/appveyor.yml b/appveyor.yml index 395c875..c67204f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 1.2.1.{build} +version: 1.3.0.{build} pull_requests: do_not_increment_build_number: true skip_tags: true diff --git a/ci-scripts/linux/travis-install.sh b/ci-scripts/linux/travis-install.sh index 72b5e7f..593aebe 100644 --- a/ci-scripts/linux/travis-install.sh +++ b/ci-scripts/linux/travis-install.sh @@ -1,4 +1,4 @@ -sudo add-apt-repository --yes ppa:beineri/opt-qt591-trusty +sudo add-apt-repository --yes ppa:beineri/opt-qt597-trusty sudo add-apt-repository --yes ppa:achadwick/mypaint-testing sudo apt-get update sudo apt-get install -y liblzo2-dev liblz4-dev libfreetype6-dev libpng-dev libegl1-mesa-dev libgles2-mesa-dev libsdl2-dev libglew-dev freeglut3-dev qt59script libsuperlu3-dev qt59svg qt59tools qt59multimedia wget libusb-1.0-0-dev libboost-all-dev liblzma-dev libjson-c-dev libmypaint-dev diff --git a/ci-scripts/osx/travis-build.sh b/ci-scripts/osx/travis-build.sh index 7fb8b47..2ccffc4 100644 --- a/ci-scripts/osx/travis-build.sh +++ b/ci-scripts/osx/travis-build.sh @@ -4,7 +4,7 @@ pushd thirdparty/tiff-4.0.3 popd cd toonz && mkdir build && cd build cmake ../sources \ - -DQT_PATH=/usr/local/Cellar/qt/5.12.0/lib/ \ + -DQT_PATH=/usr/local/Cellar/qt/5.12.1/lib/ \ -DTIFF_INCLUDE_DIR=../../thirdparty/tiff-4.0.3/libtiff/ \ -DSUPERLU_INCLUDE_DIR=../../thirdparty/superlu/SuperLU_4.1/include/ make -j 2 diff --git "a/stuff/config/loc/Espa\303\261ol/tnztools.qm" "b/stuff/config/loc/Espa\303\261ol/tnztools.qm" index 3552eb3..a0628a3 100644 Binary files "a/stuff/config/loc/Espa\303\261ol/tnztools.qm" and "b/stuff/config/loc/Espa\303\261ol/tnztools.qm" differ diff --git "a/stuff/config/loc/Espa\303\261ol/toonz.qm" "b/stuff/config/loc/Espa\303\261ol/toonz.qm" index 4f46072..eb4a62e 100644 Binary files "a/stuff/config/loc/Espa\303\261ol/toonz.qm" and "b/stuff/config/loc/Espa\303\261ol/toonz.qm" differ diff --git "a/stuff/config/loc/Espa\303\261ol/toonzqt.qm" "b/stuff/config/loc/Espa\303\261ol/toonzqt.qm" index 7ca8f83..ae04f92 100644 Binary files "a/stuff/config/loc/Espa\303\261ol/toonzqt.qm" and "b/stuff/config/loc/Espa\303\261ol/toonzqt.qm" differ diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnztools.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnztools.qm" index 0d94bbf..7247ea0 100644 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnztools.qm" and "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/tnztools.qm" differ diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonz.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonz.qm" index ca1d93e..7b7d180 100644 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonz.qm" and "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonz.qm" differ diff --git "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzqt.qm" "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzqt.qm" index c888130..fe0135b 100644 Binary files "a/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzqt.qm" and "b/stuff/config/loc/Russian (\320\240\321\203\321\201\321\201\320\272\320\270\320\271)/toonzqt.qm" differ diff --git "a/stuff/config/loc/\344\270\255\346\226\207/tnztools.qm" "b/stuff/config/loc/\344\270\255\346\226\207/tnztools.qm" index 46692b6..f6da0af 100644 Binary files "a/stuff/config/loc/\344\270\255\346\226\207/tnztools.qm" and "b/stuff/config/loc/\344\270\255\346\226\207/tnztools.qm" differ diff --git "a/stuff/config/loc/\344\270\255\346\226\207/toonz.qm" "b/stuff/config/loc/\344\270\255\346\226\207/toonz.qm" index eb581c8..fb84e4c 100644 Binary files "a/stuff/config/loc/\344\270\255\346\226\207/toonz.qm" and "b/stuff/config/loc/\344\270\255\346\226\207/toonz.qm" differ diff --git "a/stuff/config/loc/\344\270\255\346\226\207/toonzlib.qm" "b/stuff/config/loc/\344\270\255\346\226\207/toonzlib.qm" index 18d6e60..778e2c2 100644 Binary files "a/stuff/config/loc/\344\270\255\346\226\207/toonzlib.qm" and "b/stuff/config/loc/\344\270\255\346\226\207/toonzlib.qm" differ diff --git "a/stuff/config/loc/\344\270\255\346\226\207/toonzqt.qm" "b/stuff/config/loc/\344\270\255\346\226\207/toonzqt.qm" index 11ff014..658f26b 100644 Binary files "a/stuff/config/loc/\344\270\255\346\226\207/toonzqt.qm" and "b/stuff/config/loc/\344\270\255\346\226\207/toonzqt.qm" differ diff --git a/toonz/sources/common/tfx/trenderer.cpp b/toonz/sources/common/tfx/trenderer.cpp index 60ea393..93c4ca4 100644 --- a/toonz/sources/common/tfx/trenderer.cpp +++ b/toonz/sources/common/tfx/trenderer.cpp @@ -26,9 +26,6 @@ #include #include -// tcg includes -#include "tcg/tcg_deleter_types.h" - // Debug //#define DIAGNOSTICS //#include "diagnostics.h" @@ -1384,7 +1381,7 @@ void TRendererImp::startRendering( std::vector &m_tasksVector; ~TasksCleaner() { std::for_each(m_tasksVector.begin(), m_tasksVector.end(), - tcg::deleter()); + std::default_delete()); } } tasksCleaner = {tasksVector}; diff --git a/toonz/sources/common/tgeometry/tgeometry.cpp b/toonz/sources/common/tgeometry/tgeometry.cpp index 065e270..e34ee3a 100644 --- a/toonz/sources/common/tgeometry/tgeometry.cpp +++ b/toonz/sources/common/tgeometry/tgeometry.cpp @@ -56,16 +56,22 @@ TAffine TAffine::operator*=(const TAffine &b) { return *this = *this * b; } //-------------------------------------------------------------------------------------------------- TAffine TAffine::inv() const { if (a12 == 0.0 && a21 == 0.0) { - assert(a11 != 0.0); - assert(a22 != 0.0); - double inv_a11 = 1.0 / a11; - double inv_a22 = 1.0 / a22; + double inv_a11 = + (a11 == 0.0 ? std::numeric_limits::max() / (1 << 16) + : 1.0 / a11); + double inv_a22 = + (a22 == 0.0 ? std::numeric_limits::max() / (1 << 16) + : 1.0 / a22); return TAffine(inv_a11, 0, -a13 * inv_a11, 0, inv_a22, -a23 * inv_a22); } else if (a11 == 0.0 && a22 == 0.0) { assert(a12 != 0.0); assert(a21 != 0.0); - double inv_a21 = 1.0 / a21; - double inv_a12 = 1.0 / a12; + double inv_a21 = + (a21 == 0.0 ? std::numeric_limits::max() / (1 << 16) + : 1.0 / a21); + double inv_a12 = + (a12 == 0.0 ? std::numeric_limits::max() / (1 << 16) + : 1.0 / a12); return TAffine(0, inv_a21, -a23 * inv_a21, inv_a12, 0, -a13 * inv_a12); } else { double d = 1. / det(); diff --git a/toonz/sources/common/timage_io/timage_io.cpp b/toonz/sources/common/timage_io/timage_io.cpp index bb2ded5..837fc56 100644 --- a/toonz/sources/common/timage_io/timage_io.cpp +++ b/toonz/sources/common/timage_io/timage_io.cpp @@ -634,14 +634,14 @@ void TImageWriter::save(const TImageP &img) { // add background colors for non alpha-enabled image types if ((ras32 || ras64) && !writer->writeAlphaSupported() && TImageWriter::getBackgroundColor() != TPixel::Black) { - if (ras32) + if (bpp == 32 || bpp == 24) TRop::addBackground(ras, TImageWriter::getBackgroundColor()); - else { // ras64 + else if (bpp == 64 || bpp == 48) { TRaster64P bgRas(ras->getSize()); bgRas->fill(toPixel64(TImageWriter::getBackgroundColor())); TRop::over(bgRas, ras); ras = bgRas; - } + } // for other bpp values, do nothing for now } ras->lock(); diff --git a/toonz/sources/common/trop/tdespeckle.cpp b/toonz/sources/common/trop/tdespeckle.cpp index 26c3704..6bfe400 100644 --- a/toonz/sources/common/trop/tdespeckle.cpp +++ b/toonz/sources/common/trop/tdespeckle.cpp @@ -14,9 +14,6 @@ #include "borders_extractor.h" #define INCLUDE_HPP -// tcg includes -#include "tcg/deleter_types.h" - // STL includes #include @@ -273,7 +270,7 @@ public: //--------------------------------------------------------------------------------------------- DespecklingReader::~DespecklingReader() { - std::for_each(m_borders.begin(), m_borders.end(), tcg::deleter()); + std::for_each(m_borders.begin(), m_borders.end(), std::default_delete()); } //--------------------------------------------------------------------------------------------- diff --git a/toonz/sources/common/trop/tresample.cpp b/toonz/sources/common/trop/tresample.cpp index b1fc6f3..1f3cee2 100644 --- a/toonz/sources/common/trop/tresample.cpp +++ b/toonz/sources/common/trop/tresample.cpp @@ -1349,7 +1349,7 @@ void resample_main_rgbm(TRasterPT rout, const TRasterPT &rin, namespace { -DV_ALIGNED(16) class TPixelFloat { +class alignas(16) TPixelFloat { public: TPixelFloat() : b(0), g(0), r(0), m(0) {} diff --git a/toonz/sources/common/trop/tropcm.cpp b/toonz/sources/common/trop/tropcm.cpp index 706adba..73e2b4a 100644 --- a/toonz/sources/common/trop/tropcm.cpp +++ b/toonz/sources/common/trop/tropcm.cpp @@ -34,7 +34,7 @@ extern "C" { namespace { -DV_ALIGNED(16) class TPixelFloat { +class alignas(16) TPixelFloat { public: TPixelFloat() : b(0), g(0), r(0), m(0) {} diff --git a/toonz/sources/common/tsound/tsound_qt.cpp b/toonz/sources/common/tsound/tsound_qt.cpp index 50caa62..a0187e3 100644 --- a/toonz/sources/common/tsound/tsound_qt.cpp +++ b/toonz/sources/common/tsound/tsound_qt.cpp @@ -10,119 +10,196 @@ #include #include +#include #include #include -#include +#include #include using namespace std; //============================================================================== -namespace { -TThread::Mutex MutexOut; -} -class TSoundOutputDeviceImp - : public std::enable_shared_from_this { -public: - bool m_isPlaying; - bool m_looped; - TSoundTrackFormat m_currentFormat; - std::set m_supportedRate; - bool m_opened; - double m_volume = 0.5; +class TSoundOutputDeviceImp: public std::enable_shared_from_this { +private: + QMutex m_mutex; - QAudioOutput *m_audioOutput; - QBuffer *m_buffer; + double m_volume; + bool m_looping; - TSoundOutputDeviceImp() - : m_isPlaying(false) - , m_looped(false) - , m_supportedRate() - , m_opened(false){}; + qint64 m_bytesSent; + qint64 m_bufferIndex; - std::set m_listeners; + QByteArray m_buffer; + QPointer m_audioOutput; + QIODevice *m_audioBuffer; - ~TSoundOutputDeviceImp(){}; +public: + std::set m_listeners; - bool doOpenDevice(); - bool doSetStreamFormat(const TSoundTrackFormat &format); - bool doStopDevice(); - void play(const TSoundTrackP &st, TINT32 s0, TINT32 s1, bool loop, - bool scrubbing); - void prepareVolume(double volume); -}; + TSoundOutputDeviceImp(): + m_mutex(QMutex::Recursive), + m_volume(0.5), + m_looping(false), + m_bytesSent(0), + m_bufferIndex(0), + m_audioBuffer() + { } + +private: + void reset() { + if (m_audioOutput) { + m_audioOutput->reset(); + m_audioBuffer = m_audioOutput->start(); + m_bytesSent = 0; + } + } -//----------------------------------------------------------------------------- -namespace { - -struct MyData { - char *entireFileBuffer; - - quint64 totalPacketCount; - quint64 fileByteCount; - quint32 maxPacketSize; - quint64 packetOffset; - quint64 byteOffset; - bool m_doNotify; - void *sourceBuffer; - // AudioConverterRef converter; - std::shared_ptr imp; - bool isLooping; - MyData() - : entireFileBuffer(0) - , totalPacketCount(0) - , fileByteCount(0) - , maxPacketSize(0) - , packetOffset(0) - , byteOffset(0) - , sourceBuffer(0) - , isLooping(false) - , m_doNotify(true) {} -}; + void sendBuffer() { + QMutexLocker lock(&m_mutex); + + if (!m_audioOutput) return; + if (!m_buffer.size()) return; + if ( m_audioOutput->error() != QAudio::NoError + && m_audioOutput->error() != QAudio::UnderrunError ) + { + stop(); + std::cerr << "error " << m_audioOutput->error() << std::endl; + return; + } -class PlayCompletedMsg : public TThread::Message { - std::set m_listeners; - MyData *m_data; + bool looping = isLooping(); + qint64 bytesRemain = m_audioOutput->bytesFree(); + while(bytesRemain > 0) { + qint64 bytesCount = m_buffer.size() - m_bufferIndex; + if (bytesCount <= 0) { + if (!looping) break; + m_bufferIndex = 0; + } + if (bytesCount > bytesRemain) bytesCount = bytesRemain; + + m_audioBuffer->write(m_buffer.data() + m_bufferIndex, bytesCount); + + bytesRemain -= bytesCount; + m_bufferIndex += bytesCount; + m_bytesSent += bytesCount; + } + } public: - PlayCompletedMsg(MyData *data) : m_data(data) {} - - TThread::Message *clone() const { return new PlayCompletedMsg(*this); } - - void onDeliver() { - if (m_data->imp) { - if (m_data->m_doNotify == false) return; - m_data->m_doNotify = false; - if (m_data->imp->m_isPlaying) m_data->imp->doStopDevice(); - std::set::iterator it = - m_data->imp->m_listeners.begin(); - for (; it != m_data->imp->m_listeners.end(); ++it) - (*it)->onPlayCompleted(); + double getVolume() { + QMutexLocker lock(&m_mutex); + return m_volume; + } + + bool isLooping() { + QMutexLocker lock(&m_mutex); + return m_looping; + } + + void prepareVolume(double x) { + QMutexLocker lock(&m_mutex); + m_volume = x; + } + + bool isPlaying() { + QMutexLocker lock(&m_mutex); + return m_audioOutput + && m_buffer.size() + && ( isLooping() + || m_bufferIndex < m_buffer.size() + /*|| m_audioOutput->state() == QAudio::ActiveState*/ ); + } + + void setVolume(double x) { + QMutexLocker lock(&m_mutex); + m_volume = x; + if (m_audioOutput) m_audioOutput->setVolume(m_volume); + } + + void setLooping(bool x) { + QMutexLocker lock(&m_mutex); + if (m_looping != x) { + m_looping = x; + if (m_audioOutput) { + /* audio buffer too small, so optimization not uses + qint64 bufferSize = m_buffer.size(); + if (!m_looping && bufferSize > 0) { + qint64 processedBytes = + m_audioOutput->format().bytesForDuration( + m_audioOutput->processedUSecs() ); + qint64 extraBytesSend = m_bytesSent - processedBytes; + if (extraBytesSend > m_bufferIndex) { + // remove extra loops from audio buffer + m_bufferIndex -= extraBytesSend % bufferSize; + if (m_bufferIndex < 0) m_bufferIndex += bufferSize; + reset(); + } + } + */ + sendBuffer(); + } } } -}; -} -#define checkStatus(err) \ - if (err) { \ - printf("Error: 0x%x -> %s: %d\n", (int)err, __FILE__, __LINE__); \ - fflush(stdout); \ + void stop() { + QMutexLocker lock(&m_mutex); + //reset(); audio buffer too small, so optimization not uses + m_buffer.clear(); + m_bufferIndex = 0; } -bool TSoundOutputDeviceImp::doOpenDevice() { - m_opened = false; - m_audioOutput = NULL; - m_opened = true; - return m_opened; -} + void play(const TSoundTrackP &st, TINT32 s0, TINT32 s1, bool loop, bool scrubbing) { + QMutexLocker lock(&m_mutex); + + QAudioFormat format; + format.setSampleSize(st->getBitPerSample()); + format.setCodec("audio/pcm"); + format.setChannelCount(st->getChannelCount()); + format.setByteOrder(QAudioFormat::LittleEndian); + format.setSampleType( st->getFormat().m_signedSample + ? QAudioFormat::SignedInt + : QAudioFormat::UnSignedInt ); + format.setSampleRate(st->getSampleRate()); + + QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice()); + if (!info.isFormatSupported((format))) + format = info.nearestFormat(format); + + qint64 totalPacketCount = s1 - s0; + qint64 fileByteCount = (s1 - s0)*st->getSampleSize(); + m_buffer.resize(fileByteCount); + memcpy(m_buffer.data(), st->getRawData() + s0*st->getSampleSize(), fileByteCount); + m_bufferIndex = 0; + + m_looping = loop; + if (!m_audioOutput || m_audioOutput->format() != format) { + if (m_audioOutput) m_audioOutput->stop(); + m_audioOutput = new QAudioOutput(format); + m_audioOutput->setVolume(m_volume); + + // audio buffer size + qint64 audioBufferSize = format.bytesForDuration(100000); + m_audioOutput->setBufferSize(audioBufferSize); + m_audioOutput->setNotifyInterval(50); + QObject::connect(m_audioOutput.data(), &QAudioOutput::notify, [=](){ sendBuffer(); }); + + reset(); + }/* audio buffer too small, so optimization not uses + else { + // if less than 0.1 sec of data in audio buffer, + // then just sent next portion of data + // else reset audio buffer before + qint64 sentUSecs = format.durationForBytes(m_bytesSent); + qint64 processedUSecs = m_audioOutput->processedUSecs(); + if (sentUSecs - processedUSecs > 100000ll) + reset(); + } + */ -bool TSoundOutputDeviceImp::doSetStreamFormat(const TSoundTrackFormat &format) { - if (!m_opened) doOpenDevice(); - if (!m_opened) return false; - m_opened = true; - return true; -} + sendBuffer(); + } +}; //============================================================================== @@ -148,13 +225,6 @@ bool TSoundOutputDevice::installed() { return true; } //------------------------------------------------------------------------------ bool TSoundOutputDevice::open(const TSoundTrackP &st) { - if (!m_imp->doOpenDevice()) - throw TSoundDeviceException(TSoundDeviceException::UnableOpenDevice, - "Problem to open the output device"); - if (!m_imp->doSetStreamFormat(st->getFormat())) - throw TSoundDeviceException( - TSoundDeviceException::UnableOpenDevice, - "Problem to open the output device setting some params"); return true; } @@ -162,18 +232,11 @@ bool TSoundOutputDevice::open(const TSoundTrackP &st) { bool TSoundOutputDevice::close() { stop(); - m_imp->m_opened = false; return true; } //------------------------------------------------------------------------------ -void TSoundOutputDeviceImp::prepareVolume(double volume) { - m_volume = volume; -} - -//------------------------------------------------------------------------------ - void TSoundOutputDevice::prepareVolume(double volume) { m_imp->prepareVolume(volume); } @@ -196,88 +259,13 @@ void TSoundOutputDevice::play(const TSoundTrackP &st, TINT32 s0, TINT32 s1, swap(s0, s1); } - if (isPlaying()) { -#ifdef DEBUG - cout << "is playing, stop it!" << endl; -#endif - stop(); - } m_imp->play(st, s0, s1, loop, scrubbing); } //------------------------------------------------------------------------------ -void TSoundOutputDeviceImp::play(const TSoundTrackP &st, TINT32 s0, TINT32 s1, - bool loop, bool scrubbing) { - if (!doSetStreamFormat(st->getFormat())) return; - - MyData *myData = new MyData(); - - myData->imp = shared_from_this(); - myData->totalPacketCount = s1 - s0; - myData->fileByteCount = (s1 - s0) * st->getSampleSize(); - myData->entireFileBuffer = new char[myData->fileByteCount]; - - memcpy(myData->entireFileBuffer, st->getRawData() + s0 * st->getSampleSize(), - myData->fileByteCount); - - m_isPlaying = true; - myData->isLooping = loop; - - QAudioFormat format; - QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice()); - - format.setSampleSize(st->getBitPerSample()); - format.setCodec("audio/pcm"); - format.setChannelCount(st->getChannelCount()); - format.setByteOrder(QAudioFormat::LittleEndian); - format.setSampleType(st->getFormat().m_signedSample - ? QAudioFormat::SignedInt - : QAudioFormat::UnSignedInt); - format.setSampleRate(st->getSampleRate()); - QList sbos = info.supportedByteOrders(); - QList sccs = info.supportedChannelCounts(); - QList ssrs = info.supportedSampleRates(); - QList sstypes = info.supportedSampleTypes(); - QList ssss = info.supportedSampleSizes(); - QStringList supCodes = info.supportedCodecs(); - if (!info.isFormatSupported((format))) { - format = info.nearestFormat(format); - int newChannels = format.channelCount(); - int newBitsPerSample = format.sampleSize(); - int newSampleRate = format.sampleRate(); - QAudioFormat::SampleType newSampleType = format.sampleType(); - QAudioFormat::Endian newBo = format.byteOrder(); - } - int test = st->getSampleCount() / st->getSampleRate(); - QByteArray *data = - new QByteArray(myData->entireFileBuffer, myData->fileByteCount); - QBuffer *newBuffer = new QBuffer; - newBuffer->setBuffer(data); - newBuffer->open(QIODevice::ReadOnly); - newBuffer->seek(0); - if (m_audioOutput == NULL) { - m_audioOutput = new QAudioOutput(format, NULL); - } - m_audioOutput->start(newBuffer); - m_audioOutput->setVolume(m_volume); -} - -//------------------------------------------------------------------------------ - -bool TSoundOutputDeviceImp::doStopDevice() { - m_isPlaying = false; - m_audioOutput->stop(); - - return true; -} - -//------------------------------------------------------------------------------ - void TSoundOutputDevice::stop() { - if (m_imp->m_opened == false) return; - - m_imp->doStopDevice(); + m_imp->stop(); } //------------------------------------------------------------------------------ @@ -295,16 +283,13 @@ void TSoundOutputDevice::detach(TSoundOutputDeviceListener *listener) { //------------------------------------------------------------------------------ double TSoundOutputDevice::getVolume() { - if (m_imp->m_audioOutput != NULL) - return m_imp->m_audioOutput->volume(); - else return m_imp->m_volume; + return m_imp->getVolume(); } //------------------------------------------------------------------------------ bool TSoundOutputDevice::setVolume(double volume) { - m_imp->m_volume = volume; - m_imp->m_audioOutput->setVolume(volume); + m_imp->setVolume(volume); return true; } @@ -314,15 +299,15 @@ bool TSoundOutputDevice::supportsVolume() { return true; } //------------------------------------------------------------------------------ -bool TSoundOutputDevice::isPlaying() const { return m_imp->m_isPlaying; } +bool TSoundOutputDevice::isPlaying() const { return m_imp->isPlaying(); } //------------------------------------------------------------------------------ -bool TSoundOutputDevice::isLooping() { return m_imp->m_looped; } +bool TSoundOutputDevice::isLooping() { return m_imp->isLooping(); } //------------------------------------------------------------------------------ -void TSoundOutputDevice::setLooping(bool loop) { m_imp->m_looped = loop; } +void TSoundOutputDevice::setLooping(bool loop) { m_imp->setLooping(loop); } //------------------------------------------------------------------------------ diff --git a/toonz/sources/common/tstream/tpersistset.cpp b/toonz/sources/common/tstream/tpersistset.cpp index dde3aea..34a14a0 100644 --- a/toonz/sources/common/tstream/tpersistset.cpp +++ b/toonz/sources/common/tstream/tpersistset.cpp @@ -4,7 +4,6 @@ #include "tstream.h" // tcg includes -#include "tcg/tcg_deleter_types.h" #include "tcg/tcg_function_types.h" // STD includes @@ -21,7 +20,7 @@ PERSIST_IDENTIFIER(TPersistSet, "persistSet") //------------------------------------------------------------------ TPersistSet::~TPersistSet() { - std::for_each(m_objects.begin(), m_objects.end(), tcg::deleter()); + std::for_each(m_objects.begin(), m_objects.end(), std::default_delete()); } //------------------------------------------------------------------ @@ -38,7 +37,7 @@ void TPersistSet::insert(std::unique_ptr object) { std::remove_if(m_objects.begin(), m_objects.end(), tcg::bind1st(&locals::sameType, object.get())); - std::for_each(pt, m_objects.end(), tcg::deleter()); + std::for_each(pt, m_objects.end(), std::default_delete()); m_objects.erase(pt, m_objects.end()); // Push back the supplied object diff --git a/toonz/sources/include/tcg/algorithm.h b/toonz/sources/include/tcg/algorithm.h deleted file mode 100644 index 2e59dde..0000000 --- a/toonz/sources/include/tcg/algorithm.h +++ /dev/null @@ -1,180 +0,0 @@ -#pragma once - -#ifndef TCG_ALGORITHM_H -#define TCG_ALGORITHM_H - -// tcg includes -#include "traits.h" - -// STD includes -#include - -/*! - \file algorithm.h - - \brief This file contains useful algorithms complementary to those - in the standard \p \ and in \p boost::algorithm. -*/ - -namespace tcg { - -//*************************************************************************** -// Binary find algorithms -//*************************************************************************** - -/*! - \brief Performs a binary search for the a value in a sorted, - random access iterators range, and returns its position. - - \return The \a first range position whose value is \a equivalent to - the specified one. -*/ -template -RanIt binary_find(RanIt begin, //!< Start of the sorted range. - RanIt end, //!< End of the sorted range. - const T &value) //!< Value to look up. -{ - RanIt it = std::lower_bound(begin, end, value); - return (it != end && !(value < *it)) ? it : end; -} - -//--------------------------------------------------------------------- - -/*! - \brief Performs a binary search for the a value in a sorted, - random access iterators range, and returns its position. - - \return The \a first range position whose value is \a equivalent to - the specified one. -*/ -template -RanIt binary_find(RanIt begin, //!< Start of the sorted range. - RanIt end, //!< End of the sorted range. - const T &value, //!< Value to look up. - Compare comp) //!< Comparator functor sorting the range. -{ - RanIt it = std::lower_bound(begin, end, value, comp); - return (it != end && !comp(value, *it)) ? it : end; -} - -//*************************************************************************** -// Min/Max iterator range algorithms -//*************************************************************************** - -/*! - \brief Calculates the minimal transformed element from the - input iterators range. - - \return The position of the minimal transform. - - \details This function is similar to std::min_element(), but - operating a unary transforming function on dereferenced - objects. - - Furthermore, the minimal transformed value is cached - during computation. -*/ -template -ForIt min_transform( - ForIt begin, //!< Start of the input iterators range. - ForIt end, //!< End of the input iterators range. - Func func, //!< The transforming function. - Comp comp) //!< The comparator object for transformed values. -{ - typedef typename tcg::function_traits::ret_type ret_type; - typedef typename tcg::remove_cref::type value_type; - - if (begin == end) return end; - - ForIt minPos = begin; - value_type minimum = func(*begin); - - for (; begin != end; ++begin) { - const value_type &candidate = func(*begin); - - if (comp(candidate, minimum)) minPos = begin, minimum = candidate; - } - - return minPos; -} - -//--------------------------------------------------------------------- - -/*! - \brief Calculates the minimal transformed element from the - input iterators range. - - \return The position of the minimal transform. - - \remark This variation uses \p operator< as comparator for the - transformed values. -*/ -template -ForIt min_transform(ForIt begin, //!< Start of the input iterators range. - ForIt end, //!< End of the input iterators range. - Func func) //!< The transforming function. -{ - typedef typename tcg::function_traits::ret_type ret_type; - typedef typename tcg::remove_cref::type value_type; - - return min_transform(begin, end, func, std::less()); -} - -//--------------------------------------------------------------------- - -/*! - \brief Calculates the maximal transformed element from the - input iterators range. - - \return The position of the maximal transform. - - \sa See min_transform() for a detailed explanation. -*/ -template -ForIt max_transform( - ForIt begin, //!< Start of the input iterators range. - ForIt end, //!< End of the input iterators range. - Func func, //!< The transforming function. - Comp comp) //!< The comparator object for transformed values. -{ - typedef typename tcg::function_traits::ret_type ret_type; - typedef typename tcg::remove_cref::type value_type; - - if (begin == end) return end; - - ForIt maxPos = begin; - value_type maximum = func(*begin); - - for (; begin != end; ++begin) { - const value_type &candidate = func(*begin); - - if (comp(maximum, candidate)) maxPos = begin, maximum = candidate; - } - - return maxPos; -} - -//--------------------------------------------------------------------- - -/*! - \brief Calculates the maximal transformed element from the - input iterators range. - - \return The position of the maximal transform. - - \sa See min_transform() for a detailed explanation. -*/ -template -ForIt max_transform(ForIt begin, //!< Start of the input iterators range. - ForIt end, //!< End of the input iterators range. - Func func) //!< The transforming function. -{ - typedef typename tcg::function_traits::ret_type ret_type; - typedef typename tcg::remove_cref::type value_type; - - return max_transform(begin, end, func, std::less()); -} - -} // namespace tcg - -#endif // TCG_ALGORITHM_H diff --git a/toonz/sources/include/tcg/auto.h b/toonz/sources/include/tcg/auto.h deleted file mode 100644 index ae4252a..0000000 --- a/toonz/sources/include/tcg/auto.h +++ /dev/null @@ -1,199 +0,0 @@ -#pragma once - -#ifndef TCG_AUTO_H -#define TCG_AUTO_H - -#include "base.h" -#include "traits.h" - -/* \file auto.h - - \brief This file contains template classes able to perform special - operations upon - instance destruction. - - \details These classes can be useful to enforce block-scoped operations at a - block's - entry point, considering that a block end can be far away, or the - function - could return abruptly at several different points. -*/ - -namespace tcg { - -//******************************************************************************* -// tcg::auto_type definition -//******************************************************************************* - -struct _auto_type { - mutable bool m_destruct; - -public: - _auto_type(bool destruct) : m_destruct(destruct) {} - _auto_type(const _auto_type &other) : m_destruct(other.m_destruct) { - other.m_destruct = false; - } - _auto_type &operator=(const _auto_type &other) { - m_destruct = other.m_destruct, other.m_destruct = false; - return *this; - } -}; - -typedef const _auto_type &auto_type; - -//******************************************************************************* -// tcg::auto_func definition -//******************************************************************************* - -template -struct auto_zerary : public _auto_type { - Op m_op; - -public: - auto_zerary(bool destruct = true) : _auto_type(destruct) {} - ~auto_zerary() { - if (this->m_destruct) m_op(); - } -}; - -//-------------------------------------------------------------------- - -template ::arg1_type> -struct auto_unary : public _auto_type { - T m_arg1; - Op m_op; - -public: - auto_unary(bool destruct = true) : _auto_type(destruct) {} - auto_unary(Op op, T arg, bool destruct = true) - : _auto_type(destruct), m_arg1(arg), m_op(op) {} - ~auto_unary() { - if (this->m_destruct) m_op(m_arg1); - } -}; - -//-------------------------------------------------------------------- - -template ::arg1_type, - typename T2 = typename function_traits::arg2_type> -struct auto_binary : public _auto_type { - T1 m_arg1; - T2 m_arg2; - Op m_op; - -public: - auto_binary(bool destruct = true) : _auto_type(destruct) {} - auto_binary(Op op, T1 arg1, T2 arg2, bool destruct = true) - : _auto_type(destruct), m_arg1(arg1), m_arg2(arg2), m_op(op) {} - ~auto_binary() { - if (this->m_destruct) m_op(m_arg1, m_arg2); - } -}; - -//******************************************************************************* -// Helper functions -//******************************************************************************* - -template -auto_zerary make_auto(Op op, bool destruct = true) { - return auto_zerary(op, destruct); -} - -template -auto_unary make_auto(Op op, T &arg1, bool destruct = true) { - return auto_unary(op, arg1, destruct); -} - -template -auto_unary make_auto(Op op, const T &arg1, bool destruct = true) { - return auto_unary(op, arg1, destruct); -} - -template -auto_binary make_auto(Op op, T1 &arg1, T2 &arg2, bool destruct = true) { - return auto_binary(op, arg1, arg2, destruct); -} - -template -auto_binary make_auto(Op op, const T1 &arg1, T2 &arg2, - bool destruct = true) { - return auto_binary(op, arg1, arg2, destruct); -} - -template -auto_binary make_auto(Op op, T1 &arg1, const T2 &arg2, - bool destruct = true) { - return auto_binary(op, arg1, arg2, destruct); -} - -template -auto_binary make_auto(Op op, const T1 &arg1, const T2 &arg2, - bool destruct = true) { - return auto_binary(op, arg1, arg2, destruct); -} - -//******************************************************************************* -// tcg::auto_reset definition -//******************************************************************************* - -template -class auto_reset { - typedef T var_type; - -public: - var_type &m_var; - -public: - auto_reset(var_type &var) : m_var(var) {} - ~auto_reset() { m_var = val; } - -private: - auto_reset(const auto_reset &); - auto_reset &operator=(const auto_reset &); -}; - -//******************************************************************************* -// tcg::auto_backup definition -//******************************************************************************* - -template -struct auto_backup { - typedef T var_type; - -public: - var_type m_backup; - var_type *m_original; - -public: - auto_backup() : m_original() {} - auto_backup(var_type &original) : m_original(&original), m_backup(original) {} - auto_backup(var_type *original) : m_original(original) { - if (m_original) m_backup = *m_original; - } - ~auto_backup() { - if (m_original) *m_original = m_backup; - } - - void reset(T &original) { - m_original = &original; - m_backup = original; - } - void reset(T *original) { - m_original = original; - if (m_original) m_backup = *original; - } - - T *release() { - T *original = m_original; - m_original = 0; - return original; - } - -private: - auto_backup(const auto_backup &); - auto_backup &operator=(const auto_backup &); -}; - -} // namespace tcg - -#endif // TCG_AUTO_H diff --git a/toonz/sources/include/tcg/deleter_types.h b/toonz/sources/include/tcg/deleter_types.h deleted file mode 100644 index 3a4a979..0000000 --- a/toonz/sources/include/tcg/deleter_types.h +++ /dev/null @@ -1,89 +0,0 @@ -#pragma once - -#ifndef TCG_DELETER_TYPES_H -#define TCG_DELETER_TYPES_H - -// tcg includes -#include "traits.h" - -/* - \file deleter_types.h - - \brief This file contains implementations of some useful deleter functors - and deleter concepts. -*/ - -namespace tcg { - -//********************************************************************************* -// Deleter objects -//********************************************************************************* - -template -struct deleter { - void operator()(T *ptr) const { delete ptr; } -}; - -template -struct deleter { - void operator()(T *ptr) const { delete[] ptr; } -}; - -template -struct dtor { - void operator()(T *ptr) const { ptr->~T(); } -}; - -template -struct dtor { - int m_count; - - dtor(int count) : m_count(count) {} - - void operator()(T *ptr) const { - for (int t = 0; t != m_count; ++t) ptr[t].~T(); - } -}; - -struct freer { - void operator()(void *ptr) const { free(ptr); } -}; - -/*! - The Deleter concept can be used to destroy instances of incomplete types. - - Deleter objects are useful in all cases where a type-erasure concept needs - to support specialization on incomplete types. -*/ - -template -class deleter_concept { -public: - typedef typename tcg::traits::pointer_type pointer_type; - -public: - virtual ~deleter_concept() {} - - virtual deleter_concept *clone() const = 0; - virtual void operator()(pointer_type ptr) = 0; -}; - -//-------------------------------------------------------------------------------- - -template -class deleter_model : public deleter_concept { -public: - deleter_concept *clone() const { return new deleter_model(*this); } - void operator()(T *ptr) { delete ptr; } -}; - -template -class deleter_model : public deleter_concept { -public: - deleter_concept *clone() const { return new deleter_model(*this); } - void operator()(T *ptr) { delete[] ptr; } -}; - -} // namespace tcg - -#endif // TCG_DELETER_TYPES_H diff --git a/toonz/sources/include/tcg/functional.h b/toonz/sources/include/tcg/functional.h deleted file mode 100644 index 19fa867..0000000 --- a/toonz/sources/include/tcg/functional.h +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once - -#ifndef TCG_FUNCTIONAL_H -#define TCG_FUNCTIONAL_H - -#include "traits.h" - -// std includes -#include - -//********************************************************************************** -// Logical functor combinators -//********************************************************************************** - -namespace tcg { - -template -class unary_and - : public std::unary_function::arg_type, - bool> { - Fn1 m_fn1; - Fn2 m_fn2; - -public: - unary_and(const Fn1 &fn1, const Fn2 &fn2) : m_fn1(fn1), m_fn2(fn2) {} - - bool operator()(const typename function_traits::arg_type &t) const { - return m_fn1(t) && m_fn2(t); - } -}; - -template -unary_and and1(const Fn1 &fn1, const Fn2 &fn2) { - return unary_and(fn1, fn2); -} - -//---------------------------------------------------------------------------------- - -template -class unary_or - : public std::unary_function::arg_type, - bool> { - Fn1 m_fn1; - Fn2 m_fn2; - -public: - unary_or(const Fn1 &fn1, const Fn2 &fn2) : m_fn1(fn1), m_fn2(fn2) {} - - bool operator()(const typename function_traits::arg_type &t) const { - return m_fn1(t) || m_fn2(t); - } -}; - -template -unary_or or1(const Fn1 &fn1, const Fn2 &fn2) { - return unary_or(fn1, fn2); -} - -} // namespace tcg - -#endif // TCG_FUNCTIONAL_H diff --git a/toonz/sources/include/tcg/hpp/image_iterator.hpp b/toonz/sources/include/tcg/hpp/image_iterator.hpp deleted file mode 100644 index cc0e154..0000000 --- a/toonz/sources/include/tcg/hpp/image_iterator.hpp +++ /dev/null @@ -1,249 +0,0 @@ -#pragma once - -#ifndef TCG_IMAGE_ITERATOR_HPP -#define TCG_IMAGE_ITERATOR_HPP - -// tcg includes -#include "../image_iterator.h" -#include "../pixel_ops.h" - -namespace tcg { - -//*************************************************************************** -// image_edge_iterator implementation -//*************************************************************************** - -template -template -image_edge_iterator::image_edge_iterator(const Img &img, int x, - int y, int dirX, - int dirY) - : m_lx_1(image_traits::width(img) - 1) - , m_ly_1(image_traits::height(img) - 1) - , m_wrap(image_traits::wrap(img)) - , m_pos(x, y) - , m_dir(dirX, dirY) - , m_outsideColor(image_traits::outsideColor(img)) - , m_elbowColor(m_outsideColor) - , m_pix(image_traits::pixel(img, x, y)) - , m_turn(UNKNOWN) { - pixels(m_leftPix, m_rightPix); - colors(m_leftColor, m_rightColor); -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::pixels(iter pixLeft, - iter pixRight) { - if (m_dir.y) - if (m_dir.y > 0) - pixLeft = m_pix - 1, pixRight = m_pix; - else - pixLeft = m_pix - m_wrap, pixRight = pixLeft - 1; - else if (m_dir.x > 0) - pixLeft = m_pix, pixRight = m_pix - m_wrap; - else - pixRight = m_pix - 1, pixLeft = pixRight - m_wrap; -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::colors( - value_type &leftColor, value_type &rightColor) { - if (m_dir.y) - if (m_dir.y > 0) { - if (m_pos.y > m_ly_1) - leftColor = rightColor = m_outsideColor; - else { - leftColor = (m_pos.x > 0) ? *m_leftPix : m_outsideColor; - rightColor = (m_pos.x <= m_lx_1) ? *m_rightPix : m_outsideColor; - } - } else { - if (m_pos.y < 1) - leftColor = rightColor = m_outsideColor; - else { - leftColor = (m_pos.x <= m_lx_1) ? *m_leftPix : m_outsideColor; - rightColor = (m_pos.x > 0) ? *m_rightPix : m_outsideColor; - } - } - else if (m_dir.x > 0) { - if (m_pos.x > m_lx_1) - leftColor = rightColor = m_outsideColor; - else { - leftColor = (m_pos.y <= m_ly_1) ? *m_leftPix : m_outsideColor; - rightColor = (m_pos.y > 0) ? *m_rightPix : m_outsideColor; - } - } else { - if (m_pos.x < 1) - leftColor = rightColor = m_outsideColor; - else { - leftColor = (m_pos.y > 0) ? *m_leftPix : m_outsideColor; - rightColor = (m_pos.y <= m_ly_1) ? *m_rightPix : m_outsideColor; - } - } -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::turn( - const value_type &newLeftColor, const value_type &newRightColor, - policy) { - if (newLeftColor == m_rightColor) { - if (newRightColor == m_leftColor) - turnAmbiguous(newLeftColor, newRightColor); - else - turnLeft(); - } else { - if (newRightColor != m_rightColor) - turnRight(); - else - m_turn = STRAIGHT; - } - - m_elbowColor = newLeftColor; - - pixels(m_leftPix, m_rightPix); -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::turn( - const value_type &newLeftColor, const value_type &newRightColor, - policy) { - if (newRightColor == m_leftColor) { - if (newLeftColor == m_rightColor) - turnAmbiguous(newLeftColor, newRightColor); - else - turnRight(); - } else { - if (newLeftColor != m_leftColor) - turnLeft(); - else - m_turn = STRAIGHT; - } - - m_elbowColor = newRightColor; - - pixels(m_leftPix, m_rightPix); -} - -//--------------------------------------------------------------------------------------------- - -template -inline void image_edge_iterator::turnAmbiguous( - const value_type &newLeftColor, const value_type &newRightColor) { - UCHAR count1 = 0, count2 = 0; - - value_type val; - - // Check the 4x4 neighbourhood and connect the minority color - if (m_pos.x > 2) { - val = *(m_pix - 2); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - - val = *(m_pix - 2 - m_wrap); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - } - - if (m_pos.x < m_lx_1) { - val = *(m_pix + 1); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - - val = *(m_pix + 1 - m_wrap); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - } - - if (m_pos.y > 2) { - int wrap2 = m_wrap << 1; - - val = *(m_pix - wrap2); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - - val = *(m_pix - wrap2 - 1); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - } - - if (m_pos.y < m_ly_1) { - val = *(m_pix + m_wrap); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - - val = *(m_pix + m_wrap - 1); - if (val == m_leftColor) - ++count1; - else if (val == m_rightColor) - ++count2; - } - - // Minority connection - join the one with less count - if (count1 <= count2) - turnRight(); // Join m_leftColor == newRightColor - else if (count1 > count2) - turnLeft(); // Join m_rightColor == newLeftColor - - m_turn |= AMBIGUOUS; -} - -//--------------------------------------------------------------------------------------------- - -template -void image_edge_iterator::advance(policy) { - value_type newLeftColor = m_leftColor, newRightColor = m_rightColor; - - int pixAdd = m_dir.y * m_wrap + m_dir.x; - - m_pos.x += m_dir.x, m_pos.y += m_dir.y; - m_pix += pixAdd, m_leftPix += pixAdd, m_rightPix += pixAdd; - m_leftColor = newLeftColor; - - colors(newLeftColor, newRightColor); - - turn(newLeftColor, newRightColor); - colors(m_leftColor, m_rightColor); -} - -//--------------------------------------------------------------------------------------------- - -template -void image_edge_iterator::advance(policy) { - value_type newLeftColor = m_leftColor, newRightColor = m_rightColor; - - int pixAdd = m_dir.y * m_wrap + m_dir.x; - - m_pos.x += m_dir.x, m_pos.y += m_dir.y; - m_pix += pixAdd, m_leftPix += pixAdd, m_rightPix += pixAdd; - m_rightColor = newRightColor; - - colors(newLeftColor, newRightColor); - - turn(newLeftColor, newRightColor); - colors(m_leftColor, m_rightColor); -} - -} // namespace tcg - -#endif // TCG_IMAGE_ITERATOR_HPP diff --git a/toonz/sources/include/tcg/image_iterator.h b/toonz/sources/include/tcg/image_iterator.h deleted file mode 100644 index ba5494e..0000000 --- a/toonz/sources/include/tcg/image_iterator.h +++ /dev/null @@ -1,255 +0,0 @@ - - -#ifndef TCG_IMAGE_ITERATOR_H -#define TCG_IMAGE_ITERATOR_H - -// tcg includes -#include "tcg_ptr.h" -#include "tcg_image_ops.h" -#include "tcg_point.h" - -// STD includes -#include - -namespace tcg { - -//********************************************************************************************************* -// Image Iterator class -//********************************************************************************************************* - -/*! - The image_iterator class models an iterator accessing pixels of an image along - its rows. -*/ - -template -class image_iterator : public iterator_traits::inheritable_iterator_type { - typedef typename iterator_traits::inheritable_iterator_type iter; - -public: - typedef typename iter::iterator_category iterator_category; - typedef typename iter::value_type value_type; - typedef typename iter::difference_type difference_type; - typedef typename iter::pointer pointer; - typedef typename iter::reference reference; - -public: - image_iterator() {} - - template - image_iterator(const Img &img, int x, int y) - : iter(image_traits::pixel(img, x, y)) - , m_base(image_traits::pixel(img, 0, 0)) - , m_lx(image_traits::width(img)) - , m_ly(image_traits::height(img)) - , m_wrap(image_traits::wrap(img)) - , m_skew(m_wrap - lx) {} - - int x() const { return (iter::operator-(m_base)) % m_wrap; } - int y() const { return (iter::operator-(m_base)) / m_wrap; } - - image_iterator &operator++() { - iter::operator++(); - if (x() >= m_lx) iter::operator+=(m_skew); - return *this; - } - image_iterator operator++(int) { - image_iterator it(*this); - operator++(); - return it; - } - - image_iterator &operator--() { - iter::operator--(); - if (x() < 0) iter::operator-=(m_skew); - return *this; - } - image_iterator operator--(int) { - image_iterator it(*this); - operator--(); - return it; - } - - image_iterator &operator+=(difference_type d) { - int yCount = (x() + d) / m_lx; - iter::operator+=((d - yCount * m_lx) + yCount * m_wrap); - return *this; - } - image_iterator operator+(difference_type d) const { - image_iterator it(*this); - it += d; - return it; - } - - image_iterator operator-(difference_type d) const { return operator+(-d); } - image_iterator &operator-=(difference_type d) { return operator+=(-d); } - - difference_type operator-(const image_iterator &other) const { - return (x() - other.x()) + m_lx * (y() - other.y()); - } - - reference operator[](difference_type d) const { - const image_iterator &it = operator+(d); - return *it; - } - -protected: - iter m_base; - int m_lx, m_ly, m_wrap, m_skew; -}; - -//********************************************************************************************************* -// image_edge_iterator class -//********************************************************************************************************* - -enum _iei_adherence_policy { LEFT_ADHERENCE, RIGHT_ADHERENCE }; - -/*! - The image_edge_iterator class models a forward iterator following the contour - of - an image area of uniform color. -*/ - -template -class image_edge_iterator { - typedef typename iterator_traits::inheritable_iterator_type iter; - -public: - typedef std::forward_iterator_tag iterator_category; - typedef typename iter::value_type value_type; - typedef typename iter::difference_type difference_type; - typedef typename iter::pointer pointer; - typedef typename iter::reference reference; - -public: - enum { adherence = _adherence }; - - enum Direction { - STRAIGHT = 0x0, - LEFT = 0x1, - RIGHT = 0x2, - AMBIGUOUS = 0x4, - UNKNOWN = 0x8, - AMBIGUOUS_LEFT = LEFT | AMBIGUOUS, - AMBIGUOUS_RIGHT = RIGHT | AMBIGUOUS - }; - -public: - image_edge_iterator() {} - - template - image_edge_iterator(const Img &img, int x, int y, int dirX, int dirY); - - const Point &pos() const { return m_pos; } - const Point &dir() const { return m_dir; } - - const value_type &leftColor() const { return m_leftColor; } - const value_type &rightColor() const { return m_rightColor; } - - const value_type &color() const { return color(policy<_adherence>()); } - const value_type &oppositeColor() const { - return oppositeColor(policy<_adherence>()); - } - const value_type &elbowColor() const { return m_elbowColor; } - - iter leftPixel() const { return m_leftPix; } - iter rightPixel() const { return m_rightPix; } - - iter pixel() const { return pixel(policy<_adherence>()); } - iter oppositePixel() const { return oppositePixel(policy<_adherence>()); } - - Direction turn() const { return Direction(m_turn); } - -public: - // Iterator functions - - bool operator==(const image_edge_iterator &it) const { - return (m_pos == it.m_pos) && (m_dir == it.m_dir); - } - bool operator!=(const image_edge_iterator &it) const { - return !operator==(it); - } - - image_edge_iterator &operator++() { - advance(policy<_adherence>()); - return *this; - } - image_edge_iterator operator++(int) { - image_edge_iterator temp(*this); - operator++(); - return temp; - } - -private: - void pixels(iter pixLeft, iter pixRight); - void colors(value_type &leftColor, value_type &rightColor); - - void turnLeft() { - int temp = m_dir.x; - m_dir.x = -m_dir.y; - m_dir.y = temp; - m_turn = LEFT; - } - void turnRight() { - int temp = m_dir.x; - m_dir.x = m_dir.y; - m_dir.y = -temp; - m_turn = RIGHT; - } - - void turn(const value_type &newLeftColor, const value_type &newRightColor) { - turn(newLeftColor, newRightColor, policy<_adherence>()); - } - void turnAmbiguous(const value_type &newLeftColor, - const value_type &newRightColor); - -private: - template <_iei_adherence_policy> - struct policy {}; - - const value_type &color(policy) const { return m_leftColor; } - const value_type &color(policy) const { - return m_rightColor; - } - - const value_type &oppositeColor(policy) const { - return m_rightColor; - } - const value_type &oppositeColor(policy) const { - return m_leftColor; - } - - iter pixel(policy) const { return m_leftPix; } - iter pixel(policy) const { return m_rightPix; } - - iter oppositePixel(policy) const { return m_rightPix; } - iter oppositePixel(policy) const { return m_leftPix; } - - void turn(const value_type &newLeftColor, const value_type &newRightColor, - policy); - void turn(const value_type &newLeftColor, const value_type &newRightColor, - policy); - - void advance(policy); - void advance(policy); - -private: - int m_lx_1, m_ly_1, m_wrap; - - Point m_pos, m_dir; - - value_type m_leftColor, m_rightColor, m_outsideColor, m_elbowColor; - iter m_pix, m_leftPix, m_rightPix; - - int m_turn; -}; - -} // namespace tcg - -#endif // TCG_IMAGE_ITERATOR_H - -//===================================================================================== - -#ifdef INCLUDE_HPP -#include "hpp/image_iterator.hpp" -#endif // INCLUDE_HPP diff --git a/toonz/sources/include/tcg/rect.h b/toonz/sources/include/tcg/rect.h deleted file mode 100644 index 1b1bdb7..0000000 --- a/toonz/sources/include/tcg/rect.h +++ /dev/null @@ -1,276 +0,0 @@ -#pragma once - -#ifndef TCG_RECT_H -#define TCG_RECT_H - -#include "point.h" -#include "size.h" - -// STD includes -#include - -namespace tcg { - -//********************************************************************************** -// Bidimensional Rect class -//********************************************************************************** - -template -struct RectT { - T x0, y0, x1, y1; - -public: - RectT() : x0((std::numeric_limits::max)()), y0(x0), x1(-x0), y1(x1) {} - RectT(T x0_, T y0_, T x1_, T y1_) : x0(x0_), y0(y0_), x1(x1_), y1(y1_) {} - RectT(const PointT &p0, const PointT &p1) - : x0(p0.x), y0(p0.y), x1(p1.x), y1(p1.y) {} - RectT(const PointT &p0, const SizeT &size) - : x0(p0.x), y0(p0.y), x1(p0.x + size.w), y1(p0.y + size.h) {} - - bool empty() const { return (x1 <= x0) || (y1 <= y0); } - - PointT p0() const { return PointT(x0, y0); } - PointT p1() const { return PointT(x1, y1); } - PointT center() const { return PointT((x0 + x1) / 2, (y0 + y1) / 2); } - - T width() const { return x1 - x0; } - T height() const { return y1 - y0; } - SizeT size() const { return SizeT(width(), height()); } - - bool operator==(const RectT &other) const { - return x0 == other.x0 && y0 == other.y0 && x1 == other.x1 && y1 == other.y1; - } - bool operator!=(const RectT &other) const { return !operator==(other); } - - RectT &operator+=(const PointT &p) { - x0 += p.x, y0 += p.y, x1 += p.x, y1 += p.y; - return *this; - } - RectT &operator-=(const PointT &p) { - x0 -= p.x, y0 -= p.y, x1 -= p.x, y1 -= p.y; - return *this; - } - - friend RectT operator+(const RectT &r, const tcg::PointT &p) { - return RectT(r.x0 + p.x, r.y0 + p.y, r.x1 + p.x, r.y1 + p.y); - } - friend RectT operator-(const RectT &r, const tcg::PointT &p) { - return RectT(r.x0 - p.x, r.y0 - p.y, r.x1 - p.x, r.y1 - p.y); - } - friend RectT operator+(const tcg::PointT &p, const RectT &r) { - return RectT(p.x + r.x0, p.y + r.y0, p.x + r.x1, p.y + r.y1); - } - friend RectT operator-(const tcg::PointT &p, const RectT &r) { - return RectT(p.x - r.x0, p.y - r.y0, p.x - r.x1, p.y - r.y1); - } - - template - RectT &operator*=(K k) { - x0 *= k, y0 *= k, x1 *= k, y1 *= k; - return *this; - } - - template - friend RectT operator*(const RectT &r, K k) { - return RectT(r.x0 * k, r.y0 * k, r.x1 * k, r.y1 * k); - } - template - friend RectT operator*(K k, const RectT &r) { - return RectT(k * r.x0, k * r.y0, k * r.x1, k * r.y1); - } - - RectT &operator|=(const RectT &other) { - if (x0 > other.x0) x0 = other.x0; - if (y0 > other.y0) y0 = other.y0; - if (x1 < other.x1) x1 = other.x1; - if (y1 < other.y1) y1 = other.y1; - return *this; - } - - RectT &operator&=(const RectT &other) { - if (x0 < other.x0) x0 = other.x0; - if (y0 < other.y0) y0 = other.y0; - if (x1 > other.x1) x1 = other.x1; - if (y1 > other.y1) y1 = other.y1; - return *this; - } - - RectT &operator|=(const PointT &p) { - return operator|=(RectT(p.x, p.y, p.x, p.y)); - } - RectT &operator&=(const PointT &p) { - return operator&=(RectT(p.x, p.y, p.x, p.y)); - } - - friend RectT operator|(const RectT &a, const RectT &b) { - return RectT(a) |= b; - } - friend RectT operator&(const RectT &a, const RectT &b) { - return RectT(a) &= b; - } - - friend RectT operator|(const RectT &r, const PointT &p) { - return RectT(r) |= p; - } - friend RectT operator&(const RectT &r, const PointT &p) { - return RectT(r) &= p; - } - friend RectT operator|(const PointT &p, const RectT &r) { - return RectT(r) |= p; - } - friend RectT operator&(const PointT &p, const RectT &r) { - return RectT(r) &= p; - } -}; - -//------------------------------------------------------------------------ - -typedef RectT RectD; -typedef RectT RectI; -typedef RectI Rect; - -//********************************************************************************** -// Tridimensional Rect class -//********************************************************************************** - -template -struct Rect3T { - T x0, y0, z0, x1, y1, z1; - -public: - Rect3T() - : x0((std::numeric_limits::max)()) - , y0(x0) - , z0(x0) - , x1(-x0) - , y1(x1) - , z1(x1) {} - Rect3T(T x0_, T y0_, T z0_, T x1_, T y1_, T z1_) - : x0(x0_), y0(y0_), z0(z0_), x1(x1_), y1(y1_), z1(z1_) {} - Rect3T(const Point3T &p0, const Point3T &p1) - : x0(p0.x), y0(p0.y), z0(p0.z) x1(p1.x), y1(p1.y), z1(p1.z) {} - Rect3T(const Point3T &p0, const Size3T &size) - : x0(p0.x) - , y0(p0.y) - , z0(p0.z) - , x1(p0.x + size.w) - , y1(p0.y + size.h) - , z1(p0.z + size.d) {} - - bool empty() const { return (x1 <= x0) || (y1 <= y0) || (z1 <= z0); } - - Point3T p0() const { return Point3T(x0, y0, z0); } - Point3T p1() const { return Point3T(x1, y1, z1); } - Point3T center() const { - return Point3T((x0 + x1) / 2, (y0 + y1) / 2, (z0 + z1) / 2); - } - - T width() const { return x1 - x0; } - T height() const { return y1 - y0; } - T depth() const { return z1 - z0; } - Size3T size() const { return Size3T(width(), height(), depth()); } - - bool operator==(const Rect3T &other) const { - return x0 == other.x0 && y0 == other.y0 && z0 == other.z0 && - x1 == other.x1 && y1 == other.y1 && z1 == other.z1; - } - bool operator!=(const Rect3T &other) const { return !operator==(other); } - - Rect3T &operator+=(const Point3T &p) { - x0 += p.x, y0 += p.y, z0 += p.z, x1 += p.x, y1 += p.y, z1 += p.z; - return *this; - } - Rect3T &operator-=(const Point3T &p) { - x0 -= p.x, y0 -= p.y, z0 -= p.z, x1 -= p.x, y1 -= p.y, z1 -= p.z; - return *this; - } - - friend Rect3T operator+(const Rect3T &r, const tcg::Point3T &p) { - return Rect3T(r.x0 + p.x, r.y0 + p.y, r.z0 + p.z, r.x1 + p.x, r.y1 + p.y, - r.z1 + p.z); - } - friend Rect3T operator-(const Rect3T &r, const tcg::Point3T &p) { - return Rect3T(r.x0 - p.x, r.y0 - p.y, r.z0 - p.z, r.x1 - p.x, r.y1 - p.y, - r.z1 - p.z); - } - friend Rect3T operator+(const tcg::Point3T &p, const Rect3T &r) { - return Rect3T(p.x + r.x0, p.x + r.y0, p.x + r.z0, p.x + r.x1 + p.x, r.y1, - p.x + r.z1); - } - friend Rect3T operator-(const tcg::Point3T &p, const Rect3T &r) { - return Rect3T(p.x - r.x0, p.y - r.y0, p.z - r.z0, p.x - r.x1, p.y - r.y1, - p.z - r.z1); - } - - template - Rect3T &operator*=(K k) { - x0 *= k, y0 *= k, z0 *= k, x1 *= k, y1 *= k, z1 *= k; - return *this; - } - - template - friend Rect3T operator*(const Rect3T &r, K k) { - return RectT(r.x0 * k, r.y0 * k, r.z0 * k, r.x1 * k, r.y1 * k, r.z1 * k); - } - template - friend Rect3T operator*(K k, const Rect3T &r) { - return RectT(k * r.x0, k * r.y0, k * r.z0, k * r.x1, k * r.y1, k * r.z1); - } - - Rect3T &operator|=(const Rect3T &other) { - if (x0 > other.x0) x0 = other.x0; - if (y0 > other.y0) y0 = other.y0; - if (z0 > other.z0) z0 = other.z0; - if (x1 < other.x1) x1 = other.x1; - if (y1 < other.y1) y1 = other.y1; - if (z1 < other.z1) z1 = other.z1; - return *this; - } - - Rect3T &operator&=(const Rect3T &other) { - if (x0 < other.x0) x0 = other.x0; - if (y0 < other.y0) y0 = other.y0; - if (z0 < other.z0) z0 = other.z0; - if (x1 > other.x1) x1 = other.x1; - if (y1 > other.y1) y1 = other.y1; - if (z1 > other.z1) z1 = other.z1; - return *this; - } - - Rect3T &operator|=(const Point3T &p) { - return operator|=(RectT(p.x, p.y, p.z, p.x, p.y, p.z)); - } - Rect3T &operator&=(const Point3T &p) { - return operator&=(RectT(p.x, p.y, p.z, p.x, p.y, p.z)); - } - - friend Rect3T operator|(const Rect3T &a, const Rect3T &b) { - return Rect3T(a) |= b; - } - friend Rect3T operator&(const Rect3T &a, const Rect3T &b) { - return Rect3T(a) &= b; - } - - friend Rect3T operator|(const Rect3T &r, const Point3T &p) { - return Rect3T(r) |= p; - } - friend Rect3T operator&(const Rect3T &r, const Point3T &p) { - return Rect3T(r) &= p; - } - friend Rect3T operator|(const Point3T &p, const Rect3T &r) { - return Rect3T(r) |= p; - } - friend Rect3T operator&(const Point3T &p, const Rect3T &r) { - return Rect3T(r) &= p; - } -}; - -//------------------------------------------------------------------------ - -typedef Rect3T Rect3D; -typedef Rect3T Rect3I; -typedef RectI Rect; - -} // namespace tcg - -#endif // TCG_RECT_H diff --git a/toonz/sources/include/tcg/size.h b/toonz/sources/include/tcg/size.h deleted file mode 100644 index c43d9d7..0000000 --- a/toonz/sources/include/tcg/size.h +++ /dev/null @@ -1,218 +0,0 @@ -#pragma once - -#ifndef TCG_SIZE_H -#define TCG_SIZE_H - -namespace tcg { - -//********************************************************************************** -// Bidimensional size class -//********************************************************************************** - -template -struct SizeT { - typedef T value_type; - -public: - T w, h; - -public: - SizeT() : w(), h() {} - SizeT(T w_, T h_) : w(w_), h(h_) {} - - bool empty() const { return (w <= 0) || (h <= 0); } - - SizeT &operator+=(const SizeT &other) { - w += other.w, h += other.h; - return *this; - } - SizeT &operator-=(const SizeT &other) { - w -= other.w, h -= other.h; - return *this; - } - - friend SizeT operator+(const SizeT &a, const SizeT &b) { - return SizeT(a.w + b.w, a.h + b.h); - } - - friend SizeT operator-(const SizeT &a, const SizeT &b) { - return SizeT(a.w - b.w, a.h - b.h); - } - - template - SizeT &operator*=(K k) { - w *= k, h *= k; - return *this; - } - - template - SizeT &operator/=(K k) { - w /= k, h /= k; - return *this; - } - - template - friend SizeT operator*(K k, const SizeT &a) { - return SizeT(k * a.w, k * a.h); - } - - template - friend SizeT operator*(const SizeT &a, K k) { - return SizeT(a.w * k, a.h * k); - } - - template - friend SizeT operator/(const SizeT &a, K k) { - return SizeT(a.w / k, a.h / k); - } - - SizeT &operator&=(const SizeT &other) { - if (other.w < w) w = other.w; - if (other.h < h) h = other.h; - - return *this; - } - - SizeT &operator|=(const SizeT &other) { - if (other.w > w) w = other.w; - if (other.h > h) h = other.h; - - return *this; - } - - friend SizeT operator&(const SizeT &a, const SizeT &b) { - SizeT tmp(a); - return tmp &= b; - } - friend SizeT operator|(const SizeT &a, const SizeT &b) { - SizeT tmp(a); - return tmp |= b; - } -}; - -//------------------------------------------------------------------------ - -typedef SizeT SizeI; -typedef SizeI Size; -typedef SizeT SizeD; - -//********************************************************************************** -// Tridimensional size class -//********************************************************************************** - -template -struct Size3T { - typedef T value_type; - -public: - T w, h, d; - -public: - Size3T() : w(), h(), d() {} - Size3T(T w_, T h_, T d_) : w(w_), h(h_), d(d_) {} - - bool empty() const { return (w <= 0) || (h <= 0) || (d <= 0); } - - Size3T &operator+=(const Size3T &other) { - w += other.w, h += other.h, d += other.d; - return *this; - } - Size3T &operator-=(const Size3T &other) { - w -= other.w, h -= other.h, d -= other.d; - return *this; - } - - friend Size3T operator+(const Size3T &a, const Size3T &b) { - return SizeT(a.w + b.w, a.h + b.h, a.d + b.d); - } - - friend Size3T operator-(const Size3T &a, const Size3T &b) { - return SizeT(a.w - b.w, a.h - b.h, a.d + b.d); - } - - template - Size3T &operator*=(K k) { - w *= k, h *= k, d *= k; - return *this; - } - - template - Size3T &operator/=(K k) { - w /= k, h /= k, d /= k; - return *this; - } - - template - friend Size3T operator*(K k, const Size3T &a) { - return Size3T(k * a.w, k * a.h, k * a.d); - } - - template - friend Size3T operator*(const Size3T &a, K k) { - return Size3T(a.w * k, a.h * k, a.d * k); - } - - template - friend Size3T operator/(const Size3T &a, K k) { - return Size3T(a.w / k, a.h / k, a.d / k); - } - - Size3T &operator&=(const Size3T &other) { - if (other.w < w) w = other.w; - if (other.h < h) h = other.h; - if (other.d < d) d = other.d; - - return *this; - } - - Size3T &operator|=(const Size3T &other) { - if (other.w > w) w = other.w; - if (other.h > h) h = other.h; - if (other.d > d) d = other.d; - - return *this; - } - - friend Size3T operator&(const Size3T &a, const Size3T &b) { - Size3T tmp(a); - return tmp &= b; - } - friend Size3T operator|(const Size3T &a, const Size3T &b) { - Size3T tmp(a); - return tmp |= b; - } -}; - -//------------------------------------------------------------------------ - -typedef Size3T Size3I; -typedef Size3I Size3; -typedef Size3T Size3D; - -//********************************************************************************** -// N-dimensional size class -//********************************************************************************** - -template -struct SizeN { - static const int size = N; - typedef T value_type; - -public: - T span[N]; - -public: - SizeN() {} - SizeN(const T &t) { std::fill(span, span + N, t); } - - template - SizeN(It begin, It end) { - std::copy(begin, end, span); - } - - // To be completed... -}; - -} // namespace tcg - -#endif // TCG_SIZE_H diff --git a/toonz/sources/include/tcg/tcg_algorithm.h b/toonz/sources/include/tcg/tcg_algorithm.h deleted file mode 100644 index 7a4ccf6..0000000 --- a/toonz/sources/include/tcg/tcg_algorithm.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "algorithm.h" diff --git a/toonz/sources/include/tcg/tcg_auto.h b/toonz/sources/include/tcg/tcg_auto.h deleted file mode 100644 index a2bec77..0000000 --- a/toonz/sources/include/tcg/tcg_auto.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "auto.h" diff --git a/toonz/sources/include/tcg/tcg_deleter_types.h b/toonz/sources/include/tcg/tcg_deleter_types.h deleted file mode 100644 index e3bcfa2..0000000 --- a/toonz/sources/include/tcg/tcg_deleter_types.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "deleter_types.h" diff --git a/toonz/sources/include/tcg/tcg_image_iterator.h b/toonz/sources/include/tcg/tcg_image_iterator.h deleted file mode 100644 index 3b93c06..0000000 --- a/toonz/sources/include/tcg/tcg_image_iterator.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -#include "image_iterator.h" diff --git a/toonz/sources/include/tcommon.h b/toonz/sources/include/tcommon.h index a5dec3d..d08803a 100644 --- a/toonz/sources/include/tcommon.h +++ b/toonz/sources/include/tcommon.h @@ -149,12 +149,6 @@ const unsigned int c_maxuint = (unsigned int)(~0U); #define DV_IMPORT_VAR #endif -#ifdef _MSC_VER -#define DV_ALIGNED(val) __declspec(align(val)) -#else -#define DV_ALIGNED(val) __attribute__((aligned(val))) -#endif - inline short swapShort(short val) { return ((val >> 8) & 0x00ff) | (val << 8); } inline TINT32 swapTINT32(TINT32 val) { TINT32 appo, aux, aux1; diff --git a/toonz/sources/include/tools/cursors.h b/toonz/sources/include/tools/cursors.h index 5c017cb..44f0e49 100644 --- a/toonz/sources/include/tools/cursors.h +++ b/toonz/sources/include/tools/cursors.h @@ -11,7 +11,6 @@ enum { CURSOR_ARROW, CURSOR_HAND, CURSOR_HOURGLASS, - CURSOR_NO, CURSOR_DUMMY, #ifndef _WIN32 CURSOR_DND, @@ -56,6 +55,7 @@ enum { SplineEditorCursorAdd, TrackerCursor, ForbiddenCursor, + CURSOR_NO = ForbiddenCursor, NormalEraserCursor, RectEraserCursor, diff --git a/toonz/sources/include/tpixel.h b/toonz/sources/include/tpixel.h index 5dd25b0..5b633f2 100644 --- a/toonz/sources/include/tpixel.h +++ b/toonz/sources/include/tpixel.h @@ -40,7 +40,7 @@ class TPixelGR16; A set of predefined colors are included as well. Note that channel ordering is platform depending. */ -class DVAPI DV_ALIGNED(4) TPixelRGBM32 { +class DVAPI alignas(4) TPixelRGBM32 { TPixelRGBM32(TUINT32 mask) { *(TUINT32 *)this = mask; }; public: @@ -154,9 +154,9 @@ dithering // Since SSE2 mostly require 16 byte aligned, changing 8 byte align to 4 byte // align will not cause problems. #if defined(_MSC_VER) && !defined(x64) -class DVAPI DV_ALIGNED(4) TPixelRGBM64 { +class DVAPI alignas(4) TPixelRGBM64 { #else -class DVAPI DV_ALIGNED(8) TPixelRGBM64 { +class DVAPI alignas(8) TPixelRGBM64 { #endif public: static const int maxChannelValue; diff --git a/toonz/sources/include/tversion.h b/toonz/sources/include/tversion.h index 596ccd6..82e17cf 100644 --- a/toonz/sources/include/tversion.h +++ b/toonz/sources/include/tversion.h @@ -16,8 +16,8 @@ public: private: const char *applicationName = "OpenToonz"; - const float applicationVersion = 1.2; - const float applicationRevision = 1; + const float applicationVersion = 1.3; + const float applicationRevision = 0; }; std::string ToonzVersion::getAppName(void) { diff --git a/toonz/sources/stdfx/iwa_particlesengine.cpp b/toonz/sources/stdfx/iwa_particlesengine.cpp index d0a63c5..89261d8 100644 --- a/toonz/sources/stdfx/iwa_particlesengine.cpp +++ b/toonz/sources/stdfx/iwa_particlesengine.cpp @@ -39,7 +39,7 @@ void printTime(TStopWatch &sw, std::string name) { ss << '\n' << '\0'; TSystem::outputDebug(ss.str()); } -}; +}; // namespace //---- /*-----------------------------------------------------------------*/ @@ -209,7 +209,7 @@ void Iwa_Particles_Engine::roll_particles( std::vector lastframe, /*-テクスチャ素材のそれぞれのカラム長-*/ int &totalparticles, QList &particleOrigins, int genPartNum /*- 実際に生成したい粒子数 -*/ - ) { +) { particles_ranges ranges; int i; float xgravity, ygravity, windx, windy; @@ -240,7 +240,7 @@ void Iwa_Particles_Engine::roll_particles( /*- 出発する粒子のインデックス -*/ QList leavingPartIndex; if (myregions.size() && - values.source_ctrl_val != Iwa_TiledParticlesFx::CTRL_NONE) { + porttiles.find(values.source_ctrl_val) != porttiles.end()) { int partLeft = actualBirthParticles; while (partLeft > 0) { int PrePartLeft = partLeft; @@ -329,7 +329,7 @@ void Iwa_Particles_Engine::roll_particles( po.pos[1], /*- 座標を指定して発生 -*/ po.isUpward, /*- orientation を追加 -*/ (int)po.initSourceFrame) /*- 素材内の初期フレーム位置 -*/ - ); + ); } totalparticles++; } @@ -375,7 +375,7 @@ void Iwa_Particles_Engine::roll_particles( (int)po.level, lastframe[po.level], po.pos[0], po.pos[1], po.isUpward, (int)po.initSourceFrame) /*- 素材内の初期フレーム位置 -*/ - ); + ); } totalparticles++; } @@ -391,7 +391,7 @@ void Iwa_Particles_Engine::roll_particles( /*- 出発する粒子 -*/ ParticleOrigin po = particleOrigins.at(leavingPartIndex.at(i)); - int seed = (int)((std::numeric_limits::max)() * + int seed = (int)((std::numeric_limits::max)() * values.random_val->getFloat()); int lifetime = 0; @@ -410,7 +410,7 @@ void Iwa_Particles_Engine::roll_particles( 0, (int)po.level, lastframe[po.level], po.pos[0], po.pos[1], po.isUpward, (int)po.initSourceFrame) /*- 素材内の初期フレーム位置 -*/ - ); + ); } totalparticles++; } @@ -422,7 +422,7 @@ void Iwa_Particles_Engine::roll_particles( /*- 出発する粒子 -*/ ParticleOrigin po = particleOrigins.at(leavingPartIndex.at(i)); - int seed = (int)((std::numeric_limits::max)() * + int seed = (int)((std::numeric_limits::max)() * values.random_val->getFloat()); int lifetime = 0; @@ -438,7 +438,7 @@ void Iwa_Particles_Engine::roll_particles( (int)po.level, lastframe[po.level], po.pos[0], po.pos[1], po.isUpward, (int)po.initSourceFrame) /*- 素材内の初期フレーム位置 -*/ - ); + ); } totalparticles++; } @@ -488,10 +488,10 @@ void Iwa_Particles_Engine::normalize_values(struct particles_values &values, (values.speeda_val.first) = (values.speeda_val.first) * M_PI_180; (values.speeda_val.second) = (values.speeda_val.second) * M_PI_180; if (values.step_val < 1) values.step_val = 1; - values.genfadecol_val = (values.genfadecol_val) * 0.01; - values.finfadecol_val = (values.finfadecol_val) * 0.01; - values.foutfadecol_val = (values.foutfadecol_val) * 0.01; - (values.curl_val) = (values.curl_val) * dpicorr * 0.1; + values.genfadecol_val = (values.genfadecol_val) * 0.01; + values.finfadecol_val = (values.finfadecol_val) * 0.01; + values.foutfadecol_val = (values.foutfadecol_val) * 0.01; + (values.curl_val) = (values.curl_val) * dpicorr * 0.1; /*- ひらひら粒子に照明を当てる normalize_values()内で Degree → Radian 化する * -*/ (values.iw_light_theta_val) = (values.iw_light_theta_val) * M_PI_180; @@ -508,20 +508,18 @@ void Iwa_Particles_Engine::render_particles( std::vector part_ports, /*- テクスチャ素材画像のポート -*/ const TRenderSettings &ri, TDimension - &p_size, /*- テクスチャ素材のバウンディングボックスの足し合わさったもの - -*/ + &p_size, /*- テクスチャ素材のバウンディングボックスの足し合わさったもの + -*/ TPointD &p_offset, /*- バウンディングボックス左下の座標 -*/ std::map ctrl_ports, /*- コントロール画像のポート番号/ポート -*/ - std::vector - partLevel, /*- テクスチャ素材のリスト -*/ - float dpi, /*- 1 が入ってくる -*/ - int curr_frame, - int shrink, /*- 1 が入ってくる -*/ - double startx, /*- 0 が入ってくる -*/ - double starty, /*- 0 が入ってくる -*/ - double endx, /*- 0 が入ってくる -*/ - double endy, /*- 0 が入ってくる -*/ + std::vector partLevel, /*- テクスチャ素材のリスト -*/ + float dpi, /*- 1 が入ってくる -*/ + int curr_frame, int shrink, /*- 1 が入ってくる -*/ + double startx, /*- 0 が入ってくる -*/ + double starty, /*- 0 が入ってくる -*/ + double endx, /*- 0 が入ってくる -*/ + double endy, /*- 0 が入ってくる -*/ std::vector last_frame, /*- テクスチャ素材のそれぞれのカラム長 -*/ unsigned long fxId) { /*- 各種パーティクルのパラメータ -*/ @@ -739,7 +737,7 @@ void Iwa_Particles_Engine::render_particles( curr_frame, level_n, &random_level, 1, last_frame, totalparticles, particleOrigins, intpart /*- 実際に生成したい粒子数 -*/ - ); + ); // Store the rolled data in the particles manager if (!particlesData->m_calculated || @@ -918,9 +916,9 @@ void Iwa_Particles_Engine::do_render( /*- ここで、照明モードのとき、その明るさを計算する -*/ if (values.iw_rendermode_val == Iwa_TiledParticlesFx::REND_ILLUMINATED) { - float liTheta = values.iw_light_theta_val; - float liPhi = values.iw_light_phi_val; - float3 normVec = {sinf(theta) * sinf(phi), cosf(theta) * sinf(phi), + float liTheta = values.iw_light_theta_val; + float liPhi = values.iw_light_phi_val; + float3 normVec = {sinf(theta) * sinf(phi), cosf(theta) * sinf(phi), cosf(phi)}; float3 lightVec = {sinf(liTheta) * sinf(liPhi), cosf(liTheta) * sinf(liPhi), cosf(liPhi)}; @@ -1108,8 +1106,7 @@ void Iwa_Particles_Engine::fill_array( int ®ioncount, /*- 領域数を返す -*/ std::vector &myarray, /*- インデックスを返すと思われる。サイズはソースTileの縦横 -*/ - std::vector &lista, - std::vector &listb, int threshold) { + std::vector &lista, std::vector &listb, int threshold) { int pr = 0; int i, j; int lx, ly; @@ -1145,7 +1142,7 @@ void Iwa_Particles_Engine::fill_array( mask[1] = myarray[i - 1 + lx * (j - 1)]; } if (i != lx - 1) mask[3] = myarray[i + 1 + lx * (j - 1)]; - mask[2] = myarray[i + lx * (j - 1)]; + mask[2] = myarray[i + lx * (j - 1)]; if (!mask[0] && !mask[1] && !mask[2] && !mask[3]) { (regioncount)++; myarray[i + lx * j] = (regioncount); @@ -1179,7 +1176,7 @@ void Iwa_Particles_Engine::fill_array( void Iwa_Particles_Engine::normalize_array( std::vector> &myregions, TPointD pos, int lx, int ly, int regioncounter, std::vector &myarray, std::vector &lista, - std::vector &listb, std::vector & final) { + std::vector &listb, std::vector &final) { int i, j, k, l; std::vector tmp; @@ -1192,13 +1189,13 @@ void Iwa_Particles_Engine::normalize_array( j = lista[l]; /*TMSG_INFO("j vale %d\n", j);*/ while (final[j] != j) j = final[j]; - k = listb[l]; + k = listb[l]; /*TMSG_INFO("k vale %d\n", k);*/ while (final[k] != k) k = final[k]; - if (j != k) final[j] = k; + if (j != k) final[j] = k; } // TMSG_INFO("esco dal for\n"); - for (j = 1; j <= regioncounter; j++) + for (j = 1; j <= regioncounter; j++) while (final[j] != final[final[j]]) final[j] = final[final[j]]; /*conto quante cavolo di regioni sono*/ diff --git a/toonz/sources/stdfx/iwa_particlesfx.h b/toonz/sources/stdfx/iwa_particlesfx.h index 925f775..ee46c1f 100644 --- a/toonz/sources/stdfx/iwa_particlesfx.h +++ b/toonz/sources/stdfx/iwa_particlesfx.h @@ -132,7 +132,6 @@ public: ANIM_SR_CYCLE }; enum { TOP_YOUNGER, TOP_OLDER, TOP_SMALLER, TOP_BIGGER, TOP_RANDOM }; - enum { CTRL_NONE = -1, CTRL_1, CTRL_2 }; /*- 計算モード (背景+粒子/粒子/背景/照明された粒子) -*/ enum { REND_ALL, REND_PARTICLES, REND_BG, REND_ILLUMINATED }; diff --git a/toonz/sources/stdfx/particles.cpp b/toonz/sources/stdfx/particles.cpp index b2e4e6a..925c036 100644 --- a/toonz/sources/stdfx/particles.cpp +++ b/toonz/sources/stdfx/particles.cpp @@ -52,7 +52,8 @@ Particle::Particle(int g_lifetime, int seed, std::map porttiles, /*- 初期座標値をつくる -*/ /*-- Perspective DistributionがONかつ、SizeのControlImageが刺さっている場合 * --*/ - if (myregions.size() && values.scale_ctrl_val != ParticlesFx::CTRL_NONE && + if (myregions.size() && + porttiles.find(values.scale_ctrl_val) != porttiles.end() && values.perspective_distribution_val) { float size = myWeight[255]; /*- 候補の中のIndex -*/ @@ -74,7 +75,7 @@ Particle::Particle(int g_lifetime, int seed, std::map porttiles, } /*- 領域がある かつ 発生領域のControlImageが刺さっている場合 -*/ else if (myregions.size() && - values.source_ctrl_val != ParticlesFx::CTRL_NONE) { + porttiles.find(values.source_ctrl_val) != porttiles.end()) { /*- howmany:発生Particlesのうち、何番目に発生させたものか。 myregionが複数有る場合は、均等に割り振ることになる。 -*/ int regionindex = howmany % myregions.size(); @@ -117,7 +118,8 @@ Particle::Particle(int g_lifetime, int seed, std::map porttiles, it != porttiles.end(); ++it) { if ((values.lifetime_ctrl_val == it->first || values.speed_ctrl_val == it->first || - values.scale_ctrl_val == it->first || values.rot_ctrl_val == it->first + values.scale_ctrl_val == it->first || + values.rot_ctrl_val == it->first /*- Speed Angleを明るさでコントロールする場合 -*/ || (values.speeda_ctrl_val == it->first && !values.speeda_use_gradient_val)) && @@ -245,7 +247,7 @@ void Particle::create_Swing(const particles_values &values, smperiody = changesigny; } if (values.rotswingmode_val == ParticlesFx::SWING_SMOOTH) { - smswinga = abs((int)(values.rotsca_val.first + + smswinga = abs((int)(values.rotsca_val.first + random.getFloat() * (ranges.rotsca_range))); smperioda = changesigna; } @@ -267,7 +269,7 @@ void Particle::create_Colors(const particles_values &values, (porttiles.find(values.gencol_ctrl_val) != porttiles.end())) get_image_reference(porttiles[values.gencol_ctrl_val], values, color); else - color = values.gencol_val.getPremultipliedValue(random.getFloat()); + color = values.gencol_val.getPremultipliedValue(random.getFloat()); gencol.fadecol = values.genfadecol_val; if (values.gencol_spread_val) spread_color(color, values.gencol_spread_val); gencol.col = color; @@ -394,7 +396,7 @@ void Particle::update_Animation(const particles_values &values, int first, case ParticlesFx::ANIM_SR_CYCLE: if (!keep || frame != keep - 1) { if (!animswing && frame < last - 1) { - frame = (frame + 1); + frame = (frame + 1); if (frame == last - 1) animswing = 1; } else frame = (frame - 1); @@ -711,7 +713,7 @@ void Particle::move(std::map porttiles, frictx = vx * (1 + values.friction_val * frictreference) + (10 / vx) * values.friction_val * frictreference; if ((frictx / vx) < 0) frictx = 0; - vx = frictx; + vx = frictx; } if (!frictx && fabs(values.friction_val * frictreference * 10) > fabs(xgravity)) { @@ -725,7 +727,7 @@ void Particle::move(std::map porttiles, fricty = vy * (1 + values.friction_val * frictreference) + (10 / vy) * values.friction_val * frictreference; if ((fricty / vy) < 0) fricty = 0; - vy = fricty; + vy = fricty; } if (!fricty && fabs(values.friction_val * frictreference * 10) > fabs(ygravity)) { diff --git a/toonz/sources/stdfx/particlesengine.cpp b/toonz/sources/stdfx/particlesengine.cpp index 1a480db..2abf548 100644 --- a/toonz/sources/stdfx/particlesengine.cpp +++ b/toonz/sources/stdfx/particlesengine.cpp @@ -256,7 +256,7 @@ void Particles_Engine::roll_particles( { /*- 新たに作るパーティクルの数だけ繰り返す -*/ for (i = 0; i < newparticles; i++) { - int seed = (int)((std::numeric_limits::max)() * + int seed = (int)((std::numeric_limits::max)() * values.random_val->getFloat()); int level = (int)(values.random_val->getFloat() * level_n); @@ -292,7 +292,7 @@ void Particles_Engine::roll_particles( switch (values.toplayer_val) { case ParticlesFx::TOP_YOUNGER: for (i = 0; i < newparticles; i++) { - int seed = (int)((std::numeric_limits::max)() * + int seed = (int)((std::numeric_limits::max)() * values.random_val->getFloat()); int level = (int)(values.random_val->getFloat() * level_n); @@ -321,7 +321,7 @@ void Particles_Engine::roll_particles( for (int j = 0; j < tmp; j++, it++) ; { - int seed = (int)((std::numeric_limits::max)() * + int seed = (int)((std::numeric_limits::max)() * values.random_val->getFloat()); int level = (int)(values.random_val->getFloat() * level_n); int lifetime = 0; @@ -345,7 +345,7 @@ void Particles_Engine::roll_particles( default: for (i = 0; i < newparticles; i++) { - int seed = (int)((std::numeric_limits::max)() * + int seed = (int)((std::numeric_limits::max)() * values.random_val->getFloat()); int level = (int)(values.random_val->getFloat() * level_n); int lifetime = 0; @@ -403,9 +403,9 @@ void Particles_Engine::normalize_values(struct particles_values &values, (values.speeda_val.first) = (values.speeda_val.first) * M_PI_180; (values.speeda_val.second) = (values.speeda_val.second) * M_PI_180; if (values.step_val < 1) values.step_val = 1; - values.genfadecol_val = (values.genfadecol_val) * 0.01; - values.finfadecol_val = (values.finfadecol_val) * 0.01; - values.foutfadecol_val = (values.foutfadecol_val) * 0.01; + values.genfadecol_val = (values.genfadecol_val) * 0.01; + values.finfadecol_val = (values.finfadecol_val) * 0.01; + values.foutfadecol_val = (values.foutfadecol_val) * 0.01; } /*-----------------------------------------------------------------*/ @@ -682,7 +682,7 @@ void Particles_Engine::do_render( // either // (std::numeric_limits::max)() or its opposite, then the rect IS // THE infiniteRectD) - if (bbox == TConsts::infiniteRectD) return; + if (bbox.isEmpty() || bbox == TConsts::infiniteRectD) return; } // Now, these are the particle rendering specifications @@ -861,7 +861,7 @@ void Particles_Engine::fill_array(TTile *ctrl1, int ®ioncount, mask[1] = myarray[i - 1 + lx * (j - 1)]; } if (i != lx - 1) mask[3] = myarray[i + 1 + lx * (j - 1)]; - mask[2] = myarray[i + lx * (j - 1)]; + mask[2] = myarray[i + lx * (j - 1)]; if (!mask[0] && !mask[1] && !mask[2] && !mask[3]) { (regioncount)++; myarray[i + lx * j] = (regioncount); @@ -895,7 +895,7 @@ void Particles_Engine::fill_array(TTile *ctrl1, int ®ioncount, void Particles_Engine::normalize_array( std::vector> &myregions, TPointD pos, int lx, int ly, int regioncounter, std::vector &myarray, std::vector &lista, - std::vector &listb, std::vector & final) { + std::vector &listb, std::vector &final) { int i, j, k, l; std::vector tmp; @@ -908,13 +908,13 @@ void Particles_Engine::normalize_array( j = lista[l]; /*TMSG_INFO("j vale %d\n", j);*/ while (final[j] != j) j = final[j]; - k = listb[l]; + k = listb[l]; /*TMSG_INFO("k vale %d\n", k);*/ while (final[k] != k) k = final[k]; - if (j != k) final[j] = k; + if (j != k) final[j] = k; } // TMSG_INFO("esco dal for\n"); - for (j = 1; j <= regioncounter; j++) + for (j = 1; j <= regioncounter; j++) while (final[j] != final[final[j]]) final[j] = final[final[j]]; /*conto quante cavolo di regioni sono*/ diff --git a/toonz/sources/stdfx/particlesfx.cpp b/toonz/sources/stdfx/particlesfx.cpp index b12c692..31e8743 100644 --- a/toonz/sources/stdfx/particlesfx.cpp +++ b/toonz/sources/stdfx/particlesfx.cpp @@ -230,7 +230,7 @@ ParticlesFx::ParticlesFx() step_val->setValueRange(1, (std::numeric_limits::max)()); TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::Red), TSpectrum::ColorKey(1, TPixel32::Red)}; - gencol_val = TSpectrumParamP(tArrayCount(colors), colors); + gencol_val = TSpectrumParamP(tArrayCount(colors), colors); bindParam(this, "birth_color", gencol_val); bindParam(this, "birth_color_ctrl", gencol_ctrl_val); bindParam(this, "birth_color_spread", gencol_spread_val); @@ -436,6 +436,7 @@ void ParticlesFx::doCompute(TTile &tile, double frame, } } + if (bbox.isEmpty()) return; if (bbox == TConsts::infiniteRectD) bbox *= outTileBBox; p_size.lx = (int)bbox.getLx() + 1; diff --git a/toonz/sources/stdfx/particlesfx.h b/toonz/sources/stdfx/particlesfx.h index 2418b2c..3a45aab 100644 --- a/toonz/sources/stdfx/particlesfx.h +++ b/toonz/sources/stdfx/particlesfx.h @@ -104,7 +104,6 @@ public: ANIM_SR_CYCLE }; enum { TOP_YOUNGER, TOP_OLDER, TOP_SMALLER, TOP_BIGGER, TOP_RANDOM }; - enum { CTRL_NONE = -1, CTRL_1, CTRL_2 }; public: ParticlesFx(); diff --git a/toonz/sources/tnztools/CMakeLists.txt b/toonz/sources/tnztools/CMakeLists.txt index 51942b1..bfef22e 100644 --- a/toonz/sources/tnztools/CMakeLists.txt +++ b/toonz/sources/tnztools/CMakeLists.txt @@ -1,43 +1,44 @@ set(MOC_HEADERS - fullcolorbrushtool.h controlpointselection.h - ../include/tools/imagegrouping.h edittoolgadgets.h filltool.h + fullcolorbrushtool.h + plastictool.h skeletonsubtools.h tooloptionscontrols.h - plastictool.h + toonzrasterbrushtool.h + viewtools.h + ../include/tools/imagegrouping.h + ../include/tools/screenpicker.h ../include/tools/toolhandle.h ../include/tools/tooloptions.h - ../include/tools/screenpicker.h - rgbpickertool.h - rulertool.h - stylepickertool.h - viewtools.h - toonzrasterbrushtool.h ) -set(HEADERS ${MOC_HEADERS} +set(HEADERS + ${MOC_HEADERS} autofill.h bluredbrush.h - ../include/tools/cursormanager.h - ../include/tools/cursors.h - ../include/tools/levelselection.h - ../include/tools/rasterselection.h hookselection.h + mypainttoonzbrush.h + rasterselectiontool.h + rgbpickertool.h + rulertool.h selectiontool.h setsaveboxtool.h - rasterselectiontool.h + shifttracetool.h + stylepickertool.h + toonzvectorbrushtool.h vectorselectiontool.h + ../include/tools/RGBpicker.h + ../include/tools/cursormanager.h + ../include/tools/cursors.h + ../include/tools/levelselection.h + ../include/tools/rasterselection.h ../include/tools/strokeselection.h ../include/tools/stylepicker.h ../include/tools/tool.h ../include/tools/toolcommandids.h ../include/tools/toolutils.h - ../include/tools/RGBpicker.h - mypainttoonzbrush.h - shifttracetool.h - toonzvectorbrushtool.h ) set(SOURCES diff --git a/toonz/sources/tnztools/plastictool_build.cpp b/toonz/sources/tnztools/plastictool_build.cpp index 23cb72a..f1a569d 100644 --- a/toonz/sources/tnztools/plastictool_build.cpp +++ b/toonz/sources/tnztools/plastictool_build.cpp @@ -14,7 +14,6 @@ // tcg includes #include "tcg/tcg_point_ops.h" -#include "tcg/tcg_algorithm.h" #include "tcg/tcg_function_types.h" #include "tcg/tcg_iterator_ops.h" @@ -68,20 +67,17 @@ TPointD closestMeshVertexPos(const TPointD &pos, double *distance = 0) { //------------------------------------------------------------------------ TPointD closestSkeletonVertexPos(const TPointD &pos) { - struct locals { - static inline double dist2(const TPointD &pos, - const PlasticSkeletonVertex &vx) { - return tcg::point_ops::dist2(pos, vx.P()); - } - }; - const PlasticSkeletonP &skeleton = l_plasticTool.skeleton(); if (!skeleton || skeleton->empty()) return TConsts::napd; const PlasticSkeleton::vertices_container &vertices = skeleton->vertices(); - return tcg::min_transform(vertices.begin(), vertices.end(), - tcg::bind1st(&locals::dist2, pos)) + return std::min_element(vertices.begin(), vertices.end(), + [&pos](PlasticSkeleton::vertex_type const &x, + PlasticSkeleton::vertex_type const &y) { + return tcg::point_ops::dist2(pos, x.P()) < + tcg::point_ops::dist2(pos, y.P()); + }) ->P(); } diff --git a/toonz/sources/tnztools/stylepickertool.cpp b/toonz/sources/tnztools/stylepickertool.cpp index bcfe616..b8b7d77 100644 --- a/toonz/sources/tnztools/stylepickertool.cpp +++ b/toonz/sources/tnztools/stylepickertool.cpp @@ -213,6 +213,15 @@ void StylePickerTool::mouseMove(const TPointD &pos, const TMouseEvent &e) { int StylePickerTool::getCursorId() const { int ret; + + if (!Preferences::instance()->isMultiLayerStylePickerEnabled()) { + TImageP img = getImage(false); + TVectorImageP vi = img; + TToonzImageP ti = img; + + if (!vi && !ti) return ToolCursor::CURSOR_NO; + } + /* in case the "organize palette" option is active */ if (m_organizePalette.getValue()) ret = ToolCursor::PickerCursorOrganize; diff --git a/toonz/sources/tnztools/tool.cpp b/toonz/sources/tnztools/tool.cpp index fa2ecde..8f8e641 100644 --- a/toonz/sources/tnztools/tool.cpp +++ b/toonz/sources/tnztools/tool.cpp @@ -794,6 +794,43 @@ QString TTool::updateEnabled() { TXshSimpleLevel *sl = xl ? xl->getSimpleLevel() : 0; int levelType = sl ? sl->getType() : NO_XSHLEVEL; + if (Preferences::instance()->isAutoCreateEnabled() && + Preferences::instance()->isAnimationSheetEnabled()) { + // If not in Level editor, let's use our current cell from the xsheet to + // find the nearest level before it + if (levelType == NO_XSHLEVEL && + !m_application->getCurrentFrame()->isEditingLevel()) { + int r0, r1; + xsh->getCellRange(columnIndex, r0, r1); + for (int r = std::min(r1, rowIndex); r > r0; r--) { + TXshCell cell = xsh->getCell(r, columnIndex); + if (cell.isEmpty()) continue; + xl = (TXshLevel *)(&cell.m_level); + sl = cell.getSimpleLevel(); + levelType = cell.m_level->getType(); + break; + } + } + + // If the current tool does not match the current type, check for + // a version of the same tool that does + { + TTool *tool = this; + + if ((levelType == PLI_XSHLEVEL) && !(targetType & VectorImage)) + tool = TTool::getTool(m_name, VectorImage); + else if ((levelType == TZP_XSHLEVEL) && !(targetType & ToonzImage)) + tool = TTool::getTool(m_name, ToonzImage); + else if ((levelType == OVL_XSHLEVEL) && !(targetType & RasterImage)) + tool = TTool::getTool(m_name, RasterImage); + else if ((levelType == MESH_XSHLEVEL) && !(targetType & MeshImage)) + tool = TTool::getTool(m_name, MeshImage); + + if (tool && tool != this && tool->getTargetType() != TTool::NoTarget) + return tool->updateEnabled(); + } + } + TStageObject *obj = xsh->getStageObject(TStageObjectId::ColumnId(columnIndex)); bool spline = m_application->getCurrentObject()->isSpline(); diff --git a/toonz/sources/tnztools/tooloptions.cpp b/toonz/sources/tnztools/tooloptions.cpp index dbc4cce..3a0a997 100644 --- a/toonz/sources/tnztools/tooloptions.cpp +++ b/toonz/sources/tnztools/tooloptions.cpp @@ -60,9 +60,6 @@ #include #include -// tcg includes -#include "tcg/tcg_deleter_types.h" - TEnv::IntVar ArrowGlobalKeyFrame("EditToolGlobalKeyFrame", 0); //============================================================================= @@ -126,8 +123,8 @@ ToolOptionsBox::ToolOptionsBox(QWidget *parent, bool isScrollable) ToolOptionsBox::~ToolOptionsBox() { std::for_each(m_controls.begin(), m_controls.end(), - tcg::deleter()); - std::for_each(m_labels.begin(), m_labels.end(), tcg::deleter()); + std::default_delete()); + std::for_each(m_labels.begin(), m_labels.end(), std::default_delete()); } //----------------------------------------------------------------------------- diff --git a/toonz/sources/tnztools/toonzrasterbrushtool.cpp b/toonz/sources/tnztools/toonzrasterbrushtool.cpp index 589e040..b632221 100644 --- a/toonz/sources/tnztools/toonzrasterbrushtool.cpp +++ b/toonz/sources/tnztools/toonzrasterbrushtool.cpp @@ -1133,6 +1133,7 @@ void ToonzRasterBrushTool::onDeactivate() { if (m_tileSaver) { bool isValid = m_enabled && m_active; m_enabled = false; + m_active = false; if (isValid) { finishRasterBrush(m_mousePos, 1); /*-- 最後のストロークの筆圧は1とする --*/ @@ -1474,6 +1475,7 @@ void ToonzRasterBrushTool::leftButtonUp(const TPointD &pos, const TMouseEvent &e) { bool isValid = m_enabled && m_active; m_enabled = false; + m_active = false; if (!isValid) { return; } @@ -1489,6 +1491,8 @@ void ToonzRasterBrushTool::finishRasterBrush(const TPointD &pos, double pressureVal) { TToonzImageP ti = TImageP(getImage(true)); + if (!ti) return; + TPointD rasCenter = ti->getRaster()->getCenterD(); TTool::Application *app = TTool::getApplication(); TXshLevel *level = app->getCurrentLevel()->getLevel(); diff --git a/toonz/sources/tnztools/typetool.cpp b/toonz/sources/tnztools/typetool.cpp index 8c985c8..3b7c9d2 100644 --- a/toonz/sources/tnztools/typetool.cpp +++ b/toonz/sources/tnztools/typetool.cpp @@ -422,7 +422,7 @@ TypeTool::TypeTool() , m_vertical("Vertical Orientation", false) // W_ToolOptions_Vertical , m_size("Size:") // W_ToolOptions_Size , m_undo(0) { - bind(TTool::CommonLevels | TTool::EmptyTarget); + bind(TTool::VectorImage | TTool::ToonzImage | TTool::EmptyTarget); m_prop[0].bind(m_fontFamilyMenu); // Su mac non e' visibile il menu dello style perche' e' stato inserito nel // nome diff --git a/toonz/sources/tnztools/viewtools.h b/toonz/sources/tnztools/viewtools.h index 1ad806b..786ee67 100644 --- a/toonz/sources/tnztools/viewtools.h +++ b/toonz/sources/tnztools/viewtools.h @@ -42,4 +42,4 @@ public: } }; -#endif VIEWTOOLS_H \ No newline at end of file +#endif // VIEWTOOLS_H diff --git a/toonz/sources/toonz/CMakeLists.txt b/toonz/sources/toonz/CMakeLists.txt index e7fcba1..067887b 100644 --- a/toonz/sources/toonz/CMakeLists.txt +++ b/toonz/sources/toonz/CMakeLists.txt @@ -1,4 +1,4 @@ -set(VERSION 1.2) +set(VERSION 1.3) set(MOC_HEADERS addfilmstripframespopup.h @@ -6,126 +6,104 @@ set(MOC_HEADERS adjustthicknesspopup.h antialiaspopup.h audiorecordingpopup.h + autoinputcellnumberpopup.h batches.h batchserversviewer.h binarizepopup.h + boardsettingspopup.h brightnessandcontrastpopup.h cachefxcommand.h + cameracapturelevelcontrol.h camerasettingspopup.h canvassizepopup.h - castselection.h castviewer.h - celldata.h - cellkeyframedata.h - cellkeyframeselection.h - cellselection.h - ../include/cellposition.h cleanuppaletteviewer.h cleanuppopup.h cleanuppreview.h cleanupsettingsmodel.h + cleanupsettingspane.h cleanupsettingspopup.h cleanupswatch.h + colormodelbehaviorpopup.h colormodelviewer.h - columncommand.h - columnselection.h + comboviewerpane.h commandbar.h commandbarpopup.h convertpopup.h - curveio.h - drawingdata.h duplicatepopup.h dvdirtreeview.h dvitemview.h dvwidgets.h - exportlevelcommand.h exportlevelpopup.h - exportscenepopup.h exportpanel.h + exportscenepopup.h filebrowser.h filebrowsermodel.h filebrowserpopup.h - filedata.h fileinfopopup.h - fileselection.h filmstrip.h - filmstripcommand.h - filmstripselection.h flipbook.h - floatingpanelcommand.h formatsettingspopups.h frameheadgadget.h fxparameditorpopup.h histogrampopup.h - history.h + historypane.h imageviewer.h insertfxpopup.h - iocommand.h - keyframedata.h - keyframeselection.h - keyframemover.h layerfooterpanel.h layerheaderpanel.h levelcreatepopup.h levelsettingspopup.h linesfadepopup.h - linetestcapturepane.h - linetestpane.h - linetestviewer.h lipsyncpopup.h loadfolderpopup.h + locatorpopup.h magpiefileimportpopup.h mainwindow.h matchline.h menubar.h menubarpopup.h - menubarcommandids.h meshifypopup.h messagepanel.h - moviegenerator.h - ../include/orientation.h onionskinmaskgui.h outputsettingspopup.h overwritepopup.h pane.h + penciltestpopup.h pltgizmopopup.h preferencespopup.h previewer.h previewfxmanager.h projectpopup.h psdsettingspopup.h + reframepopup.h renumberpopup.h reslist.h ruler.h - ../include/saveloadqsettings.h savepresetpopup.h - scanlist.h scanpopup.h scenesettingspopup.h sceneviewer.h sceneviewercontextmenu.h - sceneviewerevents.h scriptconsolepanel.h - selectionutils.h + separatecolorspopup.h + separatecolorsswatch.h shortcutpopup.h soundtrackexport.h startuppopup.h - subcameramanager.h - subscenecommand.h + styleshortcutswitchablepanel.h svncleanupdialog.h svncommitdialog.h svndeletedialog.h svnlockdialog.h svnlockframerangedialog.h + svnpurgedialog.h svnrevertdialog.h svnupdateandlockdialog.h svnupdatedialog.h - svnpurgedialog.h tapp.h - kis_tablet_support_win8.h tasksviewer.h testpanel.h - tfarmstuff.h timestretchpopup.h toolbar.h tpanels.h @@ -133,44 +111,68 @@ set(MOC_HEADERS vectorizerpopup.h vectorizerswatch.h versioncontrol.h - versioncontrolgui.h versioncontroltimeline.h - versioncontrolxmlreader.h versioncontrolwidget.h - viewerdraw.h viewerpane.h - viewerpopup.h - xshcellmover.h xshcellviewer.h xshcolumnviewer.h - xsheetdragtool.h xsheetviewer.h xshnoteviewer.h xshrowviewer.h xshtoolbar.h - comboviewerpane.h - historypane.h - cleanupsettingspane.h - penciltestpopup.h - locatorpopup.h - styleshortcutswitchablepanel.h - cameracapturelevelcontrol.h - reframepopup.h - autoinputcellnumberpopup.h - colormodelbehaviorpopup.h - boardsettingspopup.h - separatecolorsswatch.h - separatecolorspopup.h +) + +set(HEADERS + ${MOC_HEADERS} + celldata.h + cellkeyframedata.h + cellkeyframeselection.h + cellselection.h + columncommand.h + columnselection.h + curveio.h + drawingdata.h + exportlevelcommand.h + filedata.h + fileselection.h + filmstripcommand.h + filmstripselection.h + floatingpanelcommand.h + history.h + iocommand.h + keyframedata.h + keyframemover.h + keyframeselection.h + kis_tablet_support_win8.h + linetestcapturepane.h + linetestpane.h + linetestviewer.h + menubarcommandids.h + moviegenerator.h + scanlist.h + sceneviewerevents.h + selectionutils.h + subcameramanager.h + subscenecommand.h + tfarmstuff.h + versioncontrolgui.h + versioncontrolxmlreader.h + viewerdraw.h + viewerpopup.h + xshcellmover.h + xsheetdragtool.h + castselection.h + ../include/cellposition.h + ../include/orientation.h + ../include/saveloadqsettings.h # Tracker file + ObjectTracker.h dummyprocessor.h metnum.h - ObjectTracker.h - predict3d.h processor.h + predict3d.h ) -set(HEADERS ${MOC_HEADERS}) - set(SOURCES floatingpanelcommand.cpp canvassizepopup.cpp diff --git a/toonz/sources/toonz/castviewer.cpp b/toonz/sources/toonz/castviewer.cpp index 14ba6d3..44ad81c 100644 --- a/toonz/sources/toonz/castviewer.cpp +++ b/toonz/sources/toonz/castviewer.cpp @@ -695,7 +695,7 @@ bool CastBrowser::drop(const QMimeData *data) { if (data->hasUrls()) { IoCmd::LoadResourceArguments args; - foreach (const QUrl &url, data->urls()) { + for (const QUrl &url : data->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); args.resourceDatas.push_back(fp); } diff --git a/toonz/sources/toonz/cellselection.cpp b/toonz/sources/toonz/cellselection.cpp index 3c23b5e..f4179a9 100644 --- a/toonz/sources/toonz/cellselection.cpp +++ b/toonz/sources/toonz/cellselection.cpp @@ -2632,7 +2632,7 @@ bool TCellSelection::areOnlyVectorCellsSelected() { } TXshSimpleLevel *sourceSl = firstCell.getSimpleLevel(); - if (sourceSl->getType() != PLI_XSHLEVEL) { + if (!sourceSl || sourceSl->getType() != PLI_XSHLEVEL) { DVGui::error(QObject::tr("This command only works on vector cells.")); return false; } diff --git a/toonz/sources/toonz/colormodelviewer.cpp b/toonz/sources/toonz/colormodelviewer.cpp index dd6c463..9bd2029 100644 --- a/toonz/sources/toonz/colormodelviewer.cpp +++ b/toonz/sources/toonz/colormodelviewer.cpp @@ -118,7 +118,7 @@ void ColorModelViewer::dragEnterEvent(QDragEnterEvent *event) { const QMimeData *mimeData = event->mimeData(); if (!acceptResourceDrop(mimeData->urls())) return; - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); std::string type = fp.getType(); if (type == "scr" || type == "tpl") return; @@ -133,7 +133,7 @@ void ColorModelViewer::dragEnterEvent(QDragEnterEvent *event) { void ColorModelViewer::dropEvent(QDropEvent *event) { const QMimeData *mimeData = event->mimeData(); if (mimeData->hasUrls()) { - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); loadImage(fp); setLevel(fp); diff --git a/toonz/sources/toonz/dvdirtreeview.cpp b/toonz/sources/toonz/dvdirtreeview.cpp index 6e38772..6ea0350 100644 --- a/toonz/sources/toonz/dvdirtreeview.cpp +++ b/toonz/sources/toonz/dvdirtreeview.cpp @@ -424,7 +424,7 @@ void DvDirTreeView::dropEvent(QDropEvent *e) { if (!folderNode || !folderNode->isFolder()) return; if (!mimeData->hasUrls()) return; int count = 0; - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath srcFp(url.toLocalFile().toStdWString()); TFilePath dstFp = folderNode->getPath(); diff --git a/toonz/sources/toonz/exportpanel.cpp b/toonz/sources/toonz/exportpanel.cpp index 36a631a..b2872e4 100644 --- a/toonz/sources/toonz/exportpanel.cpp +++ b/toonz/sources/toonz/exportpanel.cpp @@ -581,7 +581,7 @@ void ClipListViewer::setDropInsertionPoint(const QPoint &pos) { void ClipListViewer::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasUrls()) { - foreach (QUrl url, event->mimeData()->urls()) { + for (const QUrl &url : event->mimeData()->urls()) { TFilePath fp(url.toLocalFile().toStdString()); if (fp.getType() != "tnz") return; } @@ -611,7 +611,7 @@ void ClipListViewer::dropEvent(QDropEvent *event) { if (event->mimeData()->hasUrls()) { int j = m_dropInsertionPoint; if (j < 0) j = getItemCount(); - foreach (QUrl url, event->mimeData()->urls()) { + for (const QUrl &url : event->mimeData()->urls()) { TFilePath fp(url.toLocalFile().toStdString()); if (fp.getType() == "tnz") getController()->insertClipPath((j++), fp); } diff --git a/toonz/sources/toonz/filebrowser.cpp b/toonz/sources/toonz/filebrowser.cpp index a9ca57c..c0a4675 100644 --- a/toonz/sources/toonz/filebrowser.cpp +++ b/toonz/sources/toonz/filebrowser.cpp @@ -1577,7 +1577,7 @@ bool FileBrowser::drop(const QMimeData *mimeData) { return true; } else if (mimeData->hasUrls()) { int count = 0; - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath srcFp(url.toLocalFile().toStdWString()); TFilePath dstFp = srcFp.withParentDir(folderPath); if (dstFp != srcFp) { diff --git a/toonz/sources/toonz/filebrowserpopup.cpp b/toonz/sources/toonz/filebrowserpopup.cpp index 35c6f11..6fa3e9e 100644 --- a/toonz/sources/toonz/filebrowserpopup.cpp +++ b/toonz/sources/toonz/filebrowserpopup.cpp @@ -391,8 +391,7 @@ void FileBrowserPopup::showEvent(QShowEvent *) { void FileBrowserPopup::setModalBrowserToParent(QWidget *widget) { if (!widget) return; - QWidget *pwidget = NULL; - foreach (pwidget, QApplication::topLevelWidgets()) { + for (QWidget *pwidget : QApplication::topLevelWidgets()) { if ((pwidget->isWindow()) && (pwidget->isModal()) && (pwidget->isVisible())) { FileBrowserPopup *popup = qobject_cast(pwidget); @@ -2122,8 +2121,7 @@ void BrowserPopupController::openPopup(QStringList filters, m_browserPopup->setFileMode(isDirectoryOnly); if (parentWidget) { - QWidget *pwidget = NULL; - foreach (pwidget, QApplication::topLevelWidgets()) { + for (QWidget *pwidget : QApplication::topLevelWidgets()) { if (pwidget->isWindow() && pwidget->isVisible() && pwidget->isAncestorOf(parentWidget)) { Qt::WindowFlags flags = m_browserPopup->windowFlags(); diff --git a/toonz/sources/toonz/flipbook.cpp b/toonz/sources/toonz/flipbook.cpp index ad55025..4bc2e62 100644 --- a/toonz/sources/toonz/flipbook.cpp +++ b/toonz/sources/toonz/flipbook.cpp @@ -1765,7 +1765,7 @@ void FlipBook::dragEnterEvent(QDragEnterEvent *e) { !mimeData->hasFormat(CastItems::getMimeFormat())) return; - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); std::string type = fp.getType(); if (type == "tzp" || type == "tzu" || type == "tnz" || type == "scr" || @@ -1792,7 +1792,7 @@ void FlipBook::dragEnterEvent(QDragEnterEvent *e) { void FlipBook::dropEvent(QDropEvent *e) { const QMimeData *mimeData = e->mimeData(); if (mimeData->hasUrls()) { - foreach (QUrl url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); if (TFileType::getInfo(fp) != TFileType::UNKNOW_FILE) setLevel(fp); e->acceptProposedAction(); diff --git a/toonz/sources/toonz/kis_tablet_support_win8.cpp b/toonz/sources/toonz/kis_tablet_support_win8.cpp index c196885..798be5a 100644 --- a/toonz/sources/toonz/kis_tablet_support_win8.cpp +++ b/toonz/sources/toonz/kis_tablet_support_win8.cpp @@ -341,7 +341,7 @@ bool KisTabletSupportWin8::isPenDeviceAvailable() { return false; } bool hasPenDevice = false; - Q_FOREACH (const POINTER_DEVICE_INFO &device, devices) { + for (const POINTER_DEVICE_INFO &device : devices) { #ifdef KRITA dbgTablet << "Found pointer device" << static_cast(device.device) << QString::fromWCharArray(device.productString) diff --git a/toonz/sources/toonz/loadfoldercommand.cpp b/toonz/sources/toonz/loadfoldercommand.cpp index 950d518..1e82ed8 100644 --- a/toonz/sources/toonz/loadfoldercommand.cpp +++ b/toonz/sources/toonz/loadfoldercommand.cpp @@ -31,7 +31,6 @@ #include // tcg includes -#include "tcg/tcg_algorithm.h" #include "tcg/tcg_function_types.h" // boost includes diff --git a/toonz/sources/toonz/sceneviewerevents.cpp b/toonz/sources/toonz/sceneviewerevents.cpp index 7ff3957..c44b1d1 100644 --- a/toonz/sources/toonz/sceneviewerevents.cpp +++ b/toonz/sources/toonz/sceneviewerevents.cpp @@ -544,6 +544,7 @@ void SceneViewer::onMove(const TMouseEvent &event) { if (m_tabletEvent && (m_tabletState == OnStroke || m_tabletState == StartStroke) && m_tabletMove) { + if (m_toolSwitched) tool->leftButtonDown(pos, event); tool->leftButtonDrag(pos, event); m_tabletState = OnStroke; } @@ -551,14 +552,18 @@ void SceneViewer::onMove(const TMouseEvent &event) { else if (m_mouseButton == Qt::LeftButton) { // sometimes the mousePressedEvent is postponed to a wrong mouse move // event! - if (m_buttonClicked && !m_toolSwitched) tool->leftButtonDrag(pos, event); + // if (m_buttonClicked && !m_toolSwitched) tool->leftButtonDrag(pos, + // event); + if (m_toolSwitched) tool->leftButtonDown(pos, event); + tool->leftButtonDrag(pos, event); m_mouseState = OnStroke; } else if (m_pressure == 0.0) { tool->mouseMove(pos, event); } if (!cursorSet) setToolCursor(this, tool->getCursorId()); - m_pos = curPos; - m_tabletMove = false; + m_pos = curPos; + m_tabletMove = false; + m_toolSwitched = false; } else if (m_mouseButton == Qt::MidButton) { if ((event.buttons() & Qt::MidButton) == 0) m_mouseButton = Qt::NoButton; // scrub with shift and middle click @@ -1530,7 +1535,7 @@ void SceneViewer::dropEvent(QDropEvent *e) { if (mimeData->hasUrls()) { IoCmd::LoadResourceArguments args; - foreach (const QUrl &url, mimeData->urls()) { + for (const QUrl &url : mimeData->urls()) { TFilePath fp(url.toLocalFile().toStdWString()); args.resourceDatas.push_back(fp); } diff --git a/toonz/sources/toonz/styleshortcutswitchablepanel.cpp b/toonz/sources/toonz/styleshortcutswitchablepanel.cpp index d680521..2ad3607 100644 --- a/toonz/sources/toonz/styleshortcutswitchablepanel.cpp +++ b/toonz/sources/toonz/styleshortcutswitchablepanel.cpp @@ -92,7 +92,7 @@ void StyleShortcutSwitchablePanel::updateTabFocus() { QList widgets = findChildren(); if (Preferences::instance()->isUseNumpadForSwitchingStylesEnabled()) { // disable tab focus - foreach (QWidget *widget, widgets) { + for (QWidget *widget : widgets) { Qt::FocusPolicy policy = widget->focusPolicy(); if (policy == Qt::TabFocus || policy == Qt::StrongFocus || policy == Qt::WheelFocus) { diff --git a/toonz/sources/toonz/xshcellviewer.cpp b/toonz/sources/toonz/xshcellviewer.cpp index 4f678d8..745e96f 100644 --- a/toonz/sources/toonz/xshcellviewer.cpp +++ b/toonz/sources/toonz/xshcellviewer.cpp @@ -1539,7 +1539,6 @@ void CellArea::drawSoundCell(QPainter &p, int row, int col, bool isReference) { if (isFirstRow) { QRect modifierRect = m_viewer->orientation() ->rect(PredefinedRect::BEGIN_SOUND_EDIT) - .adjusted(-frameAdj, 0, -frameAdj, 0) .translated(xy); if (r0 != r0WithoutOff) p.fillRect(modifierRect, SoundColumnExtenderColor); m_soundLevelModifyRects.append(modifierRect); // list of clipping rects diff --git a/toonz/sources/toonzlib/CMakeLists.txt b/toonz/sources/toonzlib/CMakeLists.txt index 7648d6c..e09e470 100644 --- a/toonz/sources/toonzlib/CMakeLists.txt +++ b/toonz/sources/toonzlib/CMakeLists.txt @@ -1,14 +1,77 @@ -# moc の数が多いので全部食わせる set(MOC_HEADERS + ../include/toonz/fullcolorpalette.h + ../include/toonz/movierenderer.h + ../include/toonz/multimediarenderer.h + ../include/toonz/palettecontroller.h + ../include/toonz/preferences.h + ../include/toonz/scriptbinding.h + ../include/toonz/scriptbinding_centerline_vectorizer.h + ../include/toonz/scriptbinding_files.h + ../include/toonz/scriptbinding_image.h + ../include/toonz/scriptbinding_image_builder.h + ../include/toonz/scriptbinding_level.h + ../include/toonz/scriptbinding_outline_vectorizer.h + ../include/toonz/scriptbinding_rasterizer.h + ../include/toonz/scriptbinding_renderer.h + ../include/toonz/scriptbinding_scene.h + ../include/toonz/scriptbinding_toonz_raster_converter.h + ../include/toonz/scriptengine.h + ../include/toonz/stylemanager.h + ../include/toonz/tcenterlinevectorizer.h + ../include/toonz/tcolumnhandle.h + ../include/toonz/tframehandle.h + ../include/toonz/tfxhandle.h + ../include/toonz/tobjecthandle.h + ../include/toonz/tonionskinmaskhandle.h + ../include/toonz/tpalettehandle.h + ../include/toonz/tscenehandle.h + ../include/toonz/txsheethandle.h + ../include/toonz/txshlevel.h + ../include/toonz/txshlevelhandle.h + ../include/toonz/txshsimplelevel.h + ../include/toonz/txshsoundcolumn.h +) + +set(HEADERS + ${MOC_HEADERS} autoadjust.h - ../include/toonz/autoclose.h - ../include/convert2tlv.h autopos.h + cleanupcommon.h + cleanuppalette.h + imagebuilders.h + skeletonlut.h + tcenterlinevectP.h + texturemanager.h + xshhandlemanager.h + sandor_fxs/BlurMatrix.h + sandor_fxs/CIL.h + sandor_fxs/CallCircle.h + sandor_fxs/CallParam.h + sandor_fxs/EraseContour.h + sandor_fxs/InputParam.h + sandor_fxs/Params.h + sandor_fxs/Pattern.h + sandor_fxs/PatternMapParam.h + sandor_fxs/PatternPosition.h + sandor_fxs/SDef.h + sandor_fxs/SDirection.h + sandor_fxs/SError.h + sandor_fxs/STColSelPic.h + sandor_fxs/STPic.h + sandor_fxs/YOMBInputParam.h + sandor_fxs/YOMBParam.h + sandor_fxs/blend.h + sandor_fxs/calligraph.h + sandor_fxs/patternmap.h + sandor_fxs/toonz4_6staff.h + ../include/convert2tlv.h + ../include/orientation.h + ../include/toonz/Naa2TlvConverter.h + ../include/toonz/autoclose.h + ../include/toonz/boardsettings.h ../include/toonz/captureparameters.h ../include/toonz/childstack.h ../include/toonz/cleanupcolorstyles.h - cleanupcommon.h - cleanuppalette.h ../include/toonz/cleanupparameters.h ../include/toonz/columnfan.h ../include/toonz/controlpointobserver.h @@ -16,7 +79,6 @@ set(MOC_HEADERS ../include/toonz/doubleparamcmd.h ../include/toonz/dpiscale.h ../include/toonz/fill.h - ../include/toonz/fullcolorpalette.h ../include/toonz/fxcommand.h ../include/toonz/fxdag.h ../include/toonz/glrasterpainter.h @@ -33,39 +95,21 @@ set(MOC_HEADERS ../include/toonz/levelset.h ../include/toonz/levelupdater.h ../include/toonz/logger.h - ../include/toonz/movierenderer.h - ../include/toonz/multimediarenderer.h ../include/toonz/mypaint.h - ../include/toonz/mypainthelpers.hpp ../include/toonz/mypaintbrushstyle.h + ../include/toonz/mypainthelpers.hpp ../include/toonz/namebuilder.h - ../include/toonz/Naa2TlvConverter.h ../include/toonz/observer.h ../include/toonz/onionskinmask.h ../include/toonz/palettecmd.h - ../include/toonz/palettecontroller.h ../include/toonz/plasticdeformerfx.h - ../include/toonz/preferences.h ../include/toonz/rasterbrush.h ../include/toonz/rasterstrokegenerator.h ../include/toonz/scenefx.h ../include/toonz/sceneproperties.h ../include/toonz/sceneresources.h ../include/toonz/screensavermaker.h - ../include/toonz/scriptbinding.h - ../include/toonz/scriptbinding_centerline_vectorizer.h - ../include/toonz/scriptbinding_files.h - ../include/toonz/scriptbinding_image.h - ../include/toonz/scriptbinding_image_builder.h - ../include/toonz/scriptbinding_level.h - ../include/toonz/scriptbinding_outline_vectorizer.h - ../include/toonz/scriptbinding_rasterizer.h - ../include/toonz/scriptbinding_renderer.h - ../include/toonz/scriptbinding_scene.h - ../include/toonz/scriptbinding_toonz_raster_converter.h - ../include/toonz/scriptengine.h ../include/toonz/skeleton.h - skeletonlut.h ../include/toonz/stage.h ../include/toonz/stage2.h ../include/toonz/stageobjectutil.h @@ -73,30 +117,22 @@ set(MOC_HEADERS ../include/toonz/stagevisitor.h ../include/toonz/studiopalette.h ../include/toonz/studiopalettecmd.h - ../include/toonz/stylemanager.h ../include/toonz/tapplication.h ../include/toonz/targetcolors.h + ../include/toonz/tbinarizer.h ../include/toonz/tcamera.h - ../include/toonz/tcenterlinevectorizer.h - tcenterlinevectP.h ../include/toonz/tcleanupper.h ../include/toonz/tcolumnfx.h ../include/toonz/tcolumnfxset.h - ../include/toonz/tcolumnhandle.h ../include/toonz/tdistort.h - ../include/toonz/tframehandle.h - ../include/toonz/tfxhandle.h + ../include/toonz/textureutils.h ../include/toonz/tlog.h - ../include/toonz/tobjecthandle.h - ../include/toonz/tonionskinmaskhandle.h ../include/toonz/toonzfolders.h ../include/toonz/toonzimageutils.h ../include/toonz/toonzscene.h ../include/toonz/tpinnedrangeset.h - ../include/toonz/tpalettehandle.h ../include/toonz/tproject.h ../include/toonz/trasterimageutils.h - ../include/toonz/tscenehandle.h ../include/toonz/tstageobject.h ../include/toonz/tstageobjectcmd.h ../include/toonz/tstageobjectid.h @@ -111,56 +147,21 @@ set(MOC_HEADERS ../include/toonz/txshcolumn.h ../include/toonz/txsheet.h ../include/toonz/txsheetexpr.h - ../include/toonz/txsheethandle.h - ../include/toonz/txshlevel.h ../include/toonz/txshlevelcolumn.h - ../include/toonz/txshlevelhandle.h ../include/toonz/txshleveltypes.h + ../include/toonz/txshmeshcolumn.h ../include/toonz/txshnoteset.h ../include/toonz/txshpalettecolumn.h ../include/toonz/txshpalettelevel.h - ../include/toonz/txshsimplelevel.h - ../include/toonz/txshsoundcolumn.h ../include/toonz/txshsoundlevel.h ../include/toonz/txshsoundtextcolumn.h ../include/toonz/txshsoundtextlevel.h + ../include/toonz/txshzeraryfxcolumn.h ../include/toonz/txshzeraryfxlevel.h ../include/toonz/vectorizerparameters.h - ../include/toonz/txshzeraryfxcolumn.h - ../include/toonz/tbinarizer.h - ../include/toonz/txshmeshcolumn.h - ../include/toonz/textureutils.h ../include/toutputproperties.h - xshhandlemanager.h - sandor_fxs/blend.h - sandor_fxs/BlurMatrix.h - sandor_fxs/CallCircle.h - sandor_fxs/calligraph.h - sandor_fxs/CallParam.h - sandor_fxs/CIL.h - sandor_fxs/EraseContour.h - sandor_fxs/InputParam.h - sandor_fxs/Params.h - sandor_fxs/Pattern.h - sandor_fxs/patternmap.h - sandor_fxs/PatternMapParam.h - sandor_fxs/PatternPosition.h - sandor_fxs/SDef.h - sandor_fxs/SDirection.h - sandor_fxs/SError.h - sandor_fxs/STColSelPic.h - sandor_fxs/STPic.h - sandor_fxs/toonz4_6staff.h - sandor_fxs/YOMBInputParam.h - sandor_fxs/YOMBParam.h - texturemanager.h - imagebuilders.h - ../include/orientation.h - ../include/toonz/boardsettings.h ) -set(HEADERS ${MOC_HEADERS}) - set(SOURCES autoadjust.cpp autoclose.cpp diff --git a/toonz/sources/toonzlib/Naa2TlvConverter.cpp b/toonz/sources/toonzlib/Naa2TlvConverter.cpp index 7e610b1..239516f 100644 --- a/toonz/sources/toonzlib/Naa2TlvConverter.cpp +++ b/toonz/sources/toonzlib/Naa2TlvConverter.cpp @@ -477,7 +477,7 @@ void Naa2TlvConverter::findMainInks() { double ap2 = 100000.0 * (double)region.pixelCount / pow((double)region.perimeter, 2); if (ap2 > 100) continue; - foreach (int c, region.links.keys()) { + for (int c : region.links.keys()) { if (c >= 0 && (m_regions[c].isBackground() || m_regions[c].type == RegionInfo::LargePaint)) { int strength = region.links[c]; @@ -567,7 +567,7 @@ void Naa2TlvConverter::findPaints() { for (int i = 0; i < m_regions.count(); i++) { RegionInfo ®ion = m_regions[i]; if (region.type != RegionInfo::Unknown) continue; - foreach (int c, m_regions[i].links.keys()) { + for (int c : m_regions[i].links.keys()) { if (c >= 0 && m_regions[c].isInk()) { m_regions[i].type = RegionInfo::Paint; break; @@ -630,7 +630,7 @@ void Naa2TlvConverter::findThinPaints() { if (inkBoundary * 100 > region.perimeter * 80) regions.append(i); } - foreach (int c, regions) + for (int c : regions) m_regions[c].type = RegionInfo::SmallPaint; } diff --git a/toonz/sources/toonzlib/imagepainter.cpp b/toonz/sources/toonzlib/imagepainter.cpp index e624282..77badcf 100644 --- a/toonz/sources/toonzlib/imagepainter.cpp +++ b/toonz/sources/toonzlib/imagepainter.cpp @@ -425,7 +425,10 @@ void Painter::doFlushRasterImages(const TRasterP &rin, int bg, int lx = (m_imageSize.lx == 0 ? _rin->getLx() : m_imageSize.lx); int ly = (m_imageSize.ly == 0 ? _rin->getLy() : m_imageSize.ly); - TRect rect = convert(aff * TRectD(0, 0, lx - 1, ly - 1)); + TRect rect = convert(aff * TRectD(0, 0, lx - 1, ly - 1)); + // Image size is a 0 point. Do nothing + if (rect.x0 == rect.x1 && rect.y0 == rect.y1) return; + TRaster32P raux = ras->extract(rect); raux->fill(bg == 0x40000 ? TPixel::Black : TPixel::White); } diff --git a/toonz/sources/toonzlib/movierenderer.cpp b/toonz/sources/toonzlib/movierenderer.cpp index 1d8b306..30cd6e3 100644 --- a/toonz/sources/toonzlib/movierenderer.cpp +++ b/toonz/sources/toonzlib/movierenderer.cpp @@ -151,7 +151,7 @@ public: // Helper methods void prepareForStart(); - void addSoundtrack(int r0, int r1, double fps); + void addSoundtrack(int r0, int r1, double fps, int boardDuration = 0); void postProcessImage(const TRasterImageP &img, bool has64bitOutputSupport, const TRasterP &mark, int frame); @@ -162,7 +162,8 @@ public: const std::pair &rasters); std::string getRenderCacheId(); - void addBoard(); + // returns board duration in frame + int addBoard(); }; //--------------------------------------------------------- @@ -300,7 +301,8 @@ void MovieRenderer::Imp::prepareForStart() { //--------------------------------------------------------- -void MovieRenderer::Imp::addSoundtrack(int r0, int r1, double fps) { +void MovieRenderer::Imp::addSoundtrack(int r0, int r1, double fps, + int boardDuration) { TCG_ASSERT(r0 <= r1, return ); TXsheet::SoundProperties *prop = @@ -335,6 +337,10 @@ void MovieRenderer::Imp::addSoundtrack(int r0, int r1, double fps) { m_st = TSop::insertBlank(m_st, fromSample, numSample + m_whiteSample); m_st->copy(snd1, TINT32(fromSample + m_whiteSample)); + // insert blank sound for clapperboard + if (boardDuration > 0) + m_st = TSop::insertBlank(m_st, 0, TINT32(boardDuration * samplePerFrame)); + m_whiteSample = 0; } @@ -467,6 +473,8 @@ void MovieRenderer::Imp::doRenderRasterCompleted(const RenderData &renderData) { // Build soundtrack at the first time a frame is completed - and the filetype // is that of a movie. if (m_firstCompletedRaster && m_movieType && !m_st) { + int boardDuration = addBoard(); + int from, to; getRange(m_scene, false, from, to); @@ -478,15 +486,14 @@ void MovieRenderer::Imp::doRenderRasterCompleted(const RenderData &renderData) { addSoundtrack( from, to, - m_scene->getProperties()->getOutputProperties()->getFrameRate()); + m_scene->getProperties()->getOutputProperties()->getFrameRate(), + boardDuration); if (m_st) { m_levelUpdaterA->getLevelWriter()->saveSoundTrack(m_st.getPointer()); if (m_levelUpdaterB.get()) m_levelUpdaterB->getLevelWriter()->saveSoundTrack(m_st.getPointer()); } - - addBoard(); } // Output frames must be *cloned*, since the supplied rasters will be @@ -747,12 +754,12 @@ void MovieRenderer::Imp::onRenderFinished(bool isCanceled) { //--------------------------------------------------------- -void MovieRenderer::Imp::addBoard() { +int MovieRenderer::Imp::addBoard() { BoardSettings *boardSettings = m_scene->getProperties()->getOutputProperties()->getBoardSettings(); - if (!boardSettings->isActive()) return; + if (!boardSettings->isActive()) return 0; int duration = boardSettings->getDuration(); - if (duration == 0) return; + if (duration == 0) return 0; // Get the image size int shrinkX = m_renderSettings.m_shrinkX, shrinkY = m_renderSettings.m_shrinkY; @@ -777,6 +784,7 @@ void MovieRenderer::Imp::addBoard() { // Failure is reported. } } + return duration; } //====================================================================================== diff --git a/toonz/sources/toonzlib/scriptbinding_centerline_vectorizer.cpp b/toonz/sources/toonzlib/scriptbinding_centerline_vectorizer.cpp index 4750fbc..8ad805b 100644 --- a/toonz/sources/toonzlib/scriptbinding_centerline_vectorizer.cpp +++ b/toonz/sources/toonzlib/scriptbinding_centerline_vectorizer.cpp @@ -90,7 +90,7 @@ QScriptValue CenterlineVectorizer::vectorize(QScriptValue arg) { QScriptValue newLevel = create(engine(), new Level()); QList fids; level->getFrameIds(fids); - foreach (TFrameId fid, fids) { + for (const TFrameId &fid : fids) { TImageP srcImg = level->getImg(fid); if (srcImg && (srcImg->getType() == TImage::RASTER || srcImg->getType() == TImage::TOONZ_RASTER)) { diff --git a/toonz/sources/toonzlib/scriptbinding_level.cpp b/toonz/sources/toonzlib/scriptbinding_level.cpp index 4185bbb..20e8bab 100644 --- a/toonz/sources/toonzlib/scriptbinding_level.cpp +++ b/toonz/sources/toonzlib/scriptbinding_level.cpp @@ -342,7 +342,7 @@ QScriptValue Level::getFrameIds() { getFrameIds(fids); QScriptValue result = engine()->newArray(); quint32 index = 0; - foreach (TFrameId fid, fids) { + for (const TFrameId &fid : fids) { QString fidStr = QString::fromStdString(fid.expand()); result.setProperty(index++, fidStr); } diff --git a/toonz/sources/toonzlib/scriptbinding_outline_vectorizer.cpp b/toonz/sources/toonzlib/scriptbinding_outline_vectorizer.cpp index 9dfb454..a470b10 100644 --- a/toonz/sources/toonzlib/scriptbinding_outline_vectorizer.cpp +++ b/toonz/sources/toonzlib/scriptbinding_outline_vectorizer.cpp @@ -84,7 +84,7 @@ QScriptValue OutlineVectorizer::vectorize(QScriptValue arg) { QScriptValue newLevel = create(engine(), new Level()); QList fids; level->getFrameIds(fids); - foreach (TFrameId fid, fids) { + for (const TFrameId &fid : fids) { TImageP srcImg = level->getImg(fid); if (srcImg && (srcImg->getType() == TImage::RASTER || srcImg->getType() == TImage::TOONZ_RASTER)) { diff --git a/toonz/sources/toonzlib/scriptbinding_renderer.cpp b/toonz/sources/toonzlib/scriptbinding_renderer.cpp index db9b640..72d6eff 100644 --- a/toonz/sources/toonzlib/scriptbinding_renderer.cpp +++ b/toonz/sources/toonzlib/scriptbinding_renderer.cpp @@ -80,7 +80,7 @@ public: oldStatus.append(xsh->getColumn(i)->isPreviewVisible()); newStatus.append(false); } - foreach (int i, m_columnList) { + for (int i : m_columnList) { if (0 <= i && i < xsh->getColumnCount()) newStatus[i] = true; } for (int i = 0; i < newStatus.length(); i++) { diff --git a/toonz/sources/toonzqt/CMakeLists.txt b/toonz/sources/toonzqt/CMakeLists.txt index a7f227f..73f14e7 100644 --- a/toonz/sources/toonzqt/CMakeLists.txt +++ b/toonz/sources/toonzqt/CMakeLists.txt @@ -1,19 +1,23 @@ set(MOC_HEADERS + palettesscanpopup.h + pluginhost.h + stageobjectselection.h + tdockwindows.h ../include/toonzqt/addfxcontextmenu.h + ../include/toonzqt/camerasettingswidget.h ../include/toonzqt/checkbox.h + ../include/toonzqt/cleanupcamerasettingswidget.h ../include/toonzqt/colorfield.h - docklayout.h + ../include/toonzqt/combohistogram.h ../include/toonzqt/doublefield.h ../include/toonzqt/doublepairfield.h ../include/toonzqt/dvdialog.h - ../include/toonzqt/dvmimedata.h ../include/toonzqt/dvscrollwidget.h ../include/toonzqt/dvtextedit.h ../include/toonzqt/expressionfield.h ../include/toonzqt/filefield.h ../include/toonzqt/flipconsole.h ../include/toonzqt/framenavigator.h - ../include/toonzqt/freelayout.h ../include/toonzqt/functionkeyframenavigator.h ../include/toonzqt/functionpanel.h ../include/toonzqt/functionsegmentviewer.h @@ -22,13 +26,11 @@ set(MOC_HEADERS ../include/toonzqt/functiontoolbar.h ../include/toonzqt/functiontreeviewer.h ../include/toonzqt/functionviewer.h - fxdata.h ../include/toonzqt/fxhistogramrender.h ../include/toonzqt/fxschematicnode.h ../include/toonzqt/fxschematicscene.h ../include/toonzqt/fxselection.h ../include/toonzqt/fxsettings.h - ../include/toonzqt/fxtypes.h ../include/toonzqt/gutil.h ../include/toonzqt/histogram.h ../include/toonzqt/icongenerator.h @@ -38,69 +40,67 @@ set(MOC_HEADERS ../include/toonzqt/intpairfield.h ../include/toonzqt/keyframenavigator.h ../include/toonzqt/lineedit.h + ../include/toonzqt/marksbar.h ../include/toonzqt/menubarcommand.h - ../include/toonzqt/multipleselection.h - palettedata.h - palettesscanpopup.h ../include/toonzqt/paletteviewer.h ../include/toonzqt/paletteviewergui.h ../include/toonzqt/paramfield.h - ../include/toonzqt/planeviewer.h ../include/toonzqt/popupbutton.h - ../include/toonzqt/rasterimagedata.h - ../include/toonzqt/schematicnode.h ../include/toonzqt/schematicgroupeditor.h + ../include/toonzqt/schematicnode.h ../include/toonzqt/schematicviewer.h + ../include/toonzqt/screenboard.h ../include/toonzqt/scriptconsole.h - ../include/toonzqt/selectioncommandids.h - ../include/toonzqt/selection.h - stageobjectselection.h - ../include/toonzqt/stageobjectsdata.h ../include/toonzqt/spectrumfield.h ../include/toonzqt/spreadsheetviewer.h ../include/toonzqt/stageschematicnode.h ../include/toonzqt/stageschematicscene.h - ../include/toonzqt/strokesdata.h ../include/toonzqt/studiopaletteviewer.h - styledata.h ../include/toonzqt/styleeditor.h ../include/toonzqt/styleindexlineedit.h - ../include/toonzqt/styleselection.h + ../include/toonzqt/stylenameeditor.h ../include/toonzqt/swatchviewer.h ../include/toonzqt/tabbar.h - tdockwindows.h + ../include/toonzqt/tmessageviewer.h ../include/toonzqt/tonecurvefield.h ../include/toonzqt/treemodel.h ../include/toonzqt/tselectionhandle.h ../include/toonzqt/updatechecker.h ../include/toonzqt/validatedchoicedialog.h - ../include/toonzqt/viewcommandids.h - ../include/toonzqt/trepetitionguard.h - ../include/toonzqt/camerasettingswidget.h - ../include/toonzqt/cleanupcamerasettingswidget.h - ../include/toonzqt/pickrgbutils.h - ../include/toonzqt/screenboard.h - ../include/toonzqt/marksbar.h - ../include/toonzqt/tmessageviewer.h - ../include/toonzqt/stylenameeditor.h - ../include/historytypes.h - ../include/toonzqt/flipconsoleowner.h - ../include/toonzqt/combohistogram.h - ../include/toonzqt/fxiconmanager.h - ../include/toonzqt/glwidget_for_highdpi.h - ../include/toonzqt/lutcalibrator.h - pluginhost.h ) set(HEADERS ${MOC_HEADERS} ../include/tools/cursormanager.h + docklayout.h functionpaneltools.h + fxdata.h + palettedata.h + plugin_fxnode_interface.h + plugin_port_interface.h + plugin_tile_interface.h + styledata.h toonz_hostif.h toonz_plugin.h - plugin_tile_interface.h - plugin_port_interface.h - plugin_fxnode_interface.h + ../include/historytypes.h + ../include/toonzqt/dvmimedata.h + ../include/toonzqt/flipconsoleowner.h + ../include/toonzqt/freelayout.h + ../include/toonzqt/fxiconmanager.h + ../include/toonzqt/fxtypes.h + ../include/toonzqt/glwidget_for_highdpi.h + ../include/toonzqt/lutcalibrator.h + ../include/toonzqt/multipleselection.h + ../include/toonzqt/pickrgbutils.h + ../include/toonzqt/planeviewer.h + ../include/toonzqt/rasterimagedata.h + ../include/toonzqt/selection.h + ../include/toonzqt/selectioncommandids.h + ../include/toonzqt/stageobjectsdata.h + ../include/toonzqt/strokesdata.h + ../include/toonzqt/styleselection.h + ../include/toonzqt/trepetitionguard.h + ../include/toonzqt/viewcommandids.h ) set(SOURCES diff --git a/toonz/sources/toonzqt/dvdialog.cpp b/toonz/sources/toonzqt/dvdialog.cpp index e2b7081..ca87760 100644 --- a/toonz/sources/toonzqt/dvdialog.cpp +++ b/toonz/sources/toonzqt/dvdialog.cpp @@ -33,7 +33,7 @@ using namespace DVGui; -QString DialogTitle = QObject::tr("OpenToonz 1.2"); +QString DialogTitle = QObject::tr("OpenToonz 1.3"); //============================================================================= namespace { @@ -344,8 +344,7 @@ void Dialog::moveEvent(QMoveEvent *e) { void Dialog::resizeEvent(QResizeEvent *e) { if (Preferences::instance()->getCurrentLanguage() != "English") { QSize t = this->size(); - QLabel *s; - foreach (s, m_labelList) + for (QLabel *s : m_labelList) s->setFixedWidth(t.width() * .35); } diff --git a/toonz/sources/toonzqt/dvtextedit.cpp b/toonz/sources/toonzqt/dvtextedit.cpp index 14d8c0e..59d6a30 100644 --- a/toonz/sources/toonzqt/dvtextedit.cpp +++ b/toonz/sources/toonzqt/dvtextedit.cpp @@ -208,7 +208,7 @@ void DvTextEdit::createMiniToolBar() { m_sizeComboBox->setMinimumWidth(44); QFontDatabase db; - foreach (int size, db.standardSizes()) + for (int size : db.standardSizes()) m_sizeComboBox->addItem(QString::number(size)); connect(m_sizeComboBox, SIGNAL(activated(const QString &)), this, diff --git a/toonz/sources/toonzqt/freelayout.cpp b/toonz/sources/toonzqt/freelayout.cpp index b04bb84..720b769 100644 --- a/toonz/sources/toonzqt/freelayout.cpp +++ b/toonz/sources/toonzqt/freelayout.cpp @@ -2,8 +2,7 @@ #include "toonzqt/freelayout.h" -// tcg includes -#include "tcg/tcg_deleter_types.h" +#include //************************************************************************************ // DummyLayout implementation @@ -14,7 +13,7 @@ DummyLayout::DummyLayout() { setSizeConstraint(QLayout::SetNoConstraint); } //--------------------------------------------------------------------------- DummyLayout::~DummyLayout() { - std::for_each(m_items.begin(), m_items.end(), tcg::deleter()); + std::for_each(m_items.begin(), m_items.end(), std::default_delete()); } //--------------------------------------------------------------------------- diff --git a/toonz/sources/toonzqt/gutil.cpp b/toonz/sources/toonzqt/gutil.cpp index 8c5e4c9..6e32a86 100644 --- a/toonz/sources/toonzqt/gutil.cpp +++ b/toonz/sources/toonzqt/gutil.cpp @@ -387,7 +387,7 @@ bool isResourceOrFolder(const QUrl &url) { bool acceptResourceDrop(const QList &urls) { int count = 0; - foreach (const QUrl &url, urls) { + for (const QUrl &url : urls) { if (isResource(url)) ++count; else @@ -401,7 +401,7 @@ bool acceptResourceDrop(const QList &urls) { bool acceptResourceOrFolderDrop(const QList &urls) { int count = 0; - foreach (const QUrl &url, urls) { + for (const QUrl &url : urls) { if (isResourceOrFolder(url)) ++count; else diff --git a/toonz/sources/toonzqt/lutcalibrator.cpp b/toonz/sources/toonzqt/lutcalibrator.cpp index 3eed8b4..fec60f8 100644 --- a/toonz/sources/toonzqt/lutcalibrator.cpp +++ b/toonz/sources/toonzqt/lutcalibrator.cpp @@ -321,10 +321,10 @@ void LutCalibrator::onEndDraw(QOpenGLFramebufferObject* fbo) { GLuint textureId = fbo->texture(); glEnable(GL_TEXTURE_2D); - glActiveTexture(GL_TEXTURE4); + glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, textureId); - glActiveTexture(GL_TEXTURE5); + glActiveTexture(GL_TEXTURE2); m_lutTex->bind(); glPushMatrix(); @@ -332,9 +332,9 @@ void LutCalibrator::onEndDraw(QOpenGLFramebufferObject* fbo) { m_shader.program->bind(); m_shader.program->setUniformValue(m_shader.texUniform, - 4); // use texture unit 4 + 1); // use texture unit 1 m_shader.program->setUniformValue(m_shader.lutUniform, - 5); // use texture unit 5 + 2); // use texture unit 2 GLfloat size = (GLfloat)LutManager::instance()->meshSize(); m_shader.program->setUniformValue(m_shader.lutSizeUniform, size, size, size); @@ -355,6 +355,8 @@ void LutCalibrator::onEndDraw(QOpenGLFramebufferObject* fbo) { m_shader.program->release(); glPopMatrix(); + + glActiveTexture(GL_TEXTURE0); // reset the active texture unit to 0 glDisable(GL_TEXTURE_2D); assert((glGetError()) == GL_NO_ERROR); diff --git a/toonz/sources/toonzqt/paramfield.cpp b/toonz/sources/toonzqt/paramfield.cpp index 3c1f114..1b746fb 100644 --- a/toonz/sources/toonzqt/paramfield.cpp +++ b/toonz/sources/toonzqt/paramfield.cpp @@ -1578,8 +1578,7 @@ void FontParamField::findStyles(const QFont &font) { QString currentItem = m_styleCombo->currentText(); m_styleCombo->clear(); - QString style; - foreach (style, fontDatabase.styles(font.family())) + for (const QString &style : fontDatabase.styles(font.family())) m_styleCombo->addItem(style); int styleIndex = m_styleCombo->findText(currentItem); diff --git a/toonz/sources/translations/chinese/tnztools.ts b/toonz/sources/translations/chinese/tnztools.ts index 407a733..ee3e4ce 100644 --- a/toonz/sources/translations/chinese/tnztools.ts +++ b/toonz/sources/translations/chinese/tnztools.ts @@ -1206,7 +1206,7 @@ Do you want to proceed? Modify Savebox - 修改保险框 + 修改保险框 @@ -1347,30 +1347,30 @@ Do you want to proceed? Scale - 缩放 + 缩放 Position - 位置 + 位置 ShiftTraceToolOptionBox Reset Previous - + 重置前面的 Reset Following - + 重置后面的 Previous Drawing - + 前面的绘图 Following Drawing - + 后面的绘图 @@ -1455,47 +1455,47 @@ moved to the end of the first page of the palette. ToonzRasterBrushTool Size - 大小 + 大小 Hardness: - 硬度: + 硬度: Smooth: - 平滑: + 平滑: Draw Order: - 绘制顺序: + 绘制顺序: Over All - 在最上 + 在最上 Under All - 在最下 + 在最下 Palette Order - 按调色板顺序 + 按调色板顺序 Preset: - 预设: + 预设: <custom> - <定制> + <定制> Pencil - 铅笔 + 铅笔 Pressure - 压感 + 压感 diff --git a/toonz/sources/translations/chinese/toonz.ts b/toonz/sources/translations/chinese/toonz.ts index a7a7bcd..9dffda3 100644 --- a/toonz/sources/translations/chinese/toonz.ts +++ b/toonz/sources/translations/chinese/toonz.ts @@ -377,86 +377,86 @@ Stop it or wait for its completion before removing it. BoardSettingsPopup Clapperboard Settings - + 场记板设定 Load Preset - + 加载预设 Save as Preset - + 保存为预设 Close - 关闭 + 关闭 Duration (frames): - + 长度 (帧数): Text - + 文本 Project name - + 项目名称 Scene name - + 场景名称 Duration : Frame - + 长度 : 帧 Duration : Sec + Frame - + 长度 : 秒 + 帧 Duration : HH:MM:SS:FF - + 长度 : HH:MM:SS:FF Current date - + 当前日期 Current date and time - + 当期日期和时间 User name - + 用户名 Scene location : Aliased path - + 场景位置 : 别名路径 Scene location : Full path - + 场景位置 : 完整路径 Output location : Aliased path - + 输出位置 : 别名路径 Output location : Full path - + 输出位置 : 完整路径 Image - + 图像 BoardView Please set the duration more than 0 frame first, or the clapperboard settings will not be saved in the scene at all! - + 请先把长度设置为多于 0 帧,否则场记板的设置不能在场景里保存! @@ -2357,21 +2357,24 @@ contain the dpi information, then the current camera dpi will be used. Click to Reset Shift & Trace Markers to Neighbor Frames Hold F2 Key on the Viewer to Show This Frame Only - + 点击以重置位移和临摹的标记到相邻的帧 +在查看器中按下 F2 键只显示此帧 Click to Hide This Frame from Shift & Trace Hold F1 Key on the Viewer to Show This Frame Only - + 点击以隐藏此帧在位移和临摹的显示 +在查看器中按下 F1 键只显示此帧 Click to Hide This Frame from Shift & Trace Hold F3 Key on the Viewer to Show This Frame Only - + 点击以隐藏此帧在位移和临摹中的显示 +在查看器中按下 F3 键只显示此帧 Click to Move Shift & Trace Marker - + 点击以移动位移和临摹标记 @@ -2643,70 +2646,70 @@ Do you want to overwrite it? ItemInfoView Bold - + 粗体 Italic - + 斜体 Ignore - + 忽略 Keep - + 保留 Name: - 名称: + 名称: Type: - 类型: + 类型: Path: - 路径: + 路径: Aspect Ratio: - + 长宽比: Font: - + 字体: Max Size: - + 最大尺寸: No item selected. - + 无项目被选上. Item - + 项目 ItemListView Add - 添加 + 添加 Remove - + 删除 Move Up - + 向上移 Move Down - + 向下移 @@ -3211,7 +3214,7 @@ Please use the frame numbers for reference. LoadBoardPresetFilePopup Load Clapperboard Settings Preset - + 加载场记板预设 @@ -5397,47 +5400,47 @@ Please use the frame numbers for reference. &Timeline - + 时间轴(&T) Linear Interpolation - + 线性插值 Speed In / Speed Out Interpolation - + 速入/速出插值 Ease In / Ease Out Interpolation - + 缓入/缓出插值 Ease In / Ease Out (%) Interpolation - + 缓入/缓出 (%) 插值 Exponential Interpolation - + 指数插值 Expression Interpolation - + 表达式插值 File Interpolation - + 文件方式插值 Constant Interpolation - + 常数插值 Separate Colors... - + 分离颜色... Flip Viewer Horizontally - + 水平翻转查看器 @@ -6020,11 +6023,11 @@ What do you want to do? Add Clapperboard - + 添加场记板 Edit Clapperboard... - + 编辑场记板... Save current output settings. @@ -6035,7 +6038,14 @@ The parameters to be saved are: - File options - Resample Balance - Channel width - + 保存当前输出设定. +被保存的参数有: +--摄影机设定 +--用来保存的项目文件夹 +--文件格式 +--文件选项 +--重采样平衡 +通道宽度 @@ -7594,52 +7604,52 @@ Also the initial output destination for new scenes will be set to $scenefolder a Saving - + 保存 Use Onion Skin Colors for Reference Drawings of Shift and Trace - + 使用洋葱皮颜色显示位移和临摹的参考绘图 Tablet Settings - + 绘图板设定 Enable Windows Ink Support* (EXPERIMENTAL) - + 打开 Windows Ink 支持* (试验功能) Constant - + 常数 Exponential - + 指数 Expression - + 表达式 File - 文件 + 文件方式 Style *: - + 样式*: Matte color is used for background when overwriting raster levels with transparent pixels in non alpha-enabled image format. - + 当覆写带透明像素,非透明通道打开的图像格式的光栅层级时,使用不透明颜色做背景。 Matte color: - + Current Column Color: - + 当前列的颜色: @@ -8979,19 +8989,19 @@ Are you sure to Inbetween : Level %1, - 过渡帧 : 层级 %1 + 过渡帧 : 层级 %1 Paste Column : - 粘贴列 : + 粘贴列 : Delete Column : - 删除列 : + 删除列 : Insert Column : - 插入列 : + 插入列 : Resequence : Col%1 @@ -9297,7 +9307,7 @@ What would you like to do? Anyway - 不管 + 不管 This scene is incompatible with pixels only mode of the current OpenToonz version. @@ -9540,64 +9550,65 @@ Allow duplicate? Couldn't load %1 - + 不能加载%1 Apply Antialias - 应用消除锯齿 + 应用消除锯齿 The Reload command is not supported for the current selection. - + 重载命令不支持当前的选择。 Error - + 错误 No Palette loaded. - + 无调色板被加载。 A separation task is in progress! wait until it stops or cancel it - + 另外一个任务在处理中!等待直到它停止或被取消 Duplicate Frame in XSheet - + 在摄影表复制帧 Please enable "Sync Level Strip Drawing Number Changes with the XSheet" preference option to use the duplicate command in the xsheet / timeline. - + 要在摄影表/时间轴上使用复制命令, +请启用“与摄影表同步层级条绘图编号的变动”首选项。 Please select only one layer to duplicate a frame. - + 请只选一个层来复制一个帧。 Please select only one frame to duplicate. - + 请只选择一个帧来复制。 Timeline - + 时间轴 The qualifier %1 is not a valid key name. Skipping. - + 修饰符 %1 不是有效的键名。跳过。 Clear All Onion Skin Markers - + 清理全部洋葱皮标记器 Clear All Fixed Onion Skin Markers - + 清理全部固定的洋葱皮标记器 Clear All Relative Onion Skin Markers - + 清理全部相关的洋葱皮标记器 @@ -10345,7 +10356,7 @@ The audio file will not be included in the rendered clip. SVNTimeline Version Control: Timeline - 版本控制: 时间轴 + 版本控制: 时间轴 Getting file history... @@ -10506,7 +10517,7 @@ The audio file will not be included in the rendered clip. Get And Edit - 获取并编辑 + 获取并编辑 Edit @@ -10594,7 +10605,7 @@ Please commit or revert changes first. SaveBoardPresetFilePopup Save Clapperboard Settings As Preset - + 保存场记板设定为预设 @@ -11007,166 +11018,166 @@ Please commit or revert changes first. SeparateColorsPopup Auto - 自动 + 自动 Preview - 预览 + 预览 Separate - + 分离 Close - 关闭 + 关闭 Sub Color 3: - + 子颜色3: Alpha Matting - + 透明度抠图 Main - + Sub1 - + 子1 Sub2 - + 子2 Sub3 - + 子3 Pick Color - + 拾取颜色 Show Mask - + 显示遮罩 Show Alpha - + 显示透明度 Preview Frame: - + 上一帧: Paper Color: - + 纸张颜色: Main Color: - + 主颜色: Sub Color 1: - + 子颜色1: Sub Color 2: - + 子颜色2: Sub Adjust: - + 子调整: Border Smooth: - + 边框平滑: Mask Threshold: - + 遮罩阀值: Mask Radius: - + 遮罩半径: Start: - 开始: + 开始: End: - + 结束: Format: - 格式: + 格式: Save in: - 保存位置: + 保存位置: File Suffix: - + 文件后缀: Cancel - 取消 + 取消 Separate by colors ... - + 按颜色分离 ... Separate 1 Level - + 分离1层级 Separate %1 Levels - + 分离 %1 层级 Critical - + 紧急 Failed to access the destination folder! - + 访问目标文件夹失败! Separating %1 - + 正在分离 %1 Converting level %1 of %2: %3 - %1 / %2 正在转换层级: %3 + %1 / %2 正在转换层级: %3 SeparateSwatch Sub Color 3 - + 子颜色3 Original - + Main Color - + 主颜色 Sub Color 1 - + 子颜色1 Sub Color 2 - + 子颜色2 @@ -12625,7 +12636,7 @@ Please refer to the user guide for details. Opacity: - + 不透明性: @@ -12648,19 +12659,19 @@ Please refer to the user guide for details. Toggle Xsheet/Timeline - + 开关摄影表/时间轴 Add New Memo - + 添加新备忘 Previous Memo - + 前一个备忘 Next Memo - + 下一个备忘 @@ -12739,28 +12750,31 @@ Please refer to the user guide for details. Click to Reset Shift & Trace Markers to Neighbor Frames Hold F2 Key on the Viewer to Show This Frame Only - + 点击以重置位移和临摹的标记为相邻的帧 +在查看器中按下 F2 键只显示此帧 Click to Hide This Frame from Shift & Trace Hold F1 Key on the Viewer to Show This Frame Only - + 点击以隐藏此帧在位移和临摹中的显示 +在查看器中按下 F1 键只显示此帧 Click to Hide This Frame from Shift & Trace Hold F3 Key on the Viewer to Show This Frame Only - + 点击以隐藏此帧在位移和临摹中的显示 +在查看器中按下 F3 键只显示此帧 Click to Move Shift & Trace Marker - + 点击以移动位移和临摹的标记 XsheetGUI::SoundColumnPopup Volume: - + 音量: diff --git a/toonz/sources/translations/chinese/toonzlib.ts b/toonz/sources/translations/chinese/toonzlib.ts index e5a1dd9..4867d67 100644 --- a/toonz/sources/translations/chinese/toonzlib.ts +++ b/toonz/sources/translations/chinese/toonzlib.ts @@ -400,7 +400,7 @@ Paste Fx : - 粘贴特效 : + 粘贴特效 : Disconnect Fx diff --git a/toonz/sources/translations/chinese/toonzqt.ts b/toonz/sources/translations/chinese/toonzqt.ts index 715e6f1..5266c5d 100644 --- a/toonz/sources/translations/chinese/toonzqt.ts +++ b/toonz/sources/translations/chinese/toonzqt.ts @@ -523,7 +523,7 @@ Possibly the preset file has been corrupted FlipConsole FPS - FPS + FPS Save @@ -706,11 +706,11 @@ Possibly the preset file has been corrupted FontParamField Style: - + 样式: Size: - + 大小: @@ -1226,7 +1226,7 @@ Possibly the preset file has been corrupted FxSchematicOutputNode Output - 输出 + 输出 @@ -1265,7 +1265,7 @@ Select FX nodes and related links before copying or cutting the selection you wa FxSchematicXSheetNode XSheet - 摄影表 + 摄影表 @@ -1494,7 +1494,7 @@ Select FX nodes and related links before copying or cutting the selection you wa Level Palette: - 层级调色板: + 层级调色板: Cleanup Palette @@ -1682,7 +1682,8 @@ Select FX nodes and related links before copying or cutting the selection you wa Styles you are going to delete are used to paint lines and areas in the animation level. - 您要删除的样式已经用于动画层级的线和区域。 + 您要删除的样式已经用于绘制动画层级的线和区域。 + How do you want to proceed? @@ -1786,75 +1787,75 @@ Select FX nodes and related links before copying or cutting the selection you wa Fullpath: - 完整路径: + 完整路径: File Type: - 文件类型: + 文件类型: Frames: - 帧: + 帧: Owner: - 所有者: + 所有者: Size: - 大小: + 大小: Created: - 创建于: + 创建于: Modified: - 修改于: + 修改于: Last Access: - 最近访问于: + 最近访问于: Image Size: - 图像大小: + 图像大小: SaveBox: - 保存框: + 保存框: Bits/Sample: - 色深: + 色深: Sample/Pixel: - 通道数量: + 通道数量: Dpi: - DPI: + DPI: Orientation: - 方向: + 方向: Compression: - 压缩: + 压缩: Quality: - 画质: + 画质: Smoothing: - 平滑: + 平滑: Codec: - 编码器: + 编码器: Alpha Channel: @@ -1878,27 +1879,27 @@ Select FX nodes and related links before copying or cutting the selection you wa Camera Size: - 摄影机大小: + 摄影机大小: Camera Dpi: - 摄影机 DPI: + 摄影机 DPI: Number of Frames: - 帧数: + 帧数: Number of Levels: - 层级数: + 层级数: Output Path: - 输出路径: + 输出路径: Endianess: - 字节次序: + 字节次序: It is not possible to delete the style # @@ -1922,19 +1923,19 @@ Select FX nodes and related links before copying or cutting the selection you wa Length: - 长度: + 长度: Channels: - 通道: + 通道: Sample Rate: - 采样率: + 采样率: Sample Size: - 采样大小: + 采样大小: The file %1 does not exist. @@ -2262,7 +2263,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< &Toggle node icons - + 开关节点图标(&T) @@ -2544,11 +2545,11 @@ Apply Generated - 已生成 + 已生成的 Trail - + 轨迹 Color diff --git a/toonz/sources/translations/russian/tnztools.ts b/toonz/sources/translations/russian/tnztools.ts index cdbc188..4cfca50 100644 --- a/toonz/sources/translations/russian/tnztools.ts +++ b/toonz/sources/translations/russian/tnztools.ts @@ -8,14 +8,14 @@ E/W: запад/восток - X: + E/W: N/S: север/юг - Y: + N/S: @@ -101,7 +101,7 @@ Table - + Стол @@ -159,7 +159,7 @@ <custom> - <пользовательский> + <пользовательская> @@ -183,7 +183,7 @@ Join - Соединение + Изгиб @@ -213,17 +213,20 @@ In - Вход + <<-< + Замедл. в начале Out - Выход + <-<< + Замедл. в конце In&Out - Вход и &выход + <<-<< + В начале &в конце @@ -243,32 +246,32 @@ Butt cap - + Обрубок Round cap - + Закругленный Projecting cap - + Плоский колпачок Miter join - + Острый изгиб Round join - + Закругленный изгиб Bevel join - + Скошенный изгиб @@ -334,12 +337,12 @@ A/R - + A/R Mass - + Масса @@ -354,7 +357,7 @@ Pegbar - + Pegbar @@ -516,13 +519,13 @@ Normal - Обычное + Обычный Rectangular - Прямоугольное + Прямоугольный @@ -582,12 +585,12 @@ Normal - Обычное + Обычная Rectangular - Прямоугольное + Прямоугольная @@ -647,7 +650,7 @@ Autopaint Lines - Автодоводка линий + Автозаливка линий @@ -705,7 +708,7 @@ <custom> - <пользовательский> + <пользовательская> @@ -733,12 +736,12 @@ Normal - Обычное + Обычный Rectangular - Прямоугольное + Прямоугольный @@ -833,7 +836,7 @@ Swap Edge - Поменять ребро + Переставить ребро (изменить топологию) @@ -950,7 +953,7 @@ A group of skeletons already exists for current column. Replacing it will also substitute any existing vertex animation. Do you want to continue? - Группа скелетов уже существует для текущего столбца. Замена его также заменит любую существующую анимацию вершин. + Скелетная группа уже существует для текущего столбца. Замена его также заменит любую существующую анимацию вершин. Вы хотите продолжить? @@ -1129,37 +1132,37 @@ Do you want to proceed? Butt cap - + Обрубок Round cap - + Закругленный Projecting cap - + Плоский колпачок Join - Соединение + Изгиб Miter join - + Острый изгиб Round join - + Закругленный изгиб Bevel join - + Скошенный изгиб @@ -1234,7 +1237,7 @@ Do you want to proceed? Move Center - Переместить Центр + Переместить центр @@ -1325,7 +1328,7 @@ Do you want to proceed? Note columns can only be edited in the xsheet or timeline. - Столбцы заметок можно редактировать только в XSheet или на временной шкале. + Столбцы заметок можно редактировать только в Xsheet или на временной шкале. @@ -1420,12 +1423,12 @@ Do you want to proceed? Normal - Обычный + Обычная Rectangular - Прямоугольное + Прямоугольная @@ -1479,12 +1482,12 @@ Do you want to proceed? Normal - Обычное + Обычный Rectangular - Прямоугольное + Прямоугольный @@ -1579,7 +1582,7 @@ Do you want to proceed? Rectangular - Прямоугольное + Прямоугольный @@ -1628,12 +1631,12 @@ Do you want to proceed? Scale - Масштаб + Масштаб Position - Положение + Положение @@ -1646,22 +1649,22 @@ Do you want to proceed? Reset Previous - + Сбросить изменения Reset Following - + Сбросить изменения Previous Drawing - + Предыдущий рисунок Following Drawing - + Следующий рисунок @@ -1765,58 +1768,58 @@ moved to the end of the first page of the palette. Size - Размер + Размер Hardness: - Жесткость: + Жесткость: Smooth: - Плавность: + Плавность: Draw Order: - Порядок рисовки: + Порядок рисовки: Over All - Над всеми + Над всеми Under All - Под всеми + Под всеми Palette Order - Порядок палитры + Порядок палитры Preset: - Предустановка: + Предустановка: <custom> - <пользовательский> + <пользовательская> Pencil - Карандаш + Карандаш Pressure - Нажим + Нажим @@ -1930,37 +1933,37 @@ moved to the end of the first page of the palette. Butt cap - + Обрубок Round cap - + Закругленный Projecting cap - + Плоский колпачок Join - Соединение + Изгиб Miter join - + Острый изгиб Round join - + Закругленный изгиб Bevel join - + Скошенный изгиб @@ -1993,17 +1996,17 @@ moved to the end of the first page of the palette. Endpoint to Endpoint - От точки до точки + Вершина к вершине Endpoint to Line - От точки к линии + Вершина к линии Line to Line - От линии до линии + Линия к линии @@ -2013,12 +2016,12 @@ moved to the end of the first page of the palette. Normal - Обычное + Обычный Rectangular - Прямоугольное + Прямоугольный diff --git a/toonz/sources/translations/russian/toonz.ts b/toonz/sources/translations/russian/toonz.ts index 5a52677..6bf7471 100644 --- a/toonz/sources/translations/russian/toonz.ts +++ b/toonz/sources/translations/russian/toonz.ts @@ -59,7 +59,7 @@ Apply - + Применить @@ -133,12 +133,12 @@ It is not possible to apply the match lines because no column was selected. - Невозможно применить match lines, потому что не был выбран столбец. + Невозможно применить разделительные линии, потому что не был выбран столбец. It is not possible to apply the match lines because two columns have to be selected. - Невозможно применить match lines, потому что нужно выбрать два столбца. + Невозможно применить разделительные линии, потому что нужно выбрать два столбца. @@ -156,7 +156,7 @@ Sync with XSheet - Синхронизация с XSheet + Синхронизация с Xsheet @@ -210,13 +210,13 @@ pick up all frames in the selected level. from frame - + with - с + с @@ -232,7 +232,7 @@ pick up all frames in the selected level. to frame - + @@ -242,12 +242,12 @@ pick up all frames in the selected level. empty cell intervals - + интервал пустых ячеек cell steps - + шаг @@ -294,17 +294,17 @@ pick up all frames in the selected level. Process with: - Процесс с: + Обработать: Local - Локальный + Локально Render Farm - Рендер ферма + На рендер ферме @@ -349,7 +349,7 @@ pick up all frames in the selected level. In order to use the render farm you have to define the Farm Global Root first. - Чтобы использовать рендер ферму, сначала необходимо определить Farm Global Root. + Чтобы использовать рендер ферму, сначала необходимо определить корневую папку фермы. @@ -457,97 +457,97 @@ Do you want to save your changes? Clapperboard Settings - + Настройки хлопушки - нумератора Load Preset - + Загрузить Save as Preset - + Сохранить как предустановку Close - Закрыть + Закрыть Duration (frames): - + Длительность (кадры): Text - + Текст Project name - + Имя проекта Scene name - + Имя сцены Duration : Frame - + Длительность : Кадр Duration : Sec + Frame - + Длительность : Сек + Кадр Duration : HH:MM:SS:FF - + Длительность : часы:минуты:секунды:кадры Current date - + Текущая дата Current date and time - + Текущая дата и время User name - + Имя пользователя Scene location : Aliased path - + Местоположение сцены : относительный путь Scene location : Full path - + Местоположение сцены : абсолютный путь Output location : Aliased path - + Местоположение вывода : относительный путь Output location : Full path - + Местоположение вывода : абсолютный путь Image - + Изображение @@ -555,7 +555,7 @@ Do you want to save your changes? Please set the duration more than 0 frame first, or the clapperboard settings will not be saved in the scene at all! - + Пожалуйста, установите длительность более чем 0 кадров, иначе настройки хлопушки-нумератора не будут сохранены в сцене! @@ -696,7 +696,7 @@ Do you want to save your changes? pixel - пиксел + пиксель @@ -767,12 +767,12 @@ Do you want to crop the canvas? V Resolution - V Resolution + Вертик. разрешение H Resolution - H Resolution + Горизонт. разрешение @@ -912,7 +912,7 @@ Do you want to crop the canvas? Cancel - + Отмена @@ -937,7 +937,7 @@ Do you want to continue? Please choose to delete the existing level and create a new one when running the cleanup process. - Появились ошибки, открывающие существующий уровень «%1». + Появились ошибки с открытием уровня «%1». Пожалуйста, удалите существующий уровень и создайте новый при запуске процесса очистки. @@ -950,7 +950,7 @@ does not match with that of previously cleaned up level drawings. Please set the right camera resolution and closest field, or choose to delete the existing level and create a new one when running the cleanup process. Полученное разрешение уровня « %1» - не совпадает с разрешением ранее очищенных чертежей уровня. + не совпадает с разрешением ранее очищенных рисунков уровня. Установите правильное разрешение камеры и поля, или удалите существующий уровень и создайте новый при запуске процесса очистки. @@ -1001,7 +1001,7 @@ the existing level and create a new one when running the cleanup process. Cleanup only non-cleaned up drawings and keep those previously cleaned up.* - Очистите только не очищенные чертежи и сохраните ранее очищенные. * + Очистите только не очищенные рисунки и сохраните ранее очищенные. * @@ -1318,19 +1318,19 @@ What do you want to do? Keep the destination palette and apply it to the color model. - Сохранить палитру назначения и применить ее к цветовой модели. + Сохранить назначенную палитру и применить ее к цветовой модели. The color model palette is different from the destination palette. What do you want to do? - Палитра цветовой модели отличается от палитры назначения. + Палитра цветовой модели отличается от назначенной палитры. Что вы хотите сделать? Add color model's palette to the destination palette. - Добавить палитру цветовой модели в палитру назначения. + Добавить палитру цветовой модели в назначенную палитру. @@ -1345,12 +1345,12 @@ What do you want to do? Integrate Similar Colors as One Style - Интеграция похожих цветов в один стиль + Интеграция похожих цветов в один стиль Pick Colors in Color Chip Grid - + Выбрать цвет в сетке цветовых ячеек @@ -1370,7 +1370,7 @@ What do you want to do? Pick Type: - + Тип выбора: @@ -1385,7 +1385,7 @@ What do you want to do? Chip Order: - + Порядок цветовых ячеек: @@ -1393,7 +1393,7 @@ What do you want to do? Color Model - Цветная модель + Цветовая модель @@ -1403,7 +1403,7 @@ What do you want to do? Remove Color Model - Удалить цветную модель + Удалить цветовую модель @@ -1508,7 +1508,7 @@ What do you want to do? (Flipped) - + (Перевёрнутый) @@ -1542,42 +1542,42 @@ What do you want to do? XSheet Toolbar - + Панель инструментов Xsheet Customize XSheet Toolbar - Настроить панель инструментов Xsheet + Настроить панель инструментов Xsheet Command Bar - Панель команд + Панель команд Customize Command Bar - Настройка панели команд + Настройка панели команд OK - OK + OK Cancel - Отмена + Отмена Toolbar Items - + Элементы панели инструментов Duplicated commands will be ignored. Only the last one will appear in the menu bar. - + Дублированные команды будут игнорироваться. Только последняя появится в строке меню. @@ -1993,7 +1993,7 @@ contain the dpi information, then the current camera dpi will be used. Delete Lines - УДалить линии + Удалить линии @@ -2284,12 +2284,12 @@ contain the dpi information, then the current camera dpi will be used. H Resolution: - H Resolution: + Горизонт. разрешение: V Resolution: - V Resolution: + Вертик. разрешение: @@ -2777,24 +2777,27 @@ contain the dpi information, then the current camera dpi will be used. Click to Reset Shift & Trace Markers to Neighbor Frames Hold F2 Key on the Viewer to Show This Frame Only - + Нажмите, чтобы сбросить маркеры Shift & Trace для соседних кадров +Удерживайте клавишу F2 чтобы видеть только этот кадр Click to Hide This Frame from Shift & Trace Hold F1 Key on the Viewer to Show This Frame Only - + Нажмите, чтобы скрыть этот кадр из Shift & Trace +Удерживайте клавишу F1 чтобы видеть только этот кадр Click to Hide This Frame from Shift & Trace Hold F3 Key on the Viewer to Show This Frame Only - + Нажмите, чтобы скрыть этот кадр из Shift & Trace +Удерживайте клавишу F3 чтобы видеть только этот кадр Click to Move Shift & Trace Marker - + Нажмите, чтобы переместить маркер Shift & Trace @@ -3020,7 +3023,7 @@ Do you want to overwrite it? Inbetween промежуточные кадры - автофазовка + Автофазовка @@ -3030,17 +3033,17 @@ Do you want to overwrite it? Ease In - Ease In + Замедл. в начале Ease Out - Ease Out + Замедл. в конце Ease In / Ease Out - Ease In / Ease Out + Замедл. в начале/в конце @@ -3116,62 +3119,62 @@ Do you want to overwrite it? Bold - + Bold Italic - + Italic Ignore - + Игнорировать Keep - + Keep Name: - Имя: + Имя: Type: - Тип: + Тип: Path: - Путь: + Путь: Aspect Ratio: - + Aspect Ratio: Font: - + Шрифт: Max Size: - + Максимальный размер: No item selected. - + Нет выбранных элементов. Item - + Элемент @@ -3179,22 +3182,22 @@ Do you want to overwrite it? Add - Добавить + Добавить Remove - Удалить + Удалить Move Up - + Переместить вверх Move Down - + Переместить вниз @@ -3220,17 +3223,17 @@ Do you want to overwrite it? Preview Visbility Toggle All - + Переключить видимость Camera Stand Visibility Toggle All - Переключатель видимости камеры + Переключить видимость камеры Lock Toggle All - + Переключить замки @@ -3400,7 +3403,7 @@ Do you want to create it? Subsampling: - Субдискретизация: + Субсемплинг: @@ -3505,7 +3508,7 @@ Do you want to create it? Mesh level - Уровень меша + Уровень полисетки @@ -3665,12 +3668,12 @@ Do you want to create it? Color Fade - Color Fade + Спад цвета Fade: - Затухание: + Спад: @@ -3688,7 +3691,7 @@ Do you want to create it? Apply Lip Sync Data - Применить данные липсинк + Применить данные липсинг @@ -3785,7 +3788,7 @@ Please use the frame numbers for reference. SubXSheet Frame - + Кадр Sub-xsheet @@ -3805,7 +3808,7 @@ Please use the frame numbers for reference. Load Clapperboard Settings Preset - + Загрузить предустановку хлопушки-нумератора @@ -3958,7 +3961,7 @@ Please use the frame numbers for reference. Inc: ? - Inc: + Прирост: @@ -4344,7 +4347,7 @@ Please use the frame numbers for reference. &Import Magpie File... - &Импорт файла Magpie... + &Импортировать файл Magpie... @@ -4389,7 +4392,7 @@ Please use the frame numbers for reference. &Export Soundtrack - &Экспорт звуковой дорожки + &Экспортировать звуковую дорожку @@ -4429,7 +4432,7 @@ Please use the frame numbers for reference. &Save As Preset - &Сохранить как пресет + &Сохранить как предустановку @@ -4444,7 +4447,7 @@ Please use the frame numbers for reference. &Print Xsheet - &Экспорт Xsheet в HTML + &Экспортировать Xsheet в HTML @@ -4464,7 +4467,7 @@ Please use the frame numbers for reference. &Quit - &Выйти + &Выйти @@ -4523,7 +4526,7 @@ Please use the frame numbers for reference. &Merge - &Слияние + &Слить @@ -4703,7 +4706,7 @@ Please use the frame numbers for reference. Separate Colors... - + Разделить цвета... @@ -4722,12 +4725,12 @@ Please use the frame numbers for reference. &Paste Insert Above/After - + &Вставить копию спереди/сзади &Insert Above/After - + &Вставить пробел cпереди/сзади @@ -4772,7 +4775,7 @@ Please use the frame numbers for reference. &Color Fade... - &Color Fade... + &Спад цвета... @@ -4858,7 +4861,7 @@ Please use the frame numbers for reference. &Apply Match Lines... - &Применить Match Lines... + &Применить разделительные линии... @@ -4868,7 +4871,7 @@ Please use the frame numbers for reference. &Delete Match Lines - &Удалить Match Lines + &Удалить разделительные линии @@ -5099,13 +5102,12 @@ Please use the frame numbers for reference. &Safe Area - ?? &Безопасная зона &Camera BG Color - &Камера Цвет фона + &Цвет фона камеры @@ -5160,7 +5162,7 @@ Please use the frame numbers for reference. Shift and Trace - Сдвинуть и калькировать + Сдвинуть и калькировать (Shift and Trace) @@ -5200,12 +5202,12 @@ Please use the frame numbers for reference. Loop - Loop + По кругу Pause - Pause + Пауза @@ -5265,7 +5267,7 @@ Please use the frame numbers for reference. Flip Viewer Horizontally - + Отзеркалить горизонтально Matte Channel @@ -5359,7 +5361,7 @@ Please use the frame numbers for reference. &Color Model - &Цветная модель + &Цветовая модель @@ -5369,7 +5371,7 @@ Please use the frame numbers for reference. &Schematic - &Схемы + &Схема @@ -5419,7 +5421,7 @@ Please use the frame numbers for reference. &Timeline - + &Таймлайн @@ -5479,7 +5481,7 @@ Please use the frame numbers for reference. Toggle Cursor Size Outline - Переключить размер курсора контура + Переключить размер контура курсора @@ -5596,7 +5598,7 @@ Please use the frame numbers for reference. &Apply Lip Sync Data to Column - &Применить данные липсинка к столбцу + &Применить данные липсинга к столбцу @@ -5686,42 +5688,42 @@ Please use the frame numbers for reference. Linear Interpolation - + Линейная интерполяция Speed In / Speed Out Interpolation - + Интерполяция ускорения в начале/в конце Ease In / Ease Out Interpolation - + Интерполяция замедления в начале/в конце Ease In / Ease Out (%) Interpolation - + Интерполяция замедления в начале/в конце (%) Exponential Interpolation - + Экспоненциальная интерполяция Expression Interpolation - + Интерполяция выражений File Interpolation - + Интерполяция из файла Constant Interpolation - + Постоянная интерполяция @@ -6134,7 +6136,7 @@ Please use the frame numbers for reference. Snap - Snap + Привязка @@ -6149,7 +6151,7 @@ Please use the frame numbers for reference. Join Vectors - объединить векторы + Объединить векторы @@ -6159,7 +6161,7 @@ Please use the frame numbers for reference. Brush Preset - Пресет кисти + Предустановка кисти @@ -6209,7 +6211,7 @@ Please use the frame numbers for reference. Type - Freehand - Тип - от руки + Тип - От руки @@ -6342,22 +6344,22 @@ Please use the frame numbers for reference. Apply Match Lines - Применить Match Lines + Применить разделительные линии Add Match Line Inks - Добавить Macth Lines Inks + Добавить цвет разделительных линий Use Ink: - Использовать Ink: + Использовать цвет: Merge Inks - + Слить цвета @@ -6372,7 +6374,7 @@ Please use the frame numbers for reference. Ink Usage - Ink использование + Использование цвета @@ -6384,18 +6386,18 @@ Please use the frame numbers for reference. Merge Inks : If the target level has the same style as the match line ink (i.e. with the same index and the same color), the existing style will be used. Otherwise, a new style will be added to "match lines" page. - + Слить цвета: если целевой уровень имеет тот же стиль, что и цвет стиля разделительной линии +(то есть с тем же индексом и тем же цветом), будет использоваться существующий стиль. +В противном случае новый стиль будет добавлен на страницу «совпадение линий». L-Up R-Down - Левый-вверх Правый-вниз ?? L-Up R-Down L-Down R-Up - ... и здесь наоборот? L-Down R-Up @@ -6806,12 +6808,12 @@ What do you want to do? Add Clapperboard - + Добавить хлопушку-нумератор Edit Clapperboard... - + редактироапть хлопушку-нумератор... @@ -6833,7 +6835,7 @@ What do you want to do? None - Ничего + Нет @@ -6855,7 +6857,14 @@ The parameters to be saved are: - File options - Resample Balance - Channel width - + Сохранить текущие настройки вывода. +Параметры для сохранения: +- Настройки камеры +- Папка проекта для сохранения в +- Формат файла +- Параметры файла +- Баланс ресемплинга +- Ширина канала @@ -6895,12 +6904,11 @@ The parameters to be saved are: Output Camera: - Выходная камера: + Камера вывода: Frame Start: - ? Начальный кадр: @@ -6946,7 +6954,7 @@ The parameters to be saved are: Render Tile: - Render Tile: + Паттерн рендера: @@ -7653,12 +7661,12 @@ Set the output folder path to the subfolder as well. Blend - Blend + Однородно Fade - Затухание + Спад Full Matte @@ -7686,7 +7694,7 @@ Set the output folder path to the subfolder as well. Shift (value) - Shift (значение) + Сдвиг(значения) @@ -7701,7 +7709,7 @@ Set the output folder path to the subfolder as well. Hue - Hue + Оттенок @@ -7715,7 +7723,7 @@ Set the output folder path to the subfolder as well. Fade to Color - Fade to Color + Спад цвета @@ -7775,7 +7783,7 @@ Is it OK to release these shortcuts? Minimize Raster Memory Fragmentation * - Минимизировать фрагментацию растровой памяти * + Минимизировать фрагментацию памяти в растре* @@ -7846,7 +7854,7 @@ Is it OK to release these shortcuts? Advanced: Multiple paths can be separated by ** (No Spaces) - Дополнительно: несколько путей могут быть разделены ** (Нет пробелов) + Дополнительно: несколько путей могут быть разделены ** (без пробелов) @@ -7876,7 +7884,7 @@ Is it OK to release these shortcuts? Show Raster Images Darken Blended - + Отображать растровые изображения в режиме наложения Darken @@ -7906,7 +7914,7 @@ Is it OK to release these shortcuts? Expand Function Editor Header to Match Xsheet Toolbar Height* - Развернуть заголовок Function Editor, чтобы соответствовать высоте панели инструментов XSheet * + Развернуть заголовок редактора функций, чтобы соответствовать высоте панели инструментов XSheet * @@ -8020,7 +8028,7 @@ Is it OK to release these shortcuts? Saving - + Сохранение @@ -8055,7 +8063,7 @@ Is it OK to release these shortcuts? Crosshair - + прицел @@ -8105,7 +8113,7 @@ Is it OK to release these shortcuts? Enable OpenToonz Commands' Shortcut Keys While Renaming Cell - Включить шоткаты команд OpenToonz при переименовании ячеек + Разрешить хоткеи команд OpenToonz при переименовании ячеек @@ -8155,7 +8163,7 @@ Is it OK to release these shortcuts? Rewind after Playback - Возврат к началу после воспроизведения + Возврат к началу по окончанию воспроизведения @@ -8175,7 +8183,7 @@ Is it OK to release these shortcuts? Onion Skin ON - Вкл кальку + Включить кальку @@ -8185,7 +8193,7 @@ Is it OK to release these shortcuts? Use Onion Skin Colors for Reference Drawings of Shift and Trace - + Использовать цвета кальки для референсных рисунков Shift and Trace @@ -8200,12 +8208,12 @@ Is it OK to release these shortcuts? Tablet Settings - + Настройки планшета Enable Windows Ink Support* (EXPERIMENTAL) - + Включить Windows Ink Support* (ЭКСПЕРИМЕНТАЛЬНО) @@ -8231,22 +8239,22 @@ Also the initial output destination for new scenes will be set to $scenefolder a Constant - + Постоянная Exponential - + Экспоненциальная Expression - + Выражение File - Файл + Из файла @@ -8371,7 +8379,7 @@ if both are possible on coding file path. Open the dropdown to display all options - Открыть раскрывающийся список для отображения всех параметров + Раскрывающийся список для отображения всех параметров @@ -8401,7 +8409,7 @@ if both are possible on coding file path. Style *: - + Начертание *: @@ -8446,12 +8454,13 @@ if both are possible on coding file path. Mouse Cursor - Курсор мыши + да, всё верно + курсора Viewer Center - Просмотр центра + центра @@ -8480,12 +8489,14 @@ if both are possible on coding file path. Life is too short for Comic Sans - + это пасхалка, похоже + Жизнь слишком коротка для Comic Sans Good luck. You're on your own from here. - + и это, видимо, тоже + Удачи. Вы сами отсюда. @@ -8538,27 +8549,27 @@ if both are possible on coding file path. Speed In / Speed Out - Speed In / Speed Out + Ускор. в начале/в конце Ease In / Ease Out - Ease In / Ease Out + Замедл. в начале/в конце Ease In / Ease Out % - Ease In / Ease Out % + Замедл. в начале/в конце % Arrow Markers - Маркеры стрелок + Стрелки-маркеры направления Animated Guide - Анимированные подсказки при рисовании + Анимированные стрелки @@ -8573,7 +8584,7 @@ if both are possible on coding file path. Undo Memory Size (MB) - Емкость памяти отмены (МБ) + Емкость памяти отмен (МБ) @@ -8583,7 +8594,7 @@ if both are possible on coding file path. Additional Project Locations - Дополнительные местоположения проекта + Дополнительные местоположения корневой папки проектов @@ -8602,17 +8613,17 @@ if both are possible on coding file path. Unit: - Единица: + Единицы: Camera Unit: - Камера: + Единицы камеры: Rooms*: - Rooms*: + Закладки Rooms*: @@ -8639,12 +8650,13 @@ if both are possible on coding file path. Matte color is used for background when overwriting raster levels with transparent pixels in non alpha-enabled image format. - + Матовый цвет используется для фона при перезаписи растровых уровней прозрачными пикселями +в формате изображения без альфа. Matte color: - + Матовый цвет: @@ -8773,17 +8785,17 @@ in non alpha-enabled image format. Vector Snapping: - + Векторная привязка: Replace Vectors with Simplified Vectors Command - Заменить вектора упрощенными векторами + Заменить векторы упрощенными векторами Dropdown Shortcuts: - + Хоткеи выпадающего списка: @@ -8798,7 +8810,7 @@ in non alpha-enabled image format. Current Column Color: - + Текущий цвет столбца: @@ -8838,7 +8850,7 @@ in non alpha-enabled image format. Vector Guided Style: - + Вид векторного гида: @@ -9009,17 +9021,17 @@ Do you want to overwrite it? Append $scenepath to +drawings - Добавить $scenepath в +drawings + Добавить путь к папке +drawings Append $scenepath to +inputs - Добавить $scenepath в +inputs + Добавить путь к папке +inputs Append $scenepath to +extras - Добавить $scenepath в +extras + Добавить путь к папке+extras @@ -9221,7 +9233,7 @@ Do you want to overwrite it? Apply Antialias - Применить сглаживание + Применить сглаживание @@ -9435,37 +9447,37 @@ Are you sure ? Deactivate Onion Skin - Деактивировать Onion Skin + Деактивировать кальку Limit Onion Skin To Level - Ограничить Onion Skin для уровня + Ограничить кальку для одного уровня Extend Onion Skin To Scene - Расширьте Onion Skin сцены + Расширить кальку на все уровни Clear All Onion Skin Markers - + Убрать все маркеры кальки Clear All Fixed Onion Skin Markers - + Убрать все фикированные маркеры кальки Clear All Relative Onion Skin Markers - + Убрать все относительные маркеры кальки Activate Onion Skin - Активировать Onion Skin + Активировать кальку @@ -9723,7 +9735,7 @@ Are you sure ? The Reload command is not supported for the current selection. - + Перезагрузка не поддерживается для текущего выбора. The Revert to Last Saved command is not supported for the current selection. @@ -9863,7 +9875,7 @@ Do you want to overwrite it? Couldn't load %1 - + Не удалось загрузить%1 @@ -10507,12 +10519,12 @@ Are you sure? Error - + Ошибка No Palette loaded. - + Палитра не загружена. @@ -10699,7 +10711,7 @@ The operation cannot be undone: are you sure? A separation task is in progress! wait until it stops or cancel it - + Выполняется задача разделения! Дождитесь остановки или отмените @@ -10808,7 +10820,7 @@ The operation cannot be undone: are you sure? Duplicate Frame in XSheet - + Дублировать кадр в Xsheet @@ -10834,17 +10846,18 @@ The operation cannot be undone: are you sure? Please enable "Sync Level Strip Drawing Number Changes with the XSheet" preference option to use the duplicate command in the xsheet / timeline. - + Пожалуйста, включите параметр "Синхронно менять номер наброска в Level Strip с Xsheet" + чтобы использовать команду дублирования кадров в Xsheet/таймлайне. Please select only one layer to duplicate a frame. - + Выберите только один уровень для создания дубликата кадра. Please select only one frame to duplicate. - + Выберите только один кадр для дублирования. @@ -10898,7 +10911,7 @@ to use the duplicate command in the xsheet / timeline. Timeline - + Таймлайн @@ -10954,17 +10967,17 @@ to use the duplicate command in the xsheet / timeline. Schematic - Схемы + Схема Stage Schematic - + Схема сцены Fx Schematic - + Fx Схема @@ -11072,7 +11085,7 @@ to use the duplicate command in the xsheet / timeline. Match lines can be applied to Toonz raster levels only. - Match lines могут применяться только к растровым уровням Toonz. + Разделительные линии могут применяться только к растровым уровням Toonz. @@ -11104,7 +11117,7 @@ to use the duplicate command in the xsheet / timeline. Match lines can be deleted from Toonz raster levels only - Match lines могут быть удалены только из растровых уровней Toonz + Разделительные линии могут быть удалены только из растровых уровней Toonz @@ -11144,7 +11157,7 @@ to use the duplicate command in the xsheet / timeline. Color Model - Цветная модель + Цветовая модель @@ -11247,23 +11260,23 @@ to use the duplicate command in the xsheet / timeline. Delete Matchline : Level %1 - Удалить Matchline : Уровень %1 + Удалить разделительные линии : Уровень %1 Apply Matchline : Column%1 < Column%2 что за за наклон?? - Применить Matchline: Столбец %1 < Столбец %2 + Применить разделительные линии: Столбец %1 < Столбец %2 It is not possible to apply match lines to a column containing more than one level. - Невозможно применить Match lines к столбцу, содержащему более одного уровня. + Невозможно применить разделительные линии к столбцу, содержащему более одного уровня. It is not possible to use a match lines column containing more than one level. - Невозможно использовать столбец Match lines, содержащий более одного уровня. + Невозможно использовать столбец с разделительными линиями, содержащий более одного уровня. @@ -11335,7 +11348,7 @@ Visit the Web site for more information. The qualifier %1 is not a valid key name. Skipping. - + Квалификатор%1 не является допустимым именем ключа. Пропуск. @@ -11347,7 +11360,7 @@ Do you want to import them or load from their original location? Apply Lip Sync Data - Применить данные липсинк + Применить данные липсинга @@ -11365,7 +11378,7 @@ Do you want to import them or load from their original location? Reframe with Empty Inbetweens - + Перекадрировать с пустыми промежутками @@ -11390,7 +11403,7 @@ Do you want to import them or load from their original location? empty inbetweens - + пустых промежутков @@ -11591,13 +11604,13 @@ The audio file will not be included in the rendered clip. Click to create an horizontal guide - Нажмите, чтобы создать горизонтальную напрвляющую + Нажмите, чтобы создать горизонтальную направляющую Click to create a vertical guide - Нажмите, чтобы создать вертикальную напрвляющую + Нажмите, чтобы создать вертикальную направляющую @@ -12602,7 +12615,7 @@ Please commit or revert changes first. Save Clapperboard Settings As Preset - + Сохранить настройки хлопушки-нумератора как предустановку @@ -12662,12 +12675,12 @@ Please commit or revert changes first. Save Preset - Сохранить пресет + Сохранить предустановку Preset Name: - Имя пресета: + Имя предустановки: @@ -12682,7 +12695,7 @@ Please commit or revert changes first. It is not possible to create the preset folder %1. - Невозможно создать папку пресетов %1. + Невозможно создать папку предустановок %1. @@ -12823,7 +12836,7 @@ Please commit or revert changes first. Enable Column Color Filter and Transparency for Rendering - Включить фильтр цвета столбцов и прозрачность для рендеринга + Учитывать цвет столбцов и прозрачность при рендеринге @@ -12833,7 +12846,7 @@ Please commit or revert changes first. Camera BG Color: - Камера Цвет фона: + Цвет фона камеры: @@ -12881,7 +12894,7 @@ Please commit or revert changes first. Vector Guided Drawing - Руководство по порядку рисования в векторном уровне + Векторный гид @@ -12891,17 +12904,17 @@ Please commit or revert changes first. Closest Drawing - + Ближайший рисунок Farthest Drawing - + Дальний рисунок All Drawings - + Все рисунки @@ -13038,7 +13051,7 @@ Please commit or revert changes first. (Flipped) - + (Перевёрнутый) @@ -13056,177 +13069,177 @@ Please commit or revert changes first. Auto - Авто + Авто Preview - Предпросмотр + Просмотр Separate - + Разделить Close - Закрыть + Закрыть Sub Color 3: - + Подцвет 3: Alpha Matting - + Альфа-матирование Main - + Основной Sub1 - + Суб 1 Sub2 - + Суб 2 Sub3 - + Суб 3 Pick Color - + Выбрать цвет Show Mask - + Показать маску Show Alpha - + Показать альфу Preview Frame: - + Просмотр кадра: Paper Color: - + Цвет бумаги: Main Color: - + Основной цвет: Sub Color 1: - + Подцвет 1: Sub Color 2: - + Подцвет 2: Sub Adjust: - + Доп. коррекция: Border Smooth: - + Сглаживание каймы: Mask Threshold: - + Предел маски: Mask Radius: - + Радиус маски: Start: - + Начало: End: - Конец: + Конец: Format: - Формат: + Формат: Save in: - Сохранить в: + Сохранить в: File Suffix: - + Суффикс: Cancel - Отмена + Отмена Separate by colors ... - + Отдельно по цветам ... Separate 1 Level - + Отдельно 1 уровень Separate %1 Levels - + Отдельно %1 уровней Critical - + Критический Failed to access the destination folder! - + Не удалось получить доступ к папке назначения! Separating %1 - + Разделение%1 Converting level %1 of %2: %3 - Конвертация уровня %1 из %2: %3 + Конвертация уровня %1 из %2: %3 @@ -13234,27 +13247,27 @@ Please commit or revert changes first. Sub Color 3 - + Подцвет 3 Original - + Оригинал Main Color - + Основной цвет Sub Color 1 - + Подцвет 1 Sub Color 2 - + Подцвет 2 @@ -13283,7 +13296,7 @@ Please commit or revert changes first. Delete Current Preset - Удалить текущий пресет + Удалить текущую предустановку @@ -13293,7 +13306,7 @@ Please commit or revert changes first. Save Current Shortcuts as New Preset - Сохранить текущие хоткеи в новом пресете + Сохранить текущие хоткеи в новой предустановке @@ -13303,12 +13316,12 @@ Please commit or revert changes first. Use selected preset as shortcuts - Использовать выбранные пресеты как хоткеи + Использовать выбранные пердустановки как хоткеи Shortcut Presets - Пресеты хоткеев + Предустановки хоткеев @@ -13363,12 +13376,12 @@ Please commit or revert changes first. Included presets cannot be deleted. - Включенные пресеты не могут быть удалены. + Включенные предустановки не могут быть удалены. Are you sure you want to delete the preset: - Вы действительно хотите удалить пресет: + Вы действительно хотите удалить предустановку: @@ -13388,12 +13401,12 @@ Please commit or revert changes first. Enter Preset Name - Введите имя пресета + Введите имя предустановки Preset Name: - Имя пресета: + Имя предустановки: @@ -13908,7 +13921,7 @@ Assign to '%3'? Error : Preset Name is Invalid - Ошибка: недопустимое имя пресета + Ошибка: недопустимое имя предустановки @@ -13918,7 +13931,8 @@ Assign to '%3'? Bad camera preset - Плохой пресет камеры + савсэм плахой предустановк, слюшай + Плохая предустановка камеры @@ -13968,7 +13982,7 @@ Possibly the preset file has been corrupted Failed - Провалено + Ошибка @@ -14054,7 +14068,7 @@ Possibly the preset file has been corrupted Frames per Chunk: ??? - Frames per Chunk: + Кадров в чанке: @@ -14215,7 +14229,7 @@ Possibly the preset file has been corrupted &Start - &Start + &Старт @@ -14405,7 +14419,7 @@ Possibly the preset file has been corrupted Track - Трек + Старт @@ -14428,12 +14442,12 @@ Possibly the preset file has been corrupted Centerline - Ось + Сплошная линия Outline - Контур + Контурная обводка @@ -14516,7 +14530,7 @@ Possibly the preset file has been corrupted Adherence - Прилипание + Смачивание @@ -14566,7 +14580,7 @@ Possibly the preset file has been corrupted Toggle Centerlines Check - Переключить проверку оси + Переключить проверку сплошной линии @@ -14753,12 +14767,12 @@ Please refer to the user guide for details. Open Memo - Открыть Мемо + Открыть заметку Delete Memo - Удалить Мемо + Удалить заметку @@ -14832,42 +14846,42 @@ Please refer to the user guide for details. &Insert Before - &Вставить слева + &Вставить пробел сзади &Insert After - &Вставить cправа + &Вставить пробел cпереди &Paste Insert Before - + &Вставить копию сзади &Paste Insert After - + &Вставить копию спереди &Insert Below - &Вставить ниже + &Вставить пробел сзади &Insert Above - &Вставка сверху + &Вставить пробел cпереди &Paste Insert Below - + &Вставить копию сзади &Paste Insert Above - + &Вставить копию спереди @@ -14894,7 +14908,7 @@ Please refer to the user guide for details. Subsampling - Субдискретизация + Субсемплинг @@ -14940,7 +14954,7 @@ Please refer to the user guide for details. Opacity: - + Непрозрачность: @@ -14948,22 +14962,22 @@ Please refer to the user guide for details. Toggle Xsheet/Timeline - + Переключить Xsheet/таймлайн Add New Memo - + Добавить новый мемо Previous Memo - + Предыдущий мемо Next Memo - + Следующий мемо @@ -15034,24 +15048,27 @@ Please refer to the user guide for details. Click to Reset Shift & Trace Markers to Neighbor Frames Hold F2 Key on the Viewer to Show This Frame Only - + Нажмите, чтобы сбросить маркеры Shift & Trace для соседних кадров +Удерживайте клавишу F2 чтобы видеть только этот кадр Click to Hide This Frame from Shift & Trace Hold F1 Key on the Viewer to Show This Frame Only - + Нажмите, чтобы скрыть этот кадр из Shift & Trace +Удерживайте клавишу F1 чтобы видеть только этот кадр Click to Hide This Frame from Shift & Trace Hold F3 Key on the Viewer to Show This Frame Only - + Нажмите, чтобы скрыть этот кадр из Shift & Trace +Удерживайте клавишу F3 чтобы видеть только этот кадр Click to Move Shift & Trace Marker - + Нажмите, чтобы переместить маркер Shift & Trace @@ -15061,12 +15078,12 @@ Hold F3 Key on the Viewer to Show This Frame Only Fixed Onion Skin Toggle - Переключение закрепленной кальки + Переключение фиксированной кальки Relative Onion Skin Toggle - Переключатель кальки относительно кадра + Переключение относительной кальки @@ -15099,7 +15116,7 @@ Hold F3 Key on the Viewer to Show This Frame Only Volume: - + Громкость: diff --git a/toonz/sources/translations/russian/toonzqt.ts b/toonz/sources/translations/russian/toonzqt.ts index 526b11f..4471e2c 100644 --- a/toonz/sources/translations/russian/toonzqt.ts +++ b/toonz/sources/translations/russian/toonzqt.ts @@ -143,7 +143,7 @@ A/R - + A/R @@ -161,12 +161,12 @@ '%1' doesn't seem a well formed camera preset. Possibly the preset file has been corrupted "%1" не кажется правильно сформированным пресетом камеры. -Возможно пресет поврежден +Возможно предустановка повреждена Preset name - Имя пресета + Имя предустановки @@ -176,12 +176,12 @@ Possibly the preset file has been corrupted Error : Preset Name is Invalid - Ошибка: имя пресета недействительно + Ошибка: имя предустановки недействительно The preset name must not use ','(comma). - Имя пресета не должно содержать "," (запятую). + Имя предустановки не должно содержать "," (запятую). @@ -250,12 +250,12 @@ Possibly the preset file has been corrupted Picked Color - + Выбранный цвет Average Color (Ctrl + Drag) - + Средний цвет (потянуть при нажатом Ctrl) @@ -446,12 +446,12 @@ Possibly the preset file has been corrupted Ease In: - Ease In: + Замедл. в нач: Ease Out: - Ease Out: + Замедл. в конце: @@ -719,12 +719,12 @@ Possibly the preset file has been corrupted Style: - + Начертания: Size: - + Кегль: @@ -809,7 +809,7 @@ Possibly the preset file has been corrupted Speed In / Speed Out Interpolation - Интерполяция Speed In / Speed Out + Интерполяция Замедл. в начале/в конце @@ -834,7 +834,7 @@ Possibly the preset file has been corrupted File Interpolation - Интерполяция файлов + Интерполяция из файла @@ -903,17 +903,17 @@ Possibly the preset file has been corrupted Speed In / Speed Out - Speed In / Speed Out + Ускорение в начале/в конце Ease In / Ease Out - Ease In / Ease Out + Замедление в начале/в конце Ease In / Ease Out % - Ease In / Ease Out % + Замедление в начале/в конце % @@ -981,27 +981,27 @@ Possibly the preset file has been corrupted Speed - Speed + Ускорение Ease - Ease + Замедление Ease% - Ease% + Замедление % Expo - Expo + Экспо Expr - Expr + Выраж @@ -1032,7 +1032,7 @@ Possibly the preset file has been corrupted Function Editor - + Редактор функций @@ -1055,17 +1055,17 @@ Possibly the preset file has been corrupted Speed In / Speed Out Interpolation - Speed In / Speed Out Интерполяция + Интерполяция ускорения в начале/в конце Ease In / Ease Out Interpolation - Ease In / Ease Out Интерполяция + Интерполяция замедления в нач./в конце Ease In / Ease Out (%) Interpolation - Ease In / Ease Out (%) Интерполяция + Замедление в начале/в конце (%) Интерполяция @@ -1080,7 +1080,7 @@ Possibly the preset file has been corrupted File Interpolation - Интерполяция файлов + Интерполяция из файла @@ -1130,17 +1130,17 @@ Possibly the preset file has been corrupted Stage - + Сцена FX - + FX Plastic Skeleton - + Plastic Skeleton @@ -1148,7 +1148,7 @@ Possibly the preset file has been corrupted Table - + Стол @@ -1339,7 +1339,7 @@ Possibly the preset file has been corrupted &Paste Insert - &Вставить вставку + &Вставить @@ -1347,7 +1347,7 @@ Possibly the preset file has been corrupted Output - Вывод + Вывод @@ -1392,7 +1392,7 @@ Select FX nodes and related links before copying or cutting the selection you wa XSheet - + Xsheet @@ -1438,7 +1438,7 @@ Select FX nodes and related links before copying or cutting the selection you wa XSheet - + Xsheet @@ -1683,7 +1683,7 @@ Select FX nodes and related links before copying or cutting the selection you wa (Color Model: - (Цветная модель: + (Цветовая модель: @@ -1742,8 +1742,7 @@ Select FX nodes and related links before copying or cutting the selection you wa Swatch Viewer - можно "просмотрщик образцов" - Swatch Viewer + Просмотрщик образцов @@ -1751,7 +1750,7 @@ Select FX nodes and related links before copying or cutting the selection you wa Fx Help - Fx Help + FX Помощь @@ -2073,12 +2072,12 @@ Are you sure? Fullpath: - Полный путь: + Полный путь: File Type: - Тип файла: + Тип файла: @@ -2193,7 +2192,7 @@ Are you sure? Camera Dpi: - Камера Dpi: + DPI Камеры: @@ -2276,7 +2275,7 @@ Are you sure? Frame %1 : conversion failed! - Конверсия кадра %1 не выполнена! + Конверсия кадра %1 не удалась! @@ -2307,17 +2306,17 @@ Are you sure? Warning - Внимание + Предупреждение Critical - Критический + Критическая ошибка Question - Вопрос + Подтверждение @@ -2430,7 +2429,7 @@ It should start with "3DMESH" keyword. Failed to Load 3DLUT File. The second line should be "Mesh [Input bit depth] [Output bit depth]" Не удалось загрузить файл 3DLUT. -Вторая строка должна быть "Mesh [Input bit depth] [Output bit depth]" +Вторая строка должна быть "Mesh [глубина цвета на входе] [глубина цвета на выходе]" @@ -2506,7 +2505,7 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< &Toggle node icons - + &Переключить иконки узлов @@ -2715,12 +2714,12 @@ The second line should be "Mesh [Input bit depth] [Output bit depth]"< Generated - + Сформирован Trail - + Хвост Auto @@ -2731,12 +2730,12 @@ Apply Show or hide parts of the Color Page. - + Показать или скрыть части цветовой страницы. Toggle orientation of the Color Page. - + Переключить ориентацию цветовой страницы. @@ -2781,12 +2780,12 @@ Apply Style Editor - No Valid Style Selected - + Редактор стилей - не выбран правильный стиль [CLEANUP] - + [ОЧИСТКА] @@ -2811,7 +2810,7 @@ Apply [STUDIO] - + [STUDIO] @@ -3013,7 +3012,7 @@ Apply Table - + Стол diff --git a/toonz/sources/translations/spanish/tnztools.ts b/toonz/sources/translations/spanish/tnztools.ts index f12022b..3a8bbbe 100644 --- a/toonz/sources/translations/spanish/tnztools.ts +++ b/toonz/sources/translations/spanish/tnztools.ts @@ -1343,30 +1343,30 @@ Do you want to proceed? Scale - Escala + Escala Position - Posición + Posición ShiftTraceToolOptionBox Reset Previous - + Restablecer anterior Reset Following - + Restablecer siguiente Previous Drawing - + Dibujo anterior Following Drawing - + Dibujo siguiente @@ -1452,47 +1452,47 @@ movido hacia el final de la primera página de la paleta. ToonzRasterBrushTool Size - Tamaño + Tamaño Hardness: - Dureza: + Dureza: Smooth: - Estabilidad: + Estabilidad: Draw Order: - Orden: + Orden: Over All - Por encima + Por encima Under All - Por debajo + Por debajo Palette Order - Según paleta + Según paleta Preset: - Ajustes: + Ajustes: <custom> - <personalizado> + <personalizado> Pencil - Lápiz + Lápiz Pressure - Presión + Presión diff --git a/toonz/sources/translations/spanish/toonz.ts b/toonz/sources/translations/spanish/toonz.ts index 133780d..3a104ce 100644 --- a/toonz/sources/translations/spanish/toonz.ts +++ b/toonz/sources/translations/spanish/toonz.ts @@ -370,86 +370,86 @@ Detenerla o esperar a su finalización antes de eliminarla. BoardSettingsPopup Clapperboard Settings - + Opciones de claqueta Load Preset - + Cargar ajuste Save as Preset - + Guardar como ajuste Close - Cerrar + Cerrar Duration (frames): - + Duración (fotogramas): Text - + Texto Project name - + Nombre de proyecto Scene name - + Nombre de escena Duration : Frame - + Duración : Fotograma Duration : Sec + Frame - + Duración : Seg + Fotograma Duration : HH:MM:SS:FF - + Duración : HH:MM:SS:FF Current date - + Fecha actual Current date and time - + Fecha y hora actuales User name - + Nombre de usuario Scene location : Aliased path - + Ubicación de la escena : Ruta relativa Scene location : Full path - + Ubicación de la escena : Ruta completa Output location : Aliased path - + Ubicación de salida : Ruta relativa Output location : Full path - + Ubicación de salida : Ruta completa Image - + Imagen BoardView Please set the duration more than 0 frame first, or the clapperboard settings will not be saved in the scene at all! - + ¡Por favor definir previamente una Duración mayor a 0 o las opciones de la claqueta no serán guardadas en la escena! @@ -2322,21 +2322,24 @@ contuviera información de PPP, entonces se usarán los de la cámara actual. Click to Reset Shift & Trace Markers to Neighbor Frames Hold F2 Key on the Viewer to Show This Frame Only - + Clic para restablecer los marcadores de Desplazar y trazar a los fotogramas adyacentes +Mantener presionada la tecla F2 para ver sólo este fotograma en el visor Click to Hide This Frame from Shift & Trace Hold F1 Key on the Viewer to Show This Frame Only - + Clic para ocultar este fotograma al usar Desplazar y trazar +Mantener presionada la tecla F1 para ver sólo este fotograma en el visor Click to Hide This Frame from Shift & Trace Hold F3 Key on the Viewer to Show This Frame Only - + Clic para ocultar este fotograma al usar Desplazar y trazar +Mantener presionada la tecla F3 para ver sólo este fotograma en el visor Click to Move Shift & Trace Marker - + Clic para mover aquí el marcador de Desplazar y trazar @@ -2607,70 +2610,70 @@ Do you want to overwrite it? ItemInfoView Bold - + Negrita Italic - + Cursiva Ignore - + Ignorar Keep - + Mantener Name: - Nombre: + Nombre: Type: - Tipo: + Tipo: Path: - Ruta: + Ruta: Aspect Ratio: - + Proporción: Font: - + Tipografía: Max Size: - + Tamaño máx: No item selected. - + Ningún elemento seleccionado. Item - + Elemento ItemListView Add - Agregar + Agregar Remove - Eliminar + Eliminar Move Up - + Mover arriba Move Down - + Mover abajo @@ -3175,7 +3178,7 @@ Usar los números de fotograma como referencia. LoadBoardPresetFilePopup Load Clapperboard Settings Preset - + Cargar ajuste de opciones de claqueta @@ -5354,47 +5357,47 @@ Usar los números de fotograma como referencia. &Timeline - + Línea de &tiempo Linear Interpolation - + Interpolación lineal Speed In / Speed Out Interpolation - + Interpolación Bézier Ease In / Ease Out Interpolation - + Interpolación suave Ease In / Ease Out (%) Interpolation - + Interpolación suave (%) Exponential Interpolation - + Interpolación exponencial Expression Interpolation - + Interpolación mediante expresión File Interpolation - + Interpolación mediante archivo Constant Interpolation - + Interpolación constante Separate Colors... - + Separar colores... Flip Viewer Horizontally - + Invertir visor horizontalmente @@ -5976,11 +5979,11 @@ What do you want to do? Add Clapperboard - + Agregar claqueta Edit Clapperboard... - + Editar claqueta... Save current output settings. @@ -5991,7 +5994,14 @@ The parameters to be saved are: - File options - Resample Balance - Channel width - + Guardar las opciones actuales de salida. +Los parámetros que serán guardados son: +- Opciones de cámara +- Carpeta de proyecto donde se guardará +- Formato de archivo +- Opciones de archivo +- Filtro de remuestreo +- Profundidad de color @@ -7393,21 +7403,21 @@ Is it OK to release these shortcuts? Project Folder Aliases (+drawings, +scenes, etc.) - Sobrenombres para carpeta de proyecto (+drawings, +scenes, etc.) + Relativas a cada carpeta del proyecto (+drawings, +scenes, etc.) Scene Folder Alias ($scenefolder) - Sobrenombres para carpeta de escenas ($scenefolder) + Relativas a la carpeta de la escena ($scenefolder) Use Project Folder Aliases Only - Sólo usar sobrenombres para la carpeta del proyecto + Relativas sólo a la carpeta del proyecto This option defines which alias to be used if both are possible on coding file path. - Esta opción define cuál sobrenombre usar si ambos -fueran posibles, al resolver la ruta de un archvo. + Esta opción define en base a qué se considerará +la relatividad al resolver la ruta de un archvo. Open the dropdown to display all options @@ -7419,7 +7429,7 @@ fueran posibles, al resolver la ruta de un archvo. Path Alias Priority: - Prioridad de sobrenombres de rutas: + Prioridad al evaluar rutas relativas: Replace Vectors with Simplified Vectors Command @@ -7565,52 +7575,53 @@ También, se establecerá el destino inicial de salida para las nuevas escenas e Saving - + Guardado Use Onion Skin Colors for Reference Drawings of Shift and Trace - + Usar los colores de Piel de cebolla en los dibujos de referencia de Desplazar y trazar Tablet Settings - + Opciones de tableta Enable Windows Ink Support* (EXPERIMENTAL) - + Habilitar soporte para Windows Ink* (EXPERIMENTAL) Constant - + Constante Exponential - + Exponencial Expression - + Expresión File - Archivo + Archivo Style *: - + Estilo *: Matte color is used for background when overwriting raster levels with transparent pixels in non alpha-enabled image format. - + El Color de transparencia será usado para el fondo al sobrescribir niveles de imagen que +contengan píxeles transparentes en formatos de imagen sin soporte para canal alfa. Matte color: - + Color de transparencia: Current Column Color: - + Color de columna actual: @@ -9358,7 +9369,7 @@ Are you sure? The following level(s) use path with $scenefolder alias. - Los siguientes niveles usan una ruta con sobrenombre para $scenefolder. + Los siguientes niveles usan una ruta relativa a $scenefolder. @@ -9376,7 +9387,7 @@ No volverán a ser abiertos correctamente la siguiente vez que se cargue la esce Decode all $scenefolder aliases - Decodificar todos los sobrenombres de $scenefolder + Decodificar todas las rutas relativas a $scenefolder Save the scene only @@ -9494,64 +9505,65 @@ Allow duplicate? Couldn't load %1 - + No fue posible cargar %1 Apply Antialias - Aplicar suavizado de bordes + Aplicar suavizado de bordes The Reload command is not supported for the current selection. - + El comando Recargar no se puede aplicar a la selección actual. Error - + Error No Palette loaded. - + No se cargó una paleta. A separation task is in progress! wait until it stops or cancel it - + ¡Existe una tarea de separación en curso! Esperar a que finalice o cancelarla Duplicate Frame in XSheet - + Duplicar fotograma en Planilla Please enable "Sync Level Strip Drawing Number Changes with the XSheet" preference option to use the duplicate command in the xsheet / timeline. - + Por favor habilitar la opción "Sincronizar cambios de número en cinta de nivel con la planilla" +en las Preferencias, para poder usar esta opción en la planilla o línea de tiempo. Please select only one layer to duplicate a frame. - + Por favor seleccionar únicamente una columna/capa para duplicar un fotograma. Please select only one frame to duplicate. - + Por favor seleccionar únicamente un fotograma para duplicar. Timeline - + Línea de tiempo The qualifier %1 is not a valid key name. Skipping. - + El calificador %1 no es válido como nombre de tecla. Se omitirá. Clear All Onion Skin Markers - + Limpiar todos los marcadores de Piel de cebolla Clear All Fixed Onion Skin Markers - + Limpiar todos los marcadores fijos de Piel de cebolla Clear All Relative Onion Skin Markers - + Limpiar todos los marcadores relativos de Piel de cebolla @@ -10546,7 +10558,7 @@ Por favor enviar o revertir los cambios antes. SaveBoardPresetFilePopup Save Clapperboard Settings As Preset - + Guardar opciones de claqueta como ajuste @@ -10959,166 +10971,166 @@ Por favor enviar o revertir los cambios antes. SeparateColorsPopup Auto - Auto + Auto Preview - + Previsualizar Separate - + Separar Close - Cerrar + Cerrar Sub Color 3: - + Sub color 3: Alpha Matting - + Transparencia alfa Main - + Principal Sub1 - + Sub1 Sub2 - + Sub2 Sub3 - + Sub3 Pick Color - + Escoger color Show Mask - + Mostrar máscara Show Alpha - + Mostrar alfa Preview Frame: - + Fotograma a previsualizar: Paper Color: - + Color del papel: Main Color: - + Color principal: Sub Color 1: - + Sub color 1: Sub Color 2: - + Sub color 2: Sub Adjust: - + Ajuste de sub colores: Border Smooth: - + Suavizado de bordes: Mask Threshold: - + Umbral de máscara: Mask Radius: - + Radio de máscara: Start: - + Inicio: End: - + Fin: Format: - Formato: + Formato: Save in: - + Guardar en: File Suffix: - + Sufijo de archivos: Cancel - + Cancelar Separate by colors ... - + Separar por colores ... Separate 1 Level - + Separar 1 nivel Separate %1 Levels - + Separar %1 niveles Critical - + Crítico Failed to access the destination folder! - + ¡Fallo al acceder a la carpeta de destino! Separating %1 - + Separando %1 Converting level %1 of %2: %3 - Convirtiendo el nivel %1 de %2: %3 + Convirtiendo nivel %1 de %2: %3 SeparateSwatch Sub Color 3 - + Sub color 3 Original - + Original Main Color - + Color principal Sub Color 1 - + Sub color 1 Sub Color 2 - + Sub color 2 @@ -12505,7 +12517,7 @@ Por favor ver la guía de usuario para obtener más detalles. Opacity: - + Opacidad: @@ -12528,19 +12540,19 @@ Por favor ver la guía de usuario para obtener más detalles. Toggle Xsheet/Timeline - + Alternar planilla / línea de tiempo Add New Memo - + Agregar nueva nota Previous Memo - + Nota anterior Next Memo - + Nota siguiente @@ -12619,28 +12631,31 @@ Por favor ver la guía de usuario para obtener más detalles. Click to Reset Shift & Trace Markers to Neighbor Frames Hold F2 Key on the Viewer to Show This Frame Only - + Clic para restablecer los marcadores de Desplazar y trazar a los fotogramas adyacentes +Mantener presionada la tecla F2 para ver sólo este fotograma en el visor Click to Hide This Frame from Shift & Trace Hold F1 Key on the Viewer to Show This Frame Only - + Clic para ocultar este fotograma al usar Desplazar y trazar +Mantener presionada la tecla F1 para ver sólo este fotograma en el visor Click to Hide This Frame from Shift & Trace Hold F3 Key on the Viewer to Show This Frame Only - + Clic para ocultar este fotograma al usar Desplazar y trazar +Mantener presionada la tecla F3 para ver sólo este fotograma en el visor Click to Move Shift & Trace Marker - + Clic para mover aquí el marcador de Desplazar y trazar XsheetGUI::SoundColumnPopup Volume: - + Volumen: diff --git a/toonz/sources/translations/spanish/toonzqt.ts b/toonz/sources/translations/spanish/toonzqt.ts index 29679bf..361210b 100644 --- a/toonz/sources/translations/spanish/toonzqt.ts +++ b/toonz/sources/translations/spanish/toonzqt.ts @@ -700,11 +700,11 @@ Es posible que el archivo de dicho ajuste se encuentre corrupto. FontParamField Style: - + Estilo: Size: - + Tamaño: @@ -1220,7 +1220,7 @@ Es posible que el archivo de dicho ajuste se encuentre corrupto. FxSchematicOutputNode Output - Salida + Salida @@ -1259,7 +1259,7 @@ Seleccionar los nodos de efecto y sus vínculos relacionados antes de copiar o c FxSchematicXSheetNode XSheet - Planilla + Planilla @@ -2221,7 +2221,7 @@ La segunda línea debería tener la forma "Mesh [profundidad de bits de ent &Toggle node icons - + Íconos de &nodos diff --git a/toonz/sources/xdg-data/io.github.OpenToonz.appdata.xml b/toonz/sources/xdg-data/io.github.OpenToonz.appdata.xml index 9efa205..87567eb 100644 --- a/toonz/sources/xdg-data/io.github.OpenToonz.appdata.xml +++ b/toonz/sources/xdg-data/io.github.OpenToonz.appdata.xml @@ -27,6 +27,6 @@ - +