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