|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef SWATCHVIEWER_H
|
|
Toshihiro Shimizu |
890ddd |
#define SWATCHVIEWER_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
|
e280ae |
#ifdef _MSC_VER
|
|
Toshihiro Shimizu |
890ddd |
#pragma warning(disable : 4251)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tcommon.h"
|
|
Toshihiro Shimizu |
890ddd |
#include <qwidget></qwidget>
|
|
Toshihiro Shimizu |
890ddd |
#include "tfx.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tparamset.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "trenderer.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tthreadmessage.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tthread.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "trop.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
manongjohn |
2c447c |
#include <qtouchdevice></qtouchdevice>
|
|
manongjohn |
2c447c |
|
|
Toshihiro Shimizu |
890ddd |
using namespace TThread;
|
|
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 |
|
|
manongjohn |
2c447c |
//-----------------------------------------------------------------------------
|
|
manongjohn |
2c447c |
|
|
manongjohn |
2c447c |
// Forward declarations
|
|
manongjohn |
2c447c |
|
|
manongjohn |
2c447c |
class QTouchEvent;
|
|
manongjohn |
2c447c |
class QGestureEvent;
|
|
manongjohn |
2c447c |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI BgPainter {
|
|
Shinya Kitaoka |
120a6e |
std::string m_name;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
BgPainter(std::string name) : m_name(name) {}
|
|
Shinya Kitaoka |
120a6e |
virtual ~BgPainter() {}
|
|
Shinya Kitaoka |
120a6e |
std::string getName() const { return m_name; }
|
|
Shinya Kitaoka |
120a6e |
virtual void paint(const TRaster32P &ras) = 0;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI SolidColorBgPainter final : public BgPainter {
|
|
Shinya Kitaoka |
120a6e |
TPixel32 m_color;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
SolidColorBgPainter(std::string name, TPixel32 color)
|
|
Shinya Kitaoka |
120a6e |
: BgPainter(name), m_color(color) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
473e70 |
void paint(const TRaster32P &ras) override { ras->fill(m_color); }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI CheckboardBgPainter final : public BgPainter {
|
|
Shinya Kitaoka |
120a6e |
TPixel32 m_c0, m_c1;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
CheckboardBgPainter(std::string name, TPixel32 c0, TPixel32 c1)
|
|
Shinya Kitaoka |
120a6e |
: BgPainter(name), m_c0(c0), m_c1(c1) {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void paint(const TRaster32P &ras) override {
|
|
Shinya Kitaoka |
120a6e |
int n = 4, min = 4;
|
|
Shinya Kitaoka |
120a6e |
TDimensionD d(std::max(min, ras->getLx() / n),
|
|
Shinya Kitaoka |
120a6e |
std::max(min, ras->getLy() / n));
|
|
Shinya Kitaoka |
120a6e |
d.lx = d.ly = std::max(d.lx, d.ly);
|
|
Shinya Kitaoka |
120a6e |
TRop::checkBoard(ras, m_c0, m_c1, d, TPointD());
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
/*! \brief SwatchViewer.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Inherits \b QWidget.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI SwatchViewer final : public QWidget {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! La classe \b Point gestisce un punto che e' collegato a parametri \b
|
|
Shinya Kitaoka |
120a6e |
//! TPointParam.
|
|
Shinya Kitaoka |
120a6e |
/*!Questo tipo di punti consentono di modificare alcuni parametri dell'effetto
|
|
Shinya Kitaoka |
120a6e |
corrente e
|
|
Shinya Kitaoka |
120a6e |
sono editabili dall'utente direttamente nello SwatchViewer*/
|
|
Shinya Kitaoka |
120a6e |
class Point {
|
|
Shinya Kitaoka |
120a6e |
public:
|
|
Shinya Kitaoka |
120a6e |
int m_index;
|
|
Shinya Kitaoka |
120a6e |
TPointParamP m_param;
|
|
Shinya Kitaoka |
120a6e |
bool m_pairFlag;
|
|
Shinya Kitaoka |
120a6e |
Point(int index, const TPointParamP ¶m)
|
|
Shinya Kitaoka |
120a6e |
: m_index(index), m_param(param), m_pairFlag(false) {}
|
|
Shinya Kitaoka |
120a6e |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFxP m_fx;
|
|
Shinya Kitaoka |
120a6e |
TFxP m_actualFxClone;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TRaster32P m_raster;
|
|
Shinya Kitaoka |
120a6e |
TRaster32P m_content;
|
|
Shinya Kitaoka |
120a6e |
TAffine m_aff;
|
|
Shinya Kitaoka |
120a6e |
TAffine m_fxAff;
|
|
Shinya Kitaoka |
120a6e |
TAffine m_contentAff;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool m_cameraMode;
|
|
Shinya Kitaoka |
120a6e |
TRect m_cameraRect;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
Qt::MouseButton m_mouseButton;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::vector<point> m_points;</point>
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::pair<int, int="">> m_pointPairs;</std::pair<int,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int m_selectedPoint;
|
|
Shinya Kitaoka |
120a6e |
TPointD m_pointPosDelta;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool m_enabled;
|
|
manongjohn |
2c447c |
bool m_firstEnabled;
|
|
Shinya Kitaoka |
120a6e |
int m_frame;
|
|
Shinya Kitaoka |
120a6e |
TThread::Executor m_executor;
|
|
Shinya Kitaoka |
120a6e |
TThread::Mutex m_mutex;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TRenderer m_renderer;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
BgPainter *m_bgPainter;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TRaster32P m_crossIcon;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPoint m_pos;
|
|
Shinya Kitaoka |
120a6e |
TPoint m_firstPos;
|
|
Shinya Kitaoka |
120a6e |
TRaster32P m_oldContent, m_curContent;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool m_computing;
|
|
Toshihiro Shimizu |
890ddd |
|
|
manongjohn |
2c447c |
bool m_touchActive = false;
|
|
manongjohn |
2c447c |
bool m_gestureActive = false;
|
|
manongjohn |
2c447c |
QTouchDevice::DeviceType m_touchDevice = QTouchDevice::TouchScreen;
|
|
manongjohn |
2c447c |
bool m_zooming = false;
|
|
manongjohn |
2c447c |
bool m_panning = false;
|
|
manongjohn |
2c447c |
double m_scaleFactor; // used for zoom gesture
|
|
manongjohn |
2c447c |
|
|
manongjohn |
2c447c |
bool m_stylusUsed = false;
|
|
manongjohn |
2c447c |
|
|
Shinya Kitaoka |
120a6e |
friend class ContentRender;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
d1f6c4 |
class ContentRender final : public TThread::Runnable {
|
|
Shinya Kitaoka |
120a6e |
public:
|
|
Shinya Kitaoka |
120a6e |
TRasterFxP m_fx;
|
|
Shinya Kitaoka |
120a6e |
TRasterP m_raster;
|
|
Shinya Kitaoka |
120a6e |
int m_frame;
|
|
Shinya Kitaoka |
120a6e |
TDimension m_size;
|
|
Shinya Kitaoka |
120a6e |
TAffine m_aff;
|
|
Shinya Kitaoka |
120a6e |
SwatchViewer *m_viewer;
|
|
Shinya Kitaoka |
120a6e |
bool m_started;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
ContentRender(TRasterFx *fx, int frame, const TDimension &size,
|
|
Shinya Kitaoka |
120a6e |
SwatchViewer *viewer);
|
|
Shinya Kitaoka |
120a6e |
~ContentRender();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void run() override;
|
|
Shinya Kitaoka |
473e70 |
int taskLoad() override;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
void onStarted(TThread::RunnableP task) override;
|
|
Shinya Kitaoka |
473e70 |
void onFinished(TThread::RunnableP task) override;
|
|
Shinya Kitaoka |
473e70 |
void onCanceled(TThread::RunnableP task) override;
|
|
Shinya Kitaoka |
120a6e |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#if QT_VERSION >= 0x050500
|
|
Shinya Kitaoka |
120a6e |
SwatchViewer(QWidget *parent = 0, Qt::WindowFlags flags = 0);
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
SwatchViewer(QWidget *parent = 0, Qt::WFlags flags = 0);
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Shinya Kitaoka |
120a6e |
~SwatchViewer();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void suspendRendering(bool suspend, bool blocking = true);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setCameraMode(bool enabled) { m_cameraMode = enabled; }
|
|
Shinya Kitaoka |
120a6e |
bool getCameraMode() const { return m_cameraMode; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setCameraSize(const TDimension &cameraSize);
|
|
Shinya Kitaoka |
120a6e |
TDimension getCameraSize() const { return m_cameraRect.getSize(); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setFx(const TFxP &fx, const TFxP &actualFx, int frame);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void updateFrame(int frame);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool isEnabled() { return m_enabled; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public slots:
|
|
Shinya Kitaoka |
120a6e |
void setEnable(bool enabled);
|
|
Shinya Kitaoka |
120a6e |
void updateSize(const QSize &size);
|
|
Shinya Kitaoka |
120a6e |
void setBgPainter(TPixel32 color1, TPixel32 color2 = TPixel32());
|
|
manongjohn |
2c447c |
void resetView();
|
|
manongjohn |
2c447c |
void fitView();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
120a6e |
void computeContent();
|
|
Shinya Kitaoka |
120a6e |
TPoint world2win(const TPointD &p) const;
|
|
Shinya Kitaoka |
120a6e |
TPointD win2world(const TPoint &p) const;
|
|
Shinya Kitaoka |
120a6e |
void zoom(const TPoint &pos, double factor);
|
|
Shinya Kitaoka |
120a6e |
void zoom(bool forward, bool reset);
|
|
manongjohn |
2c447c |
void pan(const TPoint &delta);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void updateRaster();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
const TRaster32P &getContent() const { return m_content; }
|
|
Shinya Kitaoka |
120a6e |
void setContent(const TRaster32P &content, const TAffine &contentAff);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setAff(const TAffine &aff);
|
|
Toshihiro Shimizu |
890ddd |
|
|
manongjohn |
2c447c |
void contextMenuEvent(QContextMenuEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void paintEvent(QPaintEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void mousePressEvent(QMouseEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseMoveEvent(QMouseEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseReleaseEvent(QMouseEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void wheelEvent(QWheelEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void keyPressEvent(QKeyEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void resizeEvent(QResizeEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void hideEvent(QHideEvent *event) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
manongjohn |
2c447c |
void mouseDoubleClickEvent(QMouseEvent *event) override;
|
|
manongjohn |
2c447c |
void tabletEvent(QTabletEvent *e) override;
|
|
manongjohn |
2c447c |
void touchEvent(QTouchEvent *e, int type);
|
|
manongjohn |
2c447c |
void gestureEvent(QGestureEvent *e);
|
|
manongjohn |
2c447c |
bool event(QEvent *e) override;
|
|
manongjohn |
2c447c |
|
|
manongjohn |
2c447c |
private:
|
|
manongjohn |
2c447c |
QPointF m_firstPanPoint;
|
|
manongjohn |
2c447c |
|
|
Toshihiro Shimizu |
890ddd |
signals:
|
|
Shinya Kitaoka |
120a6e |
void pointPositionChanged(int index, const TPointD &p);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#endif // SWATCHVIEWER_H
|