157 lines
3.3 KiB
C
157 lines
3.3 KiB
C
|
|
||
|
|
||
|
#ifndef SPECTRUMFIELD_H
|
||
|
#define SPECTRUMFIELD_H
|
||
|
|
||
|
#include <QWidget>
|
||
|
#include "toonzqt/colorfield.h"
|
||
|
#include "tpixel.h"
|
||
|
#include "tspectrum.h"
|
||
|
|
||
|
#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 declaration
|
||
|
|
||
|
//=============================================================================
|
||
|
|
||
|
namespace DVGui
|
||
|
{
|
||
|
|
||
|
//=============================================================================
|
||
|
// SpectrumBar
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
class DVAPI SpectrumBar : public QWidget
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
int m_x0;
|
||
|
int m_currentKeyIndex;
|
||
|
|
||
|
QPixmap m_chessBg;
|
||
|
|
||
|
TSpectrum m_spectrum;
|
||
|
|
||
|
public:
|
||
|
SpectrumBar(QWidget *parent = 0,
|
||
|
TPixel32 color = TPixel32(0, 0, 0, 255));
|
||
|
|
||
|
~SpectrumBar();
|
||
|
|
||
|
int getCurrentKeyIndex()
|
||
|
{
|
||
|
return m_currentKeyIndex;
|
||
|
}
|
||
|
void setCurrentKeyIndex(int index);
|
||
|
|
||
|
int getCurrentPos();
|
||
|
TPixel32 getCurrentColor();
|
||
|
|
||
|
TSpectrum &getSpectrum()
|
||
|
{
|
||
|
return m_spectrum;
|
||
|
}
|
||
|
void setSpectrum(TSpectrum &spectrum)
|
||
|
{
|
||
|
m_spectrum = spectrum;
|
||
|
/*-- Undoの場合、Spectrumの差し替えによってIndexがあふれてしまうことがある --*/
|
||
|
if (m_currentKeyIndex >= m_spectrum.getKeyCount())
|
||
|
setCurrentKeyIndex(getMaxPosKeyIndex());
|
||
|
update();
|
||
|
}
|
||
|
|
||
|
public slots:
|
||
|
void setCurrentPos(int pos, bool isDragging);
|
||
|
void setCurrentColor(const TPixel32 &color);
|
||
|
void addKeyAt(int pos);
|
||
|
|
||
|
signals:
|
||
|
void currentPosChanged(bool isDragging);
|
||
|
void currentKeyChanged();
|
||
|
void currentKeyAdded(int);
|
||
|
void currentKeyRemoved(int);
|
||
|
|
||
|
protected:
|
||
|
double posToSpectrumValue(int pos);
|
||
|
int spectrumValueToPos(double spectrumValue);
|
||
|
|
||
|
void paintEvent(QPaintEvent *e);
|
||
|
void mousePressEvent(QMouseEvent *e);
|
||
|
void mouseMoveEvent(QMouseEvent *e);
|
||
|
|
||
|
void mouseReleaseEvent(QMouseEvent *e);
|
||
|
|
||
|
int getMaxPosKeyIndex();
|
||
|
int getMinPosKeyIndex();
|
||
|
int getNearPosKeyIndex(int pos);
|
||
|
};
|
||
|
|
||
|
//=============================================================================
|
||
|
// SpectrumField
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
class DVAPI SpectrumField : public QWidget
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
|
||
|
int m_margin;
|
||
|
int m_spacing;
|
||
|
|
||
|
ColorField *m_colorField;
|
||
|
SpectrumBar *m_spectrumbar;
|
||
|
|
||
|
public:
|
||
|
SpectrumField(QWidget *parent = 0,
|
||
|
TPixel32 color = TPixel32(0, 0, 0, 255));
|
||
|
|
||
|
~SpectrumField();
|
||
|
|
||
|
TSpectrum &getSpectrum()
|
||
|
{
|
||
|
return m_spectrumbar->getSpectrum();
|
||
|
}
|
||
|
void setSpectrum(TSpectrum &spectrum)
|
||
|
{
|
||
|
m_spectrumbar->setSpectrum(spectrum);
|
||
|
m_colorField->setColor(m_spectrumbar->getCurrentColor());
|
||
|
}
|
||
|
|
||
|
int getCurrentKeyIndex()
|
||
|
{
|
||
|
return m_spectrumbar->getCurrentKeyIndex();
|
||
|
}
|
||
|
void setCurrentKeyIndex(int index)
|
||
|
{
|
||
|
m_spectrumbar->setCurrentKeyIndex(index);
|
||
|
m_colorField->setColor(m_spectrumbar->getCurrentColor());
|
||
|
}
|
||
|
|
||
|
protected slots:
|
||
|
void onCurrentPosChanged(bool isDragging);
|
||
|
void onCurrentKeyChanged();
|
||
|
void onColorChanged(const TPixel32 &color, bool isDragging);
|
||
|
|
||
|
protected:
|
||
|
void paintEvent(QPaintEvent *e);
|
||
|
|
||
|
signals:
|
||
|
void keyColorChanged(bool);
|
||
|
void keyPositionChanged(bool);
|
||
|
void keyAdded(int);
|
||
|
void keyRemoved(int);
|
||
|
};
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
} //namespace DVGui
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
#endif // SPECTRUMFIELD_H
|