Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef IMAGEUTILS_H
Toshihiro Shimizu 890ddd
#define IMAGEUTILS_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzBase includes
Toshihiro Shimizu 890ddd
#include "trasterfx.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// TnzCore includes
Toshihiro Shimizu 890ddd
#include "tregion.h"
Toshihiro Shimizu 890ddd
#include "tvectorimage.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// Qt includes
Toshihiro Shimizu 890ddd
#include <qwidget></qwidget>
Toshihiro Shimizu 890ddd
#include <qkeyevent></qkeyevent>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TOONZQT_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//    Forward declarations
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TFilePath;
Toshihiro Shimizu 890ddd
class TPropertyGroup;
Toshihiro Shimizu 890ddd
//enum TRenderSettings::ResampleQuality;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class QHBoxLayout;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
namespace ImageUtils
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  \brief    Notify that a task on a single frame is completed.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
class DVAPI FrameTaskNotifier : public QObject
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int m_errorCount,
Toshihiro Shimizu 890ddd
		m_warningCount;
Toshihiro Shimizu 890ddd
	bool m_abort;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	FrameTaskNotifier() : m_errorCount(0), m_warningCount(0), m_abort(false) {}
Toshihiro Shimizu 890ddd
	~FrameTaskNotifier() {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void notifyFrameCompleted(int frame) { emit frameCompleted(frame); }
Toshihiro Shimizu 890ddd
	void notifyError()
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		m_errorCount++;
Toshihiro Shimizu 890ddd
		emit error();
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
	void notifyLevelCompleted(const TFilePath &fullPath) { emit levelCompleted(fullPath); }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool abortTask() { return m_abort; }
Toshihiro Shimizu 890ddd
	void reset() { m_abort = false; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	int getErrorCount() const { return m_errorCount; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
signals:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void frameCompleted(int);
Toshihiro Shimizu 890ddd
	void levelCompleted(const TFilePath &fullPath);
Toshihiro Shimizu 890ddd
	void error();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected slots:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void onCancelTask() { m_abort = true; }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//----------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TFilePath DVAPI duplicate(const TFilePath &levelPath);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void DVAPI premultiply(const TFilePath &levelPath);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void DVAPI convert(
Toshihiro Shimizu 890ddd
	const TFilePath &source,					 //!< Level path to convert from.
Toshihiro Shimizu 890ddd
	const TFilePath &dest,						 //!< Level path to convert to.
Toshihiro Shimizu 890ddd
	const TFrameId &from,						 //!< First source frame to convert. Supports TFrameId::EMPTY_FRAME
Toshihiro Shimizu 890ddd
												 //!  to specify conversion from the beginning of level.
Toshihiro Shimizu 890ddd
	const TFrameId &to,							 //!< Last source frame to convert. Supports TFrameId::EMPTY_FRAME
Toshihiro Shimizu 890ddd
												 //!  to specify conversion to the end of level.
Toshihiro Shimizu 890ddd
	double framerate,							 //!< Frame rate for destination movie formats.
Toshihiro Shimizu 890ddd
	TPropertyGroup *prop,						 //!< Format properties for the destination level.
Toshihiro Shimizu 890ddd
	FrameTaskNotifier *frameNotifier,			 //!< Observer class for frame success notifications.
Toshihiro Shimizu 890ddd
	const TPixel &bgColor = TPixel::Transparent, //!< Destination Background color.
Toshihiro Shimizu 890ddd
	bool removeDotBeforeFrameNumber = false		 /*-- ConvertPopup での指定に合わせて、[レベル名].[フレーム番号].[拡張子]のうち、
Toshihiro Shimizu 890ddd
																     [レベル名]と[フレーム番号]の間のドットを消す。 --*/
Toshihiro Shimizu 890ddd
	);											 //!< Converts a saved level to fullcolor, and saves the result.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void DVAPI convertNaa2Tlv(
Toshihiro Shimizu 890ddd
	const TFilePath &source,		  //!< Level path to convert from.
Toshihiro Shimizu 890ddd
	const TFilePath &dest,			  //!< Level path to convert to.
Toshihiro Shimizu 890ddd
	const TFrameId &from,			  //!< First source frame to convert.
Toshihiro Shimizu 890ddd
	const TFrameId &to,				  //!< Last source frame to convert.
Toshihiro Shimizu 890ddd
	FrameTaskNotifier *frameNotifier, //!< Observer class for frame success notifications.
Toshihiro Shimizu 890ddd
	TPalette *palette = 0);			  //!< Special conversion function from an antialiased level to tlv.
Toshihiro Shimizu 890ddd
									  //!  \sa  Function ImageUtils::convert().
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
double DVAPI getQuantizedZoomFactor(double zf, bool forward);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void DVAPI getFillingInformationOverlappingArea(
Toshihiro Shimizu 890ddd
	const TVectorImageP &vi,
Toshihiro Shimizu 890ddd
	std::vector<tfilledregioninf> ®s,</tfilledregioninf>
Toshihiro Shimizu 890ddd
	const TRectD &area1,
Toshihiro Shimizu 890ddd
	const TRectD &area2 = TRectD());
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void DVAPI getFillingInformationInArea(
Toshihiro Shimizu 890ddd
	const TVectorImageP &vi,
Toshihiro Shimizu 890ddd
	std::vector<tfilledregioninf> ®s,</tfilledregioninf>
Toshihiro Shimizu 890ddd
	const TRectD &area);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void DVAPI assignFillingInformation(
Toshihiro Shimizu 890ddd
	TVectorImage &vi,
Toshihiro Shimizu 890ddd
	const std::vector<tfilledregioninf> ®s);</tfilledregioninf>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void DVAPI getStrokeStyleInformationInArea(
Toshihiro Shimizu 890ddd
	const TVectorImageP &vi,
Shinya Kitaoka 3bfa54
	std::vector<std::pair<int, int="">> &strokesInfo, // pair:strokeIndex, styleIndex</std::pair<int,>
Toshihiro Shimizu 890ddd
	const TRectD &area);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//*********************************************************************************************
Toshihiro Shimizu 890ddd
//    FullScreenWidget  declaration
Toshihiro Shimizu 890ddd
//*********************************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  \brief    Temporary class used to deal with QTBUG #7556 - QGLWidgets going fullscreen \a need
Toshihiro Shimizu 890ddd
            a containing widget that leaves a small margin to prevent the widget from covering other
Toshihiro Shimizu 890ddd
            widgets (specifically, context menus).
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI FullScreenWidget : public QWidget
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	Q_OBJECT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QWidget *m_widget; //!< (Owned) The content widget.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	FullScreenWidget(QWidget *parent = 0);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setWidget(QWidget *widget); //!< Sets the content, surrendering ownership.
Toshihiro Shimizu 890ddd
	QWidget *widget() const { return m_widget; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public slots:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool toggleFullScreen(bool quit = false);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//*********************************************************************************************
Toshihiro Shimizu 890ddd
//    ShortcutZoomer  declaration
Toshihiro Shimizu 890ddd
//*********************************************************************************************
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  \brief    The ShortcutZoomer abstract base class is used by viewer widget to access
Toshihiro Shimizu 890ddd
            shortcut-related commands.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  \details  This class is a wrapper for shortcuts established by the CommandManager
Toshihiro Shimizu 890ddd
            interface.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
            Subclass it defining the required view commands, then implement a
Toshihiro Shimizu 890ddd
            \p keyPressEvent() event handler in the viewer widget you want:
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
            \code
Toshihiro Shimizu 890ddd
            void MyViewer::keyPressEvent(QKeyEvent* ke)
Toshihiro Shimizu 890ddd
            {
Toshihiro Shimizu 890ddd
              if(ViewerZoomer(this).exec(event))
Toshihiro Shimizu 890ddd
                return;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
              return MyViewerBase::keyPressEvent(ke);
Toshihiro Shimizu 890ddd
            }
Toshihiro Shimizu 890ddd
            \endcode
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
  \warning  Use the FullScreenWidget class to wrap a viewer class that
Toshihiro Shimizu 890ddd
            needs to go fullscreen.
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class DVAPI ShortcutZoomer
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	QWidget *m_widget; //!< Viewer widget being processed.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	ShortcutZoomer(QWidget *viewerWidget); //!< Constructs on the specified viewer widget.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	QWidget *getWidget() { return m_widget; } //!< Returns the processed viewer widget.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool exec(QKeyEvent *event); //!< Processes a key event for shortcuts related to
Toshihiro Shimizu 890ddd
								 //!  viewer commands.
Toshihiro Shimizu 890ddd
								 //!  \return  Whether a shortcut was recognized.
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	virtual bool zoom(bool zoomin, bool resetZoom) = 0; //!< Handler for zoom commands. Required.
Toshihiro Shimizu 890ddd
	virtual bool fit() { return false; }				//!< Handler for 'fit to image' commands.
Toshihiro Shimizu 890ddd
	virtual bool setActualPixelSize() { return false; } //!< Handler for 'use actual pixel size' commands.
Toshihiro Shimizu 890ddd
	virtual bool toggleFullScreen(bool quit = false)	//!  Handler for 'toggle fullscreen' commands.
Toshihiro Shimizu 890ddd
	{
Toshihiro Shimizu 890ddd
		return false;
Toshihiro Shimizu 890ddd
	}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
} // namespace ImageUtils
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif