Shinya Kitaoka 810553
#pragma once
Shinya Kitaoka 810553
Toshihiro Shimizu 890ddd
#ifndef MOVIEGENERATOR_INCLUDED
Toshihiro Shimizu 890ddd
#define MOVIEGENERATOR_INCLUDED
Toshihiro Shimizu 890ddd
Shinya Kitaoka 262a92
#include <memory></memory>
Shinya Kitaoka 262a92
Toshihiro Shimizu 890ddd
#include "tfilepath.h"
Toshihiro Shimizu 890ddd
#include "tpixel.h"
Toshihiro Shimizu 890ddd
#include "tgeometry.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// forward declaration
Toshihiro Shimizu 890ddd
class ProgressMeter;
Toshihiro Shimizu 890ddd
class TSceneProperties;
Toshihiro Shimizu 890ddd
class TXsheet;
Toshihiro Shimizu 890ddd
class ToonzScene;
Toshihiro Shimizu 890ddd
class OnionSkinMask;
Toshihiro Shimizu 890ddd
class TWidget;
Toshihiro Shimizu 890ddd
class TOutputProperties;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// MovieGenerator
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class MovieGenerator {
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  class Imp;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  std::unique_ptr<imp> m_imp;</imp>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  class Listener {
Shinya Kitaoka 120a6e
  public:
Shinya Kitaoka 120a6e
    //! if listener returns false then the movie generation aborts
Shinya Kitaoka 120a6e
    virtual bool onFrameCompleted(int frameCount) = 0;
Shinya Kitaoka 120a6e
    virtual ~Listener() {}
Shinya Kitaoka 120a6e
  };
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  MovieGenerator(const TFilePath &outputPath,
Shinya Kitaoka 120a6e
                 const TDimension &cameraResolution,
Shinya Kitaoka 120a6e
                 TOutputProperties &outputProperties, bool useMarkers);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  ~MovieGenerator();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setListener(Listener *listener);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! set how many scenes will be generated. call it once, at the beginning
Shinya Kitaoka 120a6e
  void setSceneCount(int sceneCount);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Note: add soundtrack BEFORE scene.
Shinya Kitaoka 120a6e
  bool addSoundtrack(const ToonzScene &scene, int frameOffset,
Shinya Kitaoka 120a6e
                     int sceneFramesCount);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool addScene(ToonzScene &scene, int r0, int r1);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setBackgroundColor(TPixel32 color);
Shinya Kitaoka 120a6e
  TPixel32 getBackgroundColor();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setOnionSkin(int columnIndex, const OnionSkinMask &mask);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TFilePath getOutputPath();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void close();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  // not implemented
Shinya Kitaoka 120a6e
  MovieGenerator(const MovieGenerator &);
Shinya Kitaoka 120a6e
  MovieGenerator &operator=(const MovieGenerator &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif