Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzLib includes
Toshihiro Shimizu 890ddd
#include "toonz/stage.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshsimplelevel.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshchildlevel.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshleveltypes.h"
Toshihiro Shimizu 890ddd
#include "toonz/txsheet.h"
Toshihiro Shimizu 890ddd
#include "toonz/txshcell.h"
Toshihiro Shimizu 890ddd
#include "toonz/textureutils.h"
Toshihiro Shimizu 890ddd
#include "toonz/imagemanager.h"
Toshihiro Shimizu 890ddd
#include "imagebuilders.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonz/stageplayer.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
using namespace Stage;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//*****************************************************************************************
Toshihiro Shimizu 890ddd
//    Stage::Player  implementation
Toshihiro Shimizu 890ddd
//*****************************************************************************************
Toshihiro Shimizu 890ddd
shun-iwasawa 1d5937
double Player::m_onionSkinFrontSize   = 0;
shun-iwasawa 1d5937
double Player::m_onionSkinBackSize    = 0;
manongjohn 40a40e
double Player::m_firstFrontOnionSkin  = 0;
shun-iwasawa 1d5937
double Player::m_firstBackOnionSkin   = 0;
shun-iwasawa 1d5937
double Player::m_lastBackVisibleSkin  = 0;
shun-iwasawa 1d5937
bool Player::m_isShiftAndTraceEnabled = false;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Stage::Player::Player()
Shinya Kitaoka 120a6e
    : m_placement()
Shinya Kitaoka 120a6e
    , m_dpiAff()
Shinya Kitaoka 120a6e
    , m_z(0)
Shinya Kitaoka 120a6e
    , m_onionSkinDistance(c_noOnionSkin)
Shinya Kitaoka 120a6e
    , m_ancestorColumnIndex(-1)
Shinya Kitaoka 120a6e
    , m_isCurrentColumn(false)
Shinya Kitaoka 120a6e
    , m_isCurrentXsheetLevel(false)
Jeremy Bullock 1e17ed
    , m_isEditingLevel(false)
Jeremy Bullock 1e17ed
    , m_isVisibleinOSM(false)
Shinya Kitaoka 120a6e
    , m_sl()
Shinya Kitaoka 120a6e
    , m_xsh()
Shinya Kitaoka 120a6e
    , m_column(-1)
Shinya Kitaoka 120a6e
    , m_frame(0)
Shinya Kitaoka 120a6e
    , m_isPlaying(false)
Shinya Kitaoka 120a6e
    , m_opacity(255)
Shinya Kitaoka 120a6e
    , m_bingoOrder(0) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TImageP Stage::Player::image() const {
Shinya Kitaoka 120a6e
  if (!m_sl) return TImageP();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  std::string id = m_sl->getImageId(m_fid);
Shinya Kitaoka 120a6e
  int slType     = m_sl->getType();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (slType == PLI_XSHLEVEL && TXshSimpleLevel::m_rasterizePli) {
Shinya Kitaoka 120a6e
    if (!(m_isCurrentColumn && m_isCurrentXsheetLevel)) id = id + "_rasterized";
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  if (TXshSimpleLevel::m_fillFullColorRaster &&
Shinya Kitaoka 120a6e
      (slType == OVL_XSHLEVEL || slType == TZI_XSHLEVEL))
Shinya Kitaoka 120a6e
    id = id + "_filled";
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  ImageLoader::BuildExtData extData(m_sl, m_fid);
Shinya Kitaoka 120a6e
  return ImageManager::instance()->getImage(id, ImageManager::none, &extData);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
DrawableTextureDataP Stage::Player::texture() const {
Shinya Kitaoka 120a6e
  if (m_sl) {
Shinya Kitaoka 120a6e
    // Ask the sLevel directly
Shinya Kitaoka 120a6e
    return texture_utils::getTextureData(
Shinya Kitaoka 120a6e
        m_sl, m_fid, -1);  // -1 stands for 'current subsampling'
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // The level is supposedly a sub-xsheet one. It means we have to build the
Shinya Kitaoka 120a6e
  // texture
Shinya Kitaoka 120a6e
  // by rendering the sub-xsheet.
Shinya Kitaoka 120a6e
  const TXshCell &cell = m_xsh->getCell(m_frame, m_column);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TXshChildLevel *cl = cell.getChildLevel();
Shinya Kitaoka 120a6e
  if (!cl) return DrawableTextureDataP();  // Should never happen, though
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // Fetch the xsheet data
Shinya Kitaoka 120a6e
  TXsheet *xsh = cl->getXsheet();
Shinya Kitaoka 120a6e
  int frame =
Shinya Kitaoka 120a6e
      cell.getFrameId().getNumber() - 1;  // frame 1 internally stands for 0
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  return texture_utils::getTextureData(xsh, frame);
Toshihiro Shimizu 890ddd
}