tahoma2d/toonz/sources/include/toonzqt/fxhistogramrender.h

111 lines
2.5 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef FXHISTOGRAMRENDER_H
#define FXHISTOGRAMRENDER_H
#include "tcommon.h"
#include <QWidget>
#include "tfx.h"
#include "trenderer.h"
#include "tthreadmessage.h"
#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
// forward declaration
class Histograms;
class TFxHandle;
class TFrameHandle;
class TXsheetHandle;
class TSceneHandle;
class TXshLevelHandle;
class ToonzScene;
//=========================================================
// FxHistogramRenderPort
//---------------------------------------------------------
2016-06-15 18:43:10 +12:00
//! Implements the TRenderPort virtual class
//! This class receives and handles signals from the TThread::Runnable class
//! that make the render of frame.
class FxHistogramRenderPort final : public QObject, public TRenderPort {
2016-06-15 18:43:10 +12:00
Q_OBJECT
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
FxHistogramRenderPort();
~FxHistogramRenderPort();
2016-03-19 06:57:51 +13:00
2016-06-19 20:06:29 +12:00
void onRenderRasterCompleted(const RenderData &renderData) override;
2016-06-20 14:23:05 +12:00
void onRenderFailure(const RenderData &renderData, TException &e) override{};
2016-06-15 18:43:10 +12:00
void onRenderFinished(){};
2016-03-19 06:57:51 +13:00
signals:
2016-06-15 18:43:10 +12:00
void renderCompleted(const TRasterP &, UINT);
void renderFailure(double);
2016-03-19 06:57:51 +13:00
};
//=========================================================
// FxHistogramRender
//---------------------------------------------------------
class DVAPI FxHistogramRender final : public QObject {
2016-06-15 18:43:10 +12:00
Q_OBJECT
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
//! Stores some information about the frame to render needed to the
//! PreviewFxManager class
class FrameInfo {
public:
FrameInfo() : m_frame(-1), m_renderId((UINT)-1) {}
TFxP m_fx;
std::string m_fxAlias;
int m_frame;
//! renderId given from renderer
UINT m_renderId;
};
FxHistogramRenderPort *m_renderPort;
TRenderer m_renderer;
FrameInfo m_lastFrameInfo;
TThread::Mutex m_mutex;
QList<UINT> m_abortedRendering;
ToonzScene *m_scene;
Histograms *m_histograms;
bool m_isCameraViewMode;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
FxHistogramRender();
~FxHistogramRender();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
static FxHistogramRender *instance();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void setScene(ToonzScene *scene);
void setHistograms(Histograms *histograms);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void setIsCameraViewMode(bool isCameraViewMode) {
m_isCameraViewMode = isCameraViewMode;
}
bool isCameraViewMode() { return m_isCameraViewMode; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void computeHistogram(TFxP fx, int frame);
void invalidateFrame(int frame);
2016-03-19 06:57:51 +13:00
private:
2016-06-15 18:43:10 +12:00
void remakeRender();
void updateRenderer(int frame);
2016-03-19 06:57:51 +13:00
protected slots:
2016-06-15 18:43:10 +12:00
void onRenderCompleted(const TRasterP &, UINT);
2016-03-19 06:57:51 +13:00
};
2016-06-15 18:43:10 +12:00
#endif // FXHISTOGRAMRENDER_H