|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef COLORFIELD_H
|
|
Toshihiro Shimizu |
890ddd |
#define COLORFIELD_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 "traster.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/intfield.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tspectrum.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tcolorstyles.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <qwidget></qwidget>
|
|
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 |
// forward declaration
|
|
Toshihiro Shimizu |
890ddd |
class QSlider;
|
|
Toshihiro Shimizu |
890ddd |
class QImage;
|
|
Toshihiro Shimizu |
890ddd |
class QPixmap;
|
|
Toshihiro Shimizu |
890ddd |
class TCleanupStyle;
|
|
Toshihiro Shimizu |
890ddd |
class TPaletteHandle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace DVGui {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// StyleSample
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI StyleSample final : public QWidget {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Shinya Kitaoka |
120a6e |
QImage m_samplePixmap;
|
|
Shinya Kitaoka |
120a6e |
TRaster32P m_bgRas;
|
|
Shinya Kitaoka |
120a6e |
TColorStyle *m_style; // owner
|
|
Shinya Kitaoka |
120a6e |
bool m_clickEnabled;
|
|
Shinya Kitaoka |
120a6e |
bool m_drawEnable;
|
|
Shinya Kitaoka |
120a6e |
TPixel m_chessColor1;
|
|
Shinya Kitaoka |
120a6e |
TPixel m_chessColor2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool m_isEditing;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
StyleSample(QWidget *parent, int sizeX, int sizeY);
|
|
Shinya Kitaoka |
120a6e |
~StyleSample();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void enableClick(bool on) { m_clickEnabled = on; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setStyle(TColorStyle &style);
|
|
Shinya Kitaoka |
120a6e |
TColorStyle *getStyle() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setColor(const TPixel32 &color);
|
|
Shinya Kitaoka |
120a6e |
void setChessboardColors(const TPixel32 &col1, const TPixel32 &col2);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setIsEditing(bool isEditing) {
|
|
Shinya Kitaoka |
120a6e |
m_isEditing = isEditing;
|
|
Shinya Kitaoka |
120a6e |
update();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
bool isEditing() const { return m_isEditing; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setEnable(bool drawEnable) { m_drawEnable = drawEnable; }
|
|
Shinya Kitaoka |
120a6e |
bool isEnable() const { return m_drawEnable; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
473e70 |
void paintEvent(QPaintEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void mousePressEvent(QMouseEvent *) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseDoubleClickEvent(QMouseEvent *event) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
signals:
|
|
Shinya Kitaoka |
120a6e |
void clicked(const TColorStyle &style);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// ChannelField
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI ChannelField final : public QWidget {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
DVGui::IntLineEdit *m_channelEdit;
|
|
Shinya Kitaoka |
120a6e |
QSlider *m_channelSlider;
|
|
Shinya Kitaoka |
120a6e |
int m_maxValue;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
ChannelField(QWidget *parent = 0, const QString &string = "", int value = 0,
|
|
Shinya Kitaoka |
120a6e |
int maxValue = 255, bool horizontal = false, int labelWidth = 13,
|
|
Shinya Kitaoka |
120a6e |
int sliderWidth = 40);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
~ChannelField() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setChannel(int value);
|
|
Shinya Kitaoka |
120a6e |
int getChannel();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
signals:
|
|
Shinya Kitaoka |
120a6e |
void valueChanged(int value, bool isDragging);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected slots:
|
|
Shinya Kitaoka |
120a6e |
void onSliderChanged(int value);
|
|
Shinya Kitaoka |
120a6e |
void onSliderReleased();
|
|
Shinya Kitaoka |
120a6e |
void onEditChanged(const QString &str);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// ColorField
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI ColorField final : public QWidget {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
StyleSample *m_colorSample;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_redChannel;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_greenChannel;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_blueChannel;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_alphaChannel;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPixel32 m_color;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! If it is true editing changed are notified, setIsEditing emit
|
|
Shinya Kitaoka |
120a6e |
//! editingChanged signal.
|
|
Shinya Kitaoka |
120a6e |
bool m_notifyEditingChange;
|
|
Shinya Kitaoka |
120a6e |
bool m_useStyleEditor;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
class ColorFieldEditorController {
|
|
Shinya Kitaoka |
120a6e |
public:
|
|
Shinya Kitaoka |
120a6e |
ColorFieldEditorController() {}
|
|
Shinya Kitaoka |
120a6e |
virtual ~ColorFieldEditorController() {}
|
|
Shinya Kitaoka |
120a6e |
virtual void edit(DVGui::ColorField *colorField){};
|
|
Shinya Kitaoka |
120a6e |
virtual void hide(){};
|
|
Shinya Kitaoka |
120a6e |
};
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static ColorFieldEditorController *m_editorController;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
ColorField(QWidget *parent = 0, bool isAlphaActive = true,
|
|
Shinya Kitaoka |
120a6e |
TPixel32 color = TPixel32(0, 0, 0, 255), int squareSize = 40,
|
|
Shinya Kitaoka |
120a6e |
bool useStyleEditor = true);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
~ColorField() {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setColor(const TPixel32 &color);
|
|
Shinya Kitaoka |
120a6e |
TPixel32 getColor() const { return m_color; }
|
|
Shinya Kitaoka |
120a6e |
void setChessboardColors(const TPixel32 &col1, const TPixel32 &col2);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static void setEditorController(ColorFieldEditorController *editorController);
|
|
Shinya Kitaoka |
120a6e |
static ColorFieldEditorController *getEditorController();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void notifyColorChanged(const TPixel32 &color, bool isDragging) {
|
|
Shinya Kitaoka |
120a6e |
emit colorChanged(color, isDragging);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setEditingChangeNotified(bool notify) { m_notifyEditingChange = notify; }
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setIsEditing(bool isEditing) {
|
|
Shinya Kitaoka |
120a6e |
assert(m_colorSample);
|
|
Shinya Kitaoka |
120a6e |
m_colorSample->setIsEditing(isEditing);
|
|
Shinya Kitaoka |
120a6e |
if (m_notifyEditingChange) emit editingChanged(getColor(), isEditing);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
bool isEditing() const {
|
|
Shinya Kitaoka |
120a6e |
assert(m_colorSample);
|
|
Shinya Kitaoka |
120a6e |
return m_colorSample->isEditing();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void hideChannelsFields(bool hide);
|
|
Shinya Kitaoka |
120a6e |
void setAlphaActive(bool active);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
120a6e |
void updateChannels();
|
|
Shinya Kitaoka |
473e70 |
void mousePressEvent(QMouseEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseDoubleClickEvent(QMouseEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void hideEvent(QHideEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected slots:
|
|
Shinya Kitaoka |
120a6e |
void onRedChannelChanged(int value, bool isDragging);
|
|
Shinya Kitaoka |
120a6e |
void onGreenChannelChanged(int value, bool isDragging);
|
|
Shinya Kitaoka |
120a6e |
void onBlueChannelChanged(int value, bool isDragging);
|
|
Shinya Kitaoka |
120a6e |
void onAlphaChannelChanged(int value, bool isDragging);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
signals:
|
|
Shinya Kitaoka |
120a6e |
void editingChanged(const TPixel32 &, bool isEditing);
|
|
Shinya Kitaoka |
120a6e |
void colorChanged(const TPixel32 &, bool isDragging);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// CleanupColorField
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI CleanupColorField final : public QWidget {
|
|
Shinya Kitaoka |
120a6e |
Q_OBJECT
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TPaletteHandle *m_ph;
|
|
Shinya Kitaoka |
120a6e |
StyleSample *m_colorSample;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_brightnessChannel;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_contrastChannel;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_hRangeChannel;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_lineWidthChannel;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_cThresholdChannel;
|
|
Shinya Kitaoka |
120a6e |
ChannelField *m_wThresholdChannel;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TColorStyleP m_style;
|
|
Shinya Kitaoka |
120a6e |
TCleanupStyle *m_cleanupStyle;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool m_greyMode;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! If it is true editing changed are notified, setIsEditing emit
|
|
Shinya Kitaoka |
120a6e |
//! editingChanged signal.
|
|
Shinya Kitaoka |
120a6e |
bool m_notifyEditingChange;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
class CleanupColorFieldEditorController {
|
|
Shinya Kitaoka |
120a6e |
public:
|
|
Shinya Kitaoka |
120a6e |
CleanupColorFieldEditorController() {}
|
|
Shinya Kitaoka |
120a6e |
virtual ~CleanupColorFieldEditorController() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
virtual void edit(DVGui::CleanupColorField *colorField){};
|
|
Shinya Kitaoka |
120a6e |
virtual void hide(){};
|
|
Shinya Kitaoka |
120a6e |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static CleanupColorFieldEditorController *m_editorController;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
CleanupColorField(QWidget *parent, TCleanupStyle *cleanupStyle,
|
|
Shinya Kitaoka |
120a6e |
TPaletteHandle *ph, bool greyMode);
|
|
Shinya Kitaoka |
120a6e |
~CleanupColorField() { getEditorController()->edit(0); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void setEditorController(
|
|
Shinya Kitaoka |
120a6e |
CleanupColorFieldEditorController *editorController);
|
|
Shinya Kitaoka |
120a6e |
static CleanupColorFieldEditorController *getEditorController();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setEditingChangeNotified(bool notify) { m_notifyEditingChange = notify; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool isEditing() const {
|
|
Shinya Kitaoka |
120a6e |
assert(m_colorSample);
|
|
Shinya Kitaoka |
120a6e |
return m_colorSample->isEditing();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
void setIsEditing(bool isEditing) {
|
|
Shinya Kitaoka |
120a6e |
assert(m_colorSample);
|
|
Shinya Kitaoka |
120a6e |
m_colorSample->setIsEditing(isEditing);
|
|
Shinya Kitaoka |
120a6e |
if (m_notifyEditingChange) emit editingChanged(getColor(), isEditing);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setColor(const TPixel32 &color);
|
|
Shinya Kitaoka |
120a6e |
TPixel32 getColor() const;
|
|
Shinya Kitaoka |
120a6e |
void updateColor();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setOutputColor(const TPixel32 &color);
|
|
Shinya Kitaoka |
120a6e |
TPixel32 getOutputColor() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TColorStyle *getStyle() { return (TColorStyle *)m_cleanupStyle; }
|
|
Shinya Kitaoka |
120a6e |
void setStyle(TColorStyle *style);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setContrastEnabled(bool enable);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected:
|
|
Shinya Kitaoka |
473e70 |
void mousePressEvent(QMouseEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void mouseDoubleClickEvent(QMouseEvent *event) override;
|
|
Shinya Kitaoka |
473e70 |
void hideEvent(QHideEvent *) override;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
protected slots:
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void onBrightnessChannelChanged(int value, bool dragging);
|
|
Shinya Kitaoka |
120a6e |
void onContrastChannelChanged(int value, bool dragging);
|
|
Shinya Kitaoka |
120a6e |
void onCThresholdChannelChanged(int value, bool dragging);
|
|
Shinya Kitaoka |
120a6e |
void onWThresholdChannelChanged(int value, bool dragging);
|
|
Shinya Kitaoka |
120a6e |
void onHRangeChannelChanged(int value, bool dragging);
|
|
Shinya Kitaoka |
120a6e |
void onLineWidthChannelChanged(int value, bool dragging);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
signals:
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void editingChanged(const TPixel32 &, bool isEditing);
|
|
Shinya Kitaoka |
120a6e |
void StyleSelected(TCleanupStyle *);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Shinya Kitaoka |
120a6e |
} // namespace DVGui
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#endif // COLORFIELD_H
|