Display Fx Icon as timeline/xsheet thumbnail (#130)

This commit is contained in:
manongjohn 2020-08-31 17:44:23 -04:00 committed by GitHub
parent 89e7fc6f69
commit df81651d5e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 64 additions and 40 deletions

View file

@ -37,7 +37,12 @@ class DVAPI TXshZeraryFxColumn final : public TXshCellColumn {
TZeraryColumnFx *m_zeraryColumnFx; TZeraryColumnFx *m_zeraryColumnFx;
TXshZeraryFxLevel *m_zeraryFxLevel; TXshZeraryFxLevel *m_zeraryFxLevel;
bool m_iconVisible;
public: public:
bool isIconVisible() { return m_iconVisible; }
void setIconVisible(bool visible) { m_iconVisible = visible; }
/*! /*!
Constructs a TXshZeraryFxColumn with default value. Constructs a TXshZeraryFxColumn with default value.
*/ */

View file

@ -9,6 +9,18 @@
#include "tcommon.h" #include "tcommon.h"
#include <QPixmap>
#undef DVAPI
#undef DVVAR
#ifdef TOONZQT_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
class QPixmap; class QPixmap;
namespace { namespace {
@ -136,13 +148,16 @@ const struct {
{0, 0}}; {0, 0}};
}; };
class FxIconPixmapManager { // singleton class DVAPI FxIconPixmapManager final : public QObject { // singleton
Q_OBJECT
std::map<std::string, QPixmap> m_pms;
FxIconPixmapManager();
public: public:
std::map<std::string, QPixmap> m_pms;
public:
FxIconPixmapManager();
~FxIconPixmapManager();
static FxIconPixmapManager *instance(); static FxIconPixmapManager *instance();
const QPixmap &getFxIconPm(std::string type); const QPixmap &getFxIconPm(std::string type);

View file

@ -17,6 +17,7 @@
#include "toonzqt/gutil.h" #include "toonzqt/gutil.h"
#include "toonzqt/icongenerator.h" #include "toonzqt/icongenerator.h"
#include "toonzqt/intfield.h" #include "toonzqt/intfield.h"
#include "toonzqt/fxiconmanager.h"
// TnzLib includes // TnzLib includes
#include "toonz/txshcolumn.h" #include "toonz/txshcolumn.h"
@ -1111,38 +1112,28 @@ void ColumnArea::DrawHeader::drawThumbnail(QPixmap &iconPixmap) const {
// All other thumbnails // All other thumbnails
p.setPen(m_viewer->getTextColor()); p.setPen(m_viewer->getTextColor());
// for zerary fx, display fxId here instead of thumbnail TXshLevelColumn *levelColumn = column->getLevelColumn();
TXshZeraryFxColumn *zColumn = dynamic_cast<TXshZeraryFxColumn *>(column); TXshMeshColumn *meshColumn = column->getMeshColumn();
if (zColumn) { TXshZeraryFxColumn *zColumn = dynamic_cast<TXshZeraryFxColumn *>(column);
QFont lastfont = p.font();
QFont font("Verdana", 8);
p.setFont(font);
TFx *fx = zColumn->getZeraryColumnFx()->getZeraryFx(); if (Preferences::instance()->getColumnIconLoadingPolicy() ==
QString fxName = QString::fromStdWString(fx->getFxId()); Preferences::LoadOnDemand &&
p.drawText(thumbnailImageRect, Qt::TextWrapAnywhere | Qt::TextWordWrap, ((levelColumn && !levelColumn->isIconVisible()) ||
fxName); (meshColumn && !meshColumn->isIconVisible()) ||
p.setFont(lastfont); (zColumn && !zColumn->isIconVisible())) &&
col >= 0) {
// display nothing
} else { } else {
TXshLevelColumn *levelColumn = column->getLevelColumn(); if (!iconPixmap.isNull()) {
TXshMeshColumn *meshColumn = column->getMeshColumn(); p.drawPixmap(thumbnailImageRect, iconPixmap);
if (Preferences::instance()->getColumnIconLoadingPolicy() ==
Preferences::LoadOnDemand &&
((levelColumn && !levelColumn->isIconVisible()) ||
(meshColumn && !meshColumn->isIconVisible())) &&
col >= 0) {
// display nothing
} else {
if (!iconPixmap.isNull()) {
p.drawPixmap(thumbnailImageRect, iconPixmap);
}
// notify that the column icon is already shown
if (levelColumn)
levelColumn->setIconVisible(true);
else if (meshColumn)
meshColumn->setIconVisible(true);
} }
// notify that the column icon is already shown
if (levelColumn)
levelColumn->setIconVisible(true);
else if (meshColumn)
meshColumn->setIconVisible(true);
else if (zColumn)
zColumn->setIconVisible(true);
} }
} }
@ -1727,21 +1718,27 @@ QPixmap ColumnArea::getColumnIcon(int columnIndex) {
if (!xl) if (!xl)
return QPixmap(); return QPixmap();
else { else {
bool onDemand = false; TXshColumn *column = xsh->getColumn(columnIndex);
TXshZeraryFxColumn *zColumn = dynamic_cast<TXshZeraryFxColumn *>(column);
bool onDemand = false;
if (Preferences::instance()->getColumnIconLoadingPolicy() == if (Preferences::instance()->getColumnIconLoadingPolicy() ==
Preferences::LoadOnDemand) { Preferences::LoadOnDemand) {
onDemand = m_viewer->getCurrentColumn() != columnIndex; onDemand = m_viewer->getCurrentColumn() != columnIndex;
if (!onDemand) { if (!onDemand) {
TXshColumn *column = xsh->getColumn(columnIndex);
TXshLevelColumn *levelColumn = column->getLevelColumn(); TXshLevelColumn *levelColumn = column->getLevelColumn();
TXshMeshColumn *meshColumn = column->getMeshColumn(); TXshMeshColumn *meshColumn = column->getMeshColumn();
if ((levelColumn && !levelColumn->isIconVisible()) || if ((levelColumn && !levelColumn->isIconVisible()) ||
(meshColumn && !meshColumn->isIconVisible())) (meshColumn && !meshColumn->isIconVisible()) ||
(zColumn && !zColumn->isIconVisible()))
return QPixmap(); return QPixmap();
} }
} }
QPixmap icon = QPixmap icon =
IconGenerator::instance()->getIcon(xl, cell.m_frameId, false, onDemand); zColumn
? FxIconPixmapManager::instance()->getFxIconPm(
zColumn->getZeraryColumnFx()->getZeraryFx()->getFxType())
: IconGenerator::instance()->getIcon(xl, cell.m_frameId, false,
onDemand);
QRect thumbnailImageRect = o->rect(PredefinedRect::THUMBNAIL); QRect thumbnailImageRect = o->rect(PredefinedRect::THUMBNAIL);
if (thumbnailImageRect.isEmpty()) return QPixmap(); if (thumbnailImageRect.isEmpty()) return QPixmap();
return scalePixmapKeepingAspectRatio(icon, thumbnailImageRect.size()); return scalePixmapKeepingAspectRatio(icon, thumbnailImageRect.size());
@ -2327,6 +2324,8 @@ void ColumnArea::mousePressEvent(QMouseEvent *event) {
// toggle columnIcon visibility with alt+click // toggle columnIcon visibility with alt+click
TXshLevelColumn *levelColumn = column->getLevelColumn(); TXshLevelColumn *levelColumn = column->getLevelColumn();
TXshMeshColumn *meshColumn = column->getMeshColumn(); TXshMeshColumn *meshColumn = column->getMeshColumn();
TXshZeraryFxColumn *zColumn =
dynamic_cast<TXshZeraryFxColumn *>(column);
if (Preferences::instance()->getColumnIconLoadingPolicy() == if (Preferences::instance()->getColumnIconLoadingPolicy() ==
Preferences::LoadOnDemand && Preferences::LoadOnDemand &&
(event->modifiers() & Qt::AltModifier)) { (event->modifiers() & Qt::AltModifier)) {
@ -2334,6 +2333,8 @@ void ColumnArea::mousePressEvent(QMouseEvent *event) {
levelColumn->setIconVisible(!levelColumn->isIconVisible()); levelColumn->setIconVisible(!levelColumn->isIconVisible());
else if (meshColumn) else if (meshColumn)
meshColumn->setIconVisible(!meshColumn->isIconVisible()); meshColumn->setIconVisible(!meshColumn->isIconVisible());
else if (zColumn)
zColumn->setIconVisible(!zColumn->isIconVisible());
} }
} }
} }

View file

@ -15,7 +15,8 @@
TXshZeraryFxColumn::TXshZeraryFxColumn(int frameCount) TXshZeraryFxColumn::TXshZeraryFxColumn(int frameCount)
: m_zeraryColumnFx(new TZeraryColumnFx()) : m_zeraryColumnFx(new TZeraryColumnFx())
, m_zeraryFxLevel(new TXshZeraryFxLevel()) { , m_zeraryFxLevel(new TXshZeraryFxLevel())
, m_iconVisible(false) {
m_zeraryColumnFx->addRef(); m_zeraryColumnFx->addRef();
m_zeraryColumnFx->setColumn(this); m_zeraryColumnFx->setColumn(this);
m_zeraryFxLevel->addRef(); m_zeraryFxLevel->addRef();

View file

@ -27,6 +27,7 @@ set(MOC_HEADERS
../include/toonzqt/functiontreeviewer.h ../include/toonzqt/functiontreeviewer.h
../include/toonzqt/functionviewer.h ../include/toonzqt/functionviewer.h
../include/toonzqt/fxhistogramrender.h ../include/toonzqt/fxhistogramrender.h
../include/toonzqt/fxiconmanager.h
../include/toonzqt/fxschematicnode.h ../include/toonzqt/fxschematicnode.h
../include/toonzqt/fxschematicscene.h ../include/toonzqt/fxschematicscene.h
../include/toonzqt/fxselection.h ../include/toonzqt/fxselection.h
@ -87,7 +88,6 @@ set(HEADERS
../include/toonzqt/dvmimedata.h ../include/toonzqt/dvmimedata.h
../include/toonzqt/flipconsoleowner.h ../include/toonzqt/flipconsoleowner.h
../include/toonzqt/freelayout.h ../include/toonzqt/freelayout.h
../include/toonzqt/fxiconmanager.h
../include/toonzqt/fxtypes.h ../include/toonzqt/fxtypes.h
../include/toonzqt/glwidget_for_highdpi.h ../include/toonzqt/glwidget_for_highdpi.h
../include/toonzqt/lutcalibrator.h ../include/toonzqt/lutcalibrator.h

View file

@ -4,6 +4,8 @@
FxIconPixmapManager::FxIconPixmapManager() {} FxIconPixmapManager::FxIconPixmapManager() {}
FxIconPixmapManager::~FxIconPixmapManager() {}
FxIconPixmapManager *FxIconPixmapManager::instance() { FxIconPixmapManager *FxIconPixmapManager::instance() {
static FxIconPixmapManager _instance; static FxIconPixmapManager _instance;
return &_instance; return &_instance;