Blob Blame Raw
#pragma once

#ifndef TVECTORRENDERDATA_H
#define TVECTORRENDERDATA_H

// TnzCore includes
#include "tgeometry.h"
#include "tpixel.h"

#undef DVAPI
#undef DVVAR
#ifdef TVRENDER_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif

//========================================================================

//    Forward declarations

class TPalette;
class TColorFunction;

//========================================================================

//**********************************************************************************
//    TVectorRenderData  definition
//**********************************************************************************

/*!
  \brief    Stores parameters for rendering vector images in Toonz.
*/

class DVAPI TVectorRenderData
{
public:
	/*! \brief  Tag representing default settings for work-quality rendering
              to be displayed on Toonz widgets.                                     */

	struct ViewerSettings {
	};

	/*! \brief  Tag representing default settings for production-quality
              rendering to be stored on image files.                                */

	struct ProductionSettings {
	};

public:
	const TColorFunction *m_cf; //!< [\p not-owned] Transform to be used for drawing RGBM colors.
	const TPalette *m_palette;  //!< [\p not-owned] Palette to be used for translating color indexes to
								//!                 RGBM colors.
	TAffine m_aff;				//!< Geometric transform to be applied on image rendering.

	TRect m_clippingRect; //!< Integral rect where the image drawing will be restricted on;
						  //!  if empty, clipping is assumed to be disabled.
						  //!  \internal  Coordinates reference?
	TPixel m_tCheckInk;   //!< Color to be used for <I>ink check</I> mode.
	TPixel m_tCheckPaint; //!< Color to be used for <I>paint check</I> mode.

	int m_colorCheckIndex; //!< Color index to be highlighted in <I>color check</I> mode.

	bool m_alphaChannel,	 //!< Whether alpha channel is enabled.
		m_antiAliasing,		 //!< Whether antialiasing must be applied.
		m_isImagePattern,	//!< \internal  Seems like a bad bug-patch - inquire further...
		m_drawRegions,		 //!< Inks only mode.
		m_tcheckEnabled,	 //!< Transparency check mode.
		m_inkCheckEnabled,   //!< Ink check mode.
		m_paintCheckEnabled, //!< Paint check mode.
		m_blackBgEnabled,	//!< Black background mode.
		m_isIcon,			 //!< Whether image rendering is for an icon.
		m_is3dView,			 //!< Whether image rendering is in 3D mode.
		m_show0ThickStrokes, //!< Whether strokes with 0 thickness should be rendered anyway.
		m_regionAntialias,   //!< Whether regions should be rendered with antialiasing at boundaries.
		m_isOfflineRender;   //!< Whether image rendering is in render or camera-stand (preview) mode.
							 //!  \deprecated  Use the above individual options instead.
							 //!  \todo  Remove it ASAP.
public:
	TVectorRenderData(ViewerSettings,
					  const TAffine &aff,
					  const TRect &clippingRect,
					  const TPalette *palette,
					  const TColorFunction *cf = 0)
		: m_cf(cf), m_palette(palette), m_aff(aff), m_clippingRect(clippingRect), m_tCheckInk(TPixel::Black), m_tCheckPaint(TPixel(128, 128, 128)), m_colorCheckIndex(-1), m_alphaChannel(false) // Camera stand-like widgets have opaque background
		  ,
		  m_antiAliasing(true) // Jaggy-free pretty images, antialias is not that costly
		  ,
		  m_isImagePattern(false) // Patch variable - internal use
		  ,
		  m_drawRegions(true) // Paint regions painted
		  ,
		  m_tcheckEnabled(false) // No checks
		  ,
		  m_inkCheckEnabled(false), m_paintCheckEnabled(false), m_blackBgEnabled(false), m_isIcon(false) // Not an icon by default
		  ,
		  m_is3dView(false) // Standard view by default
		  ,
		  m_show0ThickStrokes(true) // Wanna see every stroke, even invisible ones
		  ,
		  m_regionAntialias(false) // No need for pretty region boundaries, typically shadowed by strokes
								   // This is also related to interference with the directly above param
		  ,
		  m_isOfflineRender(false)
	{
	} // By definition

	TVectorRenderData(ProductionSettings,
					  const TAffine &aff,
					  const TRect &clippingRect,
					  const TPalette *palette,
					  const TColorFunction *cf = 0)
		: m_cf(cf), m_palette(palette), m_aff(aff), m_clippingRect(clippingRect), m_tCheckInk(TPixel::Black), m_tCheckPaint(TPixel(128, 128, 128)), m_colorCheckIndex(-1), m_alphaChannel(true) // No opaque background - freestanding images with alpha
		  ,
		  m_antiAliasing(true) // Jaggy-free pretty images
		  ,
		  m_isImagePattern(false) // Patch variable - internal use
		  ,
		  m_drawRegions(true) // Paint regions painted
		  ,
		  m_tcheckEnabled(false) // No checks
		  ,
		  m_inkCheckEnabled(false), m_paintCheckEnabled(false), m_blackBgEnabled(false), m_isIcon(false) // Not an icon by default
		  ,
		  m_is3dView(false) // Definitely standard view
		  ,
		  m_show0ThickStrokes(false) // Invisible strokes must be invisible
		  ,
		  m_regionAntialias(true) // Pretty region boundaries under invisible or
								  // semitransparent strokes
		  ,
		  m_isOfflineRender(true)
	{
	} // By definition

	TVectorRenderData(const TVectorRenderData &other,
					  const TAffine &aff,
					  const TRect &clippingRect,
					  const TPalette *palette,
					  const TColorFunction *cf = 0)
		: m_cf(cf), m_palette(palette), m_aff(aff), m_clippingRect(clippingRect), m_tCheckInk(other.m_tCheckInk), m_tCheckPaint(other.m_tCheckPaint), m_colorCheckIndex(other.m_colorCheckIndex), m_alphaChannel(other.m_alphaChannel), m_antiAliasing(other.m_antiAliasing), m_isImagePattern(other.m_isImagePattern), m_drawRegions(other.m_drawRegions), m_tcheckEnabled(other.m_tcheckEnabled), m_inkCheckEnabled(other.m_inkCheckEnabled), m_paintCheckEnabled(other.m_paintCheckEnabled), m_blackBgEnabled(other.m_blackBgEnabled), m_isIcon(other.m_isIcon), m_is3dView(other.m_is3dView), m_show0ThickStrokes(other.m_show0ThickStrokes), m_regionAntialias(other.m_regionAntialias), m_isOfflineRender(other.m_isOfflineRender) {} //!< Constructs from explicit primary context settings while
																																																																																																																																																																																			//!  copying the rest from another instance.

	TVectorRenderData(const TAffine &aff,
					  const TRect &clippingRect,
					  const TPalette *palette,
					  const TColorFunction *cf,
					  bool alphaChannel = false,
					  bool antiAliasing = true,
					  bool is3dView = false)
		: m_cf(cf), m_palette(palette), m_aff(aff), m_clippingRect(clippingRect), m_tCheckInk(TPixel::Black), m_tCheckPaint(TPixel(128, 128, 128)), m_colorCheckIndex(-1), m_alphaChannel(alphaChannel), m_antiAliasing(antiAliasing), m_isImagePattern(false), m_drawRegions(true), m_tcheckEnabled(false), m_inkCheckEnabled(false), m_paintCheckEnabled(false), m_blackBgEnabled(false), m_isIcon(false), m_is3dView(is3dView), m_show0ThickStrokes(true), m_regionAntialias(false), m_isOfflineRender(false) {} //!< Constructs settings with default ViewerSettings.
																																																																																																																													//!  \deprecated   Use constructors with explicit settings type tag.
};

#endif // TVECTORRENDERDATA_H