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;
TXshZeraryFxLevel *m_zeraryFxLevel;
bool m_iconVisible;
public:
bool isIconVisible() { return m_iconVisible; }
void setIconVisible(bool visible) { m_iconVisible = visible; }
/*!
Constructs a TXshZeraryFxColumn with default value.
*/

View file

@ -9,6 +9,18 @@
#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;
namespace {
@ -136,13 +148,16 @@ const struct {
{0, 0}};
};
class FxIconPixmapManager { // singleton
std::map<std::string, QPixmap> m_pms;
FxIconPixmapManager();
class DVAPI FxIconPixmapManager final : public QObject { // singleton
Q_OBJECT
public:
std::map<std::string, QPixmap> m_pms;
public:
FxIconPixmapManager();
~FxIconPixmapManager();
static FxIconPixmapManager *instance();
const QPixmap &getFxIconPm(std::string type);

View file

@ -17,6 +17,7 @@
#include "toonzqt/gutil.h"
#include "toonzqt/icongenerator.h"
#include "toonzqt/intfield.h"
#include "toonzqt/fxiconmanager.h"
// TnzLib includes
#include "toonz/txshcolumn.h"
@ -1111,26 +1112,15 @@ void ColumnArea::DrawHeader::drawThumbnail(QPixmap &iconPixmap) const {
// All other thumbnails
p.setPen(m_viewer->getTextColor());
// for zerary fx, display fxId here instead of thumbnail
TXshZeraryFxColumn *zColumn = dynamic_cast<TXshZeraryFxColumn *>(column);
if (zColumn) {
QFont lastfont = p.font();
QFont font("Verdana", 8);
p.setFont(font);
TFx *fx = zColumn->getZeraryColumnFx()->getZeraryFx();
QString fxName = QString::fromStdWString(fx->getFxId());
p.drawText(thumbnailImageRect, Qt::TextWrapAnywhere | Qt::TextWordWrap,
fxName);
p.setFont(lastfont);
} else {
TXshLevelColumn *levelColumn = column->getLevelColumn();
TXshMeshColumn *meshColumn = column->getMeshColumn();
TXshZeraryFxColumn *zColumn = dynamic_cast<TXshZeraryFxColumn *>(column);
if (Preferences::instance()->getColumnIconLoadingPolicy() ==
Preferences::LoadOnDemand &&
((levelColumn && !levelColumn->isIconVisible()) ||
(meshColumn && !meshColumn->isIconVisible())) &&
(meshColumn && !meshColumn->isIconVisible()) ||
(zColumn && !zColumn->isIconVisible())) &&
col >= 0) {
// display nothing
} else {
@ -1142,7 +1132,8 @@ void ColumnArea::DrawHeader::drawThumbnail(QPixmap &iconPixmap) const {
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)
return QPixmap();
else {
TXshColumn *column = xsh->getColumn(columnIndex);
TXshZeraryFxColumn *zColumn = dynamic_cast<TXshZeraryFxColumn *>(column);
bool onDemand = false;
if (Preferences::instance()->getColumnIconLoadingPolicy() ==
Preferences::LoadOnDemand) {
onDemand = m_viewer->getCurrentColumn() != columnIndex;
if (!onDemand) {
TXshColumn *column = xsh->getColumn(columnIndex);
TXshLevelColumn *levelColumn = column->getLevelColumn();
TXshMeshColumn *meshColumn = column->getMeshColumn();
if ((levelColumn && !levelColumn->isIconVisible()) ||
(meshColumn && !meshColumn->isIconVisible()))
(meshColumn && !meshColumn->isIconVisible()) ||
(zColumn && !zColumn->isIconVisible()))
return QPixmap();
}
}
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);
if (thumbnailImageRect.isEmpty()) return QPixmap();
return scalePixmapKeepingAspectRatio(icon, thumbnailImageRect.size());
@ -2327,6 +2324,8 @@ void ColumnArea::mousePressEvent(QMouseEvent *event) {
// toggle columnIcon visibility with alt+click
TXshLevelColumn *levelColumn = column->getLevelColumn();
TXshMeshColumn *meshColumn = column->getMeshColumn();
TXshZeraryFxColumn *zColumn =
dynamic_cast<TXshZeraryFxColumn *>(column);
if (Preferences::instance()->getColumnIconLoadingPolicy() ==
Preferences::LoadOnDemand &&
(event->modifiers() & Qt::AltModifier)) {
@ -2334,6 +2333,8 @@ void ColumnArea::mousePressEvent(QMouseEvent *event) {
levelColumn->setIconVisible(!levelColumn->isIconVisible());
else if (meshColumn)
meshColumn->setIconVisible(!meshColumn->isIconVisible());
else if (zColumn)
zColumn->setIconVisible(!zColumn->isIconVisible());
}
}
}

View file

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

View file

@ -27,6 +27,7 @@ set(MOC_HEADERS
../include/toonzqt/functiontreeviewer.h
../include/toonzqt/functionviewer.h
../include/toonzqt/fxhistogramrender.h
../include/toonzqt/fxiconmanager.h
../include/toonzqt/fxschematicnode.h
../include/toonzqt/fxschematicscene.h
../include/toonzqt/fxselection.h
@ -87,7 +88,6 @@ set(HEADERS
../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

View file

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