diff --git a/toonz/sources/common/tcolor/tpixel.cpp b/toonz/sources/common/tcolor/tpixel.cpp index ffd82ac..053f86b 100644 --- a/toonz/sources/common/tcolor/tpixel.cpp +++ b/toonz/sources/common/tcolor/tpixel.cpp @@ -14,6 +14,8 @@ const TPixelRGBM32 TPixelRGBM32::Blue(0, 0, maxChannelValue); const TPixelRGBM32 TPixelRGBM32::Yellow(maxChannelValue, maxChannelValue, 0); const TPixelRGBM32 TPixelRGBM32::Cyan(0, maxChannelValue, maxChannelValue); const TPixelRGBM32 TPixelRGBM32::Magenta(maxChannelValue, 0, maxChannelValue); +const TPixelRGBM32 TPixelRGBM32::Gray(maxChannelValue/2, maxChannelValue/2, + maxChannelValue/2); const TPixelRGBM32 TPixelRGBM32::White(maxChannelValue, maxChannelValue, maxChannelValue); const TPixelRGBM32 TPixelRGBM32::Black(0, 0, 0); @@ -26,6 +28,8 @@ const TPixelRGBM64 TPixelRGBM64::Blue(0, 0, maxChannelValue); const TPixelRGBM64 TPixelRGBM64::Yellow(maxChannelValue, maxChannelValue, 0); const TPixelRGBM64 TPixelRGBM64::Cyan(0, maxChannelValue, maxChannelValue); const TPixelRGBM64 TPixelRGBM64::Magenta(maxChannelValue, 0, maxChannelValue); +const TPixelRGBM64 TPixelRGBM64::Gray(maxChannelValue/2, maxChannelValue/2, + maxChannelValue/2); const TPixelRGBM64 TPixelRGBM64::White(maxChannelValue, maxChannelValue, maxChannelValue); const TPixelRGBM64 TPixelRGBM64::Black(0, 0, 0); @@ -37,6 +41,7 @@ const TPixelD TPixelD::Blue(0, 0, 1); const TPixelD TPixelD::Yellow(1, 1, 0); const TPixelD TPixelD::Cyan(0, 1, 1); const TPixelD TPixelD::Magenta(1, 0, 1); +const TPixelD TPixelD::Gray(0.5, 0.5, 0.5); const TPixelD TPixelD::White(1, 1, 1); const TPixelD TPixelD::Black(0, 0, 0); const TPixelD TPixelD::Transparent(0, 0, 0, 0); diff --git a/toonz/sources/include/toonz/txshleveltypes.h b/toonz/sources/include/toonz/txshleveltypes.h index e976c73..638782a 100644 --- a/toonz/sources/include/toonz/txshleveltypes.h +++ b/toonz/sources/include/toonz/txshleveltypes.h @@ -13,6 +13,7 @@ enum TXshLevelType { TZP_TYPE = 0x10, OVL_TYPE = 0x20, CHILD_TYPE = 0x40, + META_TYPE = 0x80, FULLCOLOR_TYPE = TZI_TYPE | OVL_TYPE, RASTER_TYPE = FULLCOLOR_TYPE | TZP_TYPE, @@ -22,6 +23,7 @@ enum TXshLevelType { TZP_XSHLEVEL = TZP_TYPE | LEVELCOLUMN_XSHLEVEL, // ToonzRaster OVL_XSHLEVEL = OVL_TYPE | LEVELCOLUMN_XSHLEVEL, // Raster CHILD_XSHLEVEL = CHILD_TYPE | LEVELCOLUMN_XSHLEVEL, + META_XSHLEVEL = META_TYPE | LEVELCOLUMN_XSHLEVEL, ZERARYFX_XSHLEVEL = 1 << 7, PLT_XSHLEVEL = 2 << 7, diff --git a/toonz/sources/include/tpixel.h b/toonz/sources/include/tpixel.h index 2b01366..e08f7f3 100644 --- a/toonz/sources/include/tpixel.h +++ b/toonz/sources/include/tpixel.h @@ -140,6 +140,7 @@ dithering static const TPixelRGBM32 Yellow; static const TPixelRGBM32 Cyan; static const TPixelRGBM32 Magenta; + static const TPixelRGBM32 Gray; static const TPixelRGBM32 White; static const TPixelRGBM32 Black; static const TPixelRGBM32 Transparent; @@ -239,6 +240,7 @@ static inline TPixelRGBM64 from(const TPixelD &pix); static const TPixelRGBM64 Yellow; static const TPixelRGBM64 Cyan; static const TPixelRGBM64 Magenta; + static const TPixelRGBM64 Gray; static const TPixelRGBM64 White; static const TPixelRGBM64 Black; static const TPixelRGBM64 Transparent; @@ -312,6 +314,7 @@ static inline TPixelD from(const TPixelD &pix) {return pix;}; static const TPixelD Yellow; static const TPixelD Cyan; static const TPixelD Magenta; + static const TPixelD Gray; static const TPixelD White; static const TPixelD Black; static const TPixelD Transparent; diff --git a/toonz/sources/toonz/levelcreatepopup.cpp b/toonz/sources/toonz/levelcreatepopup.cpp index c1c8866..717d75f 100644 --- a/toonz/sources/toonz/levelcreatepopup.cpp +++ b/toonz/sources/toonz/levelcreatepopup.cpp @@ -45,6 +45,7 @@ #include "tvectorimage.h" #include "trasterimage.h" #include "ttoonzimage.h" +#include "tmetaimage.h" #include "timagecache.h" #include "tundo.h" #include "filebrowsermodel.h" @@ -196,6 +197,7 @@ LevelCreatePopup::LevelCreatePopup() m_levelTypeOm->addItem(tr("Toonz Raster Level"), (int)TZP_XSHLEVEL); m_levelTypeOm->addItem(tr("Raster Level"), (int)OVL_XSHLEVEL); m_levelTypeOm->addItem(tr("Scan Level"), (int)TZI_XSHLEVEL); + m_levelTypeOm->addItem(tr("Assistants Level"), (int)META_XSHLEVEL); if (Preferences::instance()->getUnits() == "pixel") { m_widthFld->setMeasure("camera.lx"); @@ -631,6 +633,8 @@ bool LevelCreatePopup::apply() { TFrameId fid(i); if (lType == PLI_XSHLEVEL) sl->setFrame(fid, new TVectorImage()); + else if (lType == META_XSHLEVEL) + sl->setFrame(fid, new TMetaImage()); else if (lType == TZP_XSHLEVEL) { TRasterCM32P raster(xres, yres); raster->fill(TPixelCM32()); diff --git a/toonz/sources/toonzqt/icongenerator.cpp b/toonz/sources/toonzqt/icongenerator.cpp index fc9a039..c3f8264 100644 --- a/toonz/sources/toonzqt/icongenerator.cpp +++ b/toonz/sources/toonzqt/icongenerator.cpp @@ -499,6 +499,25 @@ IconRenderer::~IconRenderer() {} //============================================================================= //====================================== +// NoImageIconRenderer class +//-------------------------------------- + +class NoImageIconRenderer final : public IconRenderer { +public: + NoImageIconRenderer(const std::string &id, const TDimension &iconSize): + IconRenderer(id, iconSize) { } + void run() override { + try { + TRaster32P ras(getIconSize()); + ras->fill(TPixel32::Gray); + setIcon(ras); + } catch(...){} + } +}; + +//============================================================================= + +//====================================== // VectorImageIconRenderer class //-------------------------------------- @@ -1442,7 +1461,7 @@ QPixmap IconGenerator::getIcon(TXshLevel *xl, const TFrameId &fid, addTask(id, new MeshImageIconRenderer(id, iconSize, sl, fid, m_settings)); break; default: - assert(false); + addTask(id, new NoImageIconRenderer(id, iconSize)); break; }