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