1 #pragma once 2 3 #ifndef PREVIEWER_INCLUDED 4 #define PREVIEWER_INCLUDED 5 6 #include <memory> 7 8 #include "traster.h" 9 #include "tfx.h" 10 11 #include "trenderer.h" 12 13 #include <QObject> 14 #include <QTimer> 15 16 // forward declarations 17 class TRenderSettings; 18 class TXshLevel; 19 class TFrameId; 20 class TFilePath; 21 // class TRenderPort 22 // { 23 // class RenderData; 24 // }; 25 // class TRenderPort::RenderData; 26 27 //============================================================================= 28 // Previewer 29 //----------------------------------------------------------------------------- 30 31 class Previewer final : public QObject, public TFxObserver { 32 Q_OBJECT 33 34 class Imp; 35 std::unique_ptr<Imp> m_imp; 36 37 Previewer(bool subcamera); 38 ~Previewer(); 39 40 // not implemented 41 Previewer(const Previewer &); 42 void operator=(const Previewer &); 43 44 public: 45 class Listener { 46 public: 47 QTimer m_refreshTimer; 48 49 Listener(); ~Listener()50 virtual ~Listener() {} 51 52 void requestTimedRefresh(); 53 virtual TRectD getPreviewRect() const = 0; 54 onRenderStarted(int frame)55 virtual void onRenderStarted(int frame){}; onRenderCompleted(int frame)56 virtual void onRenderCompleted(int frame){}; onRenderFailed(int frame)57 virtual void onRenderFailed(int frame){}; 58 onPreviewUpdate()59 virtual void onPreviewUpdate() {} 60 }; 61 62 public: 63 static Previewer *instance(bool subcameraPreview = false); 64 65 static void clearAll(); 66 67 static void suspendRendering(bool suspend); 68 69 void addListener(Listener *); 70 void removeListener(Listener *); 71 72 TRasterP getRaster(int frame, bool renderIfNeeded = true) const; 73 bool isFrameReady(int frame) const; 74 75 bool doSaveRenderedFrames(TFilePath fp); 76 77 bool isActive() const; 78 bool isBusy() const; 79 80 void onChange(const TFxChange &change) override; 81 82 void onImageChange(TXshLevel *xl, const TFrameId &fid); 83 void onLevelChange(TXshLevel *xl); 84 85 void clear(int frame); 86 void clear(); 87 88 std::vector<UCHAR> &getProgressBarStatus() const; 89 90 private: 91 friend class Imp; 92 void emitStartedFrame(const TRenderPort::RenderData &renderData); 93 void emitRenderedFrame(const TRenderPort::RenderData &renderData); 94 void emitFailedFrame(const TRenderPort::RenderData &renderData); 95 96 signals: 97 98 void activedChanged(); 99 void startedFrame(TRenderPort::RenderData renderData); 100 void renderedFrame(TRenderPort::RenderData renderData); 101 void failedFrame(TRenderPort::RenderData renderData); 102 103 public slots: 104 105 void saveFrame(); 106 void saveRenderedFrames(); 107 108 void update(); 109 void updateView(); 110 111 void onLevelChanged(); 112 void onFxChanged(); 113 void onXsheetChanged(); 114 void onObjectChanged(); 115 116 protected slots: 117 118 void onStartedFrame(TRenderPort::RenderData renderData); 119 void onRenderedFrame(TRenderPort::RenderData renderData); 120 void onFailedFrame(TRenderPort::RenderData renderData); 121 }; 122 123 #endif 124