shun-iwasawa 78dff8
#include "cameracapturelevelcontrol_qt.h"
shun-iwasawa 78dff8
shun-iwasawa 78dff8
#include "toonzqt/intfield.h"
shun-iwasawa 78dff8
#include "toonzqt/doublefield.h"
shun-iwasawa 78dff8
shun-iwasawa 78dff8
#include <qpainter></qpainter>
shun-iwasawa 78dff8
#include <qmouseevent></qmouseevent>
shun-iwasawa 78dff8
#include <qhboxlayout></qhboxlayout>
shun-iwasawa 78dff8
#include <qvboxlayout></qvboxlayout>
shun-iwasawa 78dff8
#include <cmath></cmath>
shun-iwasawa 78dff8
#include <iostream></iostream>
shun-iwasawa 78dff8
shun-iwasawa 78dff8
using namespace DVGui;
shun-iwasawa 78dff8
shun-iwasawa 78dff8
namespace {
shun-iwasawa 78dff8
const int HISTOGRAM_HEIGHT    = 50;
shun-iwasawa 78dff8
const int SIDE_MARGIN         = 7;
shun-iwasawa 78dff8
static bool histogramObtained = false;
shun-iwasawa 78dff8
shun-iwasawa 78dff8
// returns the horizontal position of gamma slider (0-255)
shun-iwasawa 78dff8
int gammaToHPos(float gamma, int black, int white) {
shun-iwasawa 78dff8
  float ratio = std::pow(0.5f, gamma);
shun-iwasawa 78dff8
  return black + (int)std::round((float)(white - black) * ratio);
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
// returns the gamma value from the slider position
shun-iwasawa 78dff8
float hPosToGamma(int hPos, int black, int white) {
shun-iwasawa 78dff8
  if (hPos <= black + 1)
shun-iwasawa 78dff8
    return 9.99f;
shun-iwasawa 78dff8
  else if (hPos >= white - 1)
shun-iwasawa 78dff8
    return 0.01f;
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  float ratio = (float)(hPos - black) / (float)(white - black);
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  float gamma  = std::log(ratio) / std::log(0.5);
shun-iwasawa 78dff8
  int decimals = 2;
shun-iwasawa 78dff8
  gamma =
shun-iwasawa 78dff8
      std::round(gamma * std::pow(10.0, decimals)) / std::pow(10.0, decimals);
shun-iwasawa 78dff8
  return gamma;
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void drawSliderHandle(QPoint pos, QPainter& p, QColor color, bool selected) {
shun-iwasawa 78dff8
  p.setPen((selected) ? Qt::yellow : Qt::black);
shun-iwasawa 78dff8
  p.setBrush(color);
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  p.translate(pos);
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  static const QPoint points[5] = {QPoint(0, 0), QPoint(-6, 8), QPoint(-3, 12),
shun-iwasawa 78dff8
                                   QPoint(3, 12), QPoint(6, 8)};
shun-iwasawa 78dff8
  p.drawConvexPolygon(points, 5);
shun-iwasawa 78dff8
  p.resetTransform();
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
};  // namespace
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
CameraCaptureLevelHistogram::CameraCaptureLevelHistogram(QWidget* parent)
shun-iwasawa 78dff8
    : QFrame(parent)
shun-iwasawa 78dff8
    , m_histogramCue(false)
shun-iwasawa 78dff8
    , m_currentItem(None)
shun-iwasawa 78dff8
    , m_black(0)
shun-iwasawa 78dff8
    , m_white(255)
shun-iwasawa 78dff8
    , m_gamma(1.0)
shun-iwasawa 78dff8
    , m_threshold(128)
shun-iwasawa 78dff8
    , m_offset(0)
shun-iwasawa 78dff8
    , m_mode(Color_GrayScale)
shun-iwasawa 78dff8
    , m_histogramData(256) {
shun-iwasawa 78dff8
  setFixedSize(256 + SIDE_MARGIN * 2, HISTOGRAM_HEIGHT + 15);
shun-iwasawa 78dff8
  setMouseTracking(true);
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  m_histogramData.fill(0);
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void CameraCaptureLevelHistogram::updateHistogram(QImage& image) {
shun-iwasawa 78dff8
  // obtain histogram only when clicked
shun-iwasawa 78dff8
  if (!m_histogramCue) return;
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  QVector<int> tmpHisto(256);</int>
shun-iwasawa 78dff8
  tmpHisto.fill(0);
shun-iwasawa 78dff8
  for (int y = 0; y < image.height(); y++) {
shun-iwasawa 78dff8
    QRgb* rgb_p = (QRgb*)(image.scanLine(y));
shun-iwasawa 78dff8
    for (int x = 0; x < image.width(); x++, rgb_p++) {
shun-iwasawa 78dff8
      tmpHisto[qGray(*rgb_p)]++;
shun-iwasawa 78dff8
    }
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
  // obtain max value and normalize
shun-iwasawa 78dff8
  int max = 0;
shun-iwasawa 78dff8
  for (int c = 0; c < 256; c++) {
shun-iwasawa 78dff8
    if (tmpHisto.at(c) > max) max = tmpHisto.at(c);
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
  for (int c = 0; c < 256; c++) {
shun-iwasawa 78dff8
    m_histogramData[c] = tmpHisto.at(c) * HISTOGRAM_HEIGHT / max;
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
  histogramObtained = true;
shun-iwasawa 78dff8
  update();
shun-iwasawa 78dff8
  m_histogramCue = false;
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void CameraCaptureLevelHistogram::paintEvent(QPaintEvent* event) {
shun-iwasawa 78dff8
  QPainter p(this);
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  QRect histoRect(SIDE_MARGIN, 1, 256, HISTOGRAM_HEIGHT);
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  // draw histogram
shun-iwasawa 78dff8
  p.setPen(Qt::black);
shun-iwasawa 78dff8
  p.setBrush((m_currentItem == Histogram) ? Qt::darkGray : QColor(32, 32, 32));
shun-iwasawa 78dff8
  p.drawRect(histoRect.adjusted(-1, -1, 0, 0));
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  if (histogramObtained) {
shun-iwasawa 78dff8
    p.setPen(Qt::white);
shun-iwasawa 78dff8
    for (int c = 0; c < 256; c++) {
shun-iwasawa 78dff8
      if (m_histogramData.at(c) == 0) continue;
shun-iwasawa 78dff8
      p.drawLine(histoRect.bottomLeft() + QPoint(c, 0),
shun-iwasawa 78dff8
                 histoRect.bottomLeft() + QPoint(c, -m_histogramData.at(c)));
shun-iwasawa 78dff8
    }
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
  if (!histogramObtained || m_currentItem == Histogram) {
shun-iwasawa 78dff8
    p.setPen(Qt::white);
shun-iwasawa 78dff8
    p.drawText(histoRect, Qt::AlignCenter, tr("Click to Update Histogram"));
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  p.setRenderHint(QPainter::Antialiasing);
shun-iwasawa 78dff8
  // draw slider handles
shun-iwasawa 78dff8
  QPoint sliderBasePos(SIDE_MARGIN, HISTOGRAM_HEIGHT + 2);
shun-iwasawa 78dff8
  if (m_mode == Color_GrayScale) {
shun-iwasawa 78dff8
    // black
shun-iwasawa 78dff8
    drawSliderHandle(sliderBasePos + QPoint(m_black, 0), p, QColor(32, 32, 32),
shun-iwasawa 78dff8
                     m_currentItem == BlackSlider);
shun-iwasawa 78dff8
    // gamma
shun-iwasawa 78dff8
    drawSliderHandle(
shun-iwasawa 78dff8
        sliderBasePos + QPoint(gammaToHPos(m_gamma, m_black, m_white), 0), p,
shun-iwasawa 78dff8
        Qt::gray, m_currentItem == GammaSlider);
shun-iwasawa 78dff8
    // white
shun-iwasawa 78dff8
    drawSliderHandle(sliderBasePos + QPoint(m_white, 0), p,
shun-iwasawa 78dff8
                     QColor(220, 220, 220), m_currentItem == WhiteSlider);
shun-iwasawa 78dff8
  } else if (m_mode == BlackAndWhite)
shun-iwasawa 78dff8
    // threshold
shun-iwasawa 78dff8
    drawSliderHandle(sliderBasePos + QPoint(m_threshold, 0), p, Qt::gray,
shun-iwasawa 78dff8
                     m_currentItem == ThresholdSlider);
shun-iwasawa 78dff8
  p.setRenderHint(QPainter::Antialiasing, false);
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void CameraCaptureLevelHistogram::mousePressEvent(QMouseEvent* event) {
shun-iwasawa 78dff8
  if (event->button() != Qt::LeftButton) return;
shun-iwasawa 78dff8
  if (m_currentItem == Histogram) {
shun-iwasawa 78dff8
    m_histogramCue = true;
shun-iwasawa 78dff8
    return;
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
  if (m_currentItem == None) return;
shun-iwasawa 78dff8
  QPoint pos = event->pos();
shun-iwasawa 78dff8
  if (m_currentItem == BlackSlider)
shun-iwasawa 78dff8
    m_offset = pos.x() - SIDE_MARGIN - m_black;
shun-iwasawa 78dff8
  else if (m_currentItem == GammaSlider)
shun-iwasawa 78dff8
    m_offset = pos.x() - SIDE_MARGIN - gammaToHPos(m_gamma, m_black, m_white);
shun-iwasawa 137846
  else if (m_currentItem == WhiteSlider)
shun-iwasawa 78dff8
    m_offset = pos.x() - SIDE_MARGIN - m_white;
shun-iwasawa 78dff8
  else if (m_currentItem == ThresholdSlider)
shun-iwasawa 78dff8
    m_offset = pos.x() - SIDE_MARGIN - m_threshold;
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void CameraCaptureLevelHistogram::mouseMoveEvent(QMouseEvent* event) {
shun-iwasawa 78dff8
  QPoint pos = event->pos();
shun-iwasawa 78dff8
  if (event->buttons() & Qt::LeftButton) {
shun-iwasawa 78dff8
    if (m_currentItem == None || m_currentItem == Histogram) return;
shun-iwasawa 78dff8
shun-iwasawa 78dff8
    int hPos     = pos.x() - SIDE_MARGIN - m_offset;
shun-iwasawa 78dff8
    bool changed = false;
shun-iwasawa 78dff8
    if (m_currentItem == BlackSlider) {
shun-iwasawa 78dff8
      if (hPos < 0)
shun-iwasawa 78dff8
        hPos = 0;
shun-iwasawa 78dff8
      else if (hPos > m_white - 2)
shun-iwasawa 78dff8
        hPos = m_white - 2;
shun-iwasawa 78dff8
      if (hPos != m_black) {
shun-iwasawa 78dff8
        m_black = hPos;
shun-iwasawa 78dff8
        changed = true;
shun-iwasawa 78dff8
      }
shun-iwasawa 78dff8
    } else if (m_currentItem == GammaSlider) {
shun-iwasawa 78dff8
      if (hPos < m_black + 1)
shun-iwasawa 78dff8
        hPos = m_black + 1;
shun-iwasawa 78dff8
      else if (hPos > m_white - 1)
shun-iwasawa 78dff8
        hPos = m_white - 1;
shun-iwasawa 78dff8
      float gamma = hPosToGamma(hPos, m_black, m_white);
shun-iwasawa 78dff8
      if (gamma != m_gamma) {
shun-iwasawa 78dff8
        m_gamma = gamma;
shun-iwasawa 78dff8
        changed = true;
shun-iwasawa 78dff8
      }
shun-iwasawa 78dff8
    } else if (m_currentItem == WhiteSlider) {
shun-iwasawa 78dff8
      if (hPos < m_black + 2)
shun-iwasawa 78dff8
        hPos = m_black + 2;
shun-iwasawa 78dff8
      else if (hPos > 255)
shun-iwasawa 78dff8
        hPos = 255;
shun-iwasawa 78dff8
      if (hPos != m_white) {
shun-iwasawa 78dff8
        m_white = hPos;
shun-iwasawa 78dff8
        changed = true;
shun-iwasawa 78dff8
      }
shun-iwasawa 78dff8
    } else if (m_currentItem == ThresholdSlider) {
shun-iwasawa 78dff8
      if (hPos < 0)
shun-iwasawa 78dff8
        hPos = 0;
shun-iwasawa 78dff8
      else if (hPos > 255)
shun-iwasawa 78dff8
        hPos = 255;
shun-iwasawa 78dff8
      if (hPos != m_threshold) {
shun-iwasawa 78dff8
        m_threshold = hPos;
shun-iwasawa 78dff8
        changed     = true;
shun-iwasawa 78dff8
      }
shun-iwasawa 78dff8
    }
shun-iwasawa 78dff8
    if (changed) {
shun-iwasawa 78dff8
      update();
shun-iwasawa 78dff8
      emit valueChange(m_currentItem);
shun-iwasawa 78dff8
    }
shun-iwasawa 78dff8
    return;
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  // on hover
shun-iwasawa 78dff8
  LevelControlItem oldItem = m_currentItem;
shun-iwasawa 78dff8
  m_currentItem            = None;
shun-iwasawa 78dff8
  setToolTip("");
shun-iwasawa 78dff8
  QRect histoRect(5, 1, 256, HISTOGRAM_HEIGHT);
shun-iwasawa 78dff8
  if (histoRect.contains(pos)) {
shun-iwasawa 78dff8
    setToolTip(tr("Click to Update Histogram"));
shun-iwasawa 78dff8
    m_currentItem = Histogram;
shun-iwasawa 78dff8
  } else {
shun-iwasawa 78dff8
    // slider handles
shun-iwasawa 78dff8
    QPoint sliderBasePos(SIDE_MARGIN, HISTOGRAM_HEIGHT + 2);
shun-iwasawa 78dff8
    QRect sliderRect(-6, 0, 12, 12);
shun-iwasawa 78dff8
    if (m_mode == Color_GrayScale) {
shun-iwasawa 78dff8
      // white
shun-iwasawa 78dff8
      if (sliderRect.translated(sliderBasePos + QPoint(m_white, 0))
shun-iwasawa 78dff8
              .contains(pos)) {
shun-iwasawa 78dff8
        m_currentItem = WhiteSlider;
shun-iwasawa 78dff8
        setToolTip(tr("Drag to Move White Point"));
shun-iwasawa 78dff8
      }
shun-iwasawa 78dff8
      // gamma
shun-iwasawa 78dff8
      else if (sliderRect
shun-iwasawa 78dff8
                   .translated(
shun-iwasawa 78dff8
                       sliderBasePos +
shun-iwasawa 78dff8
                       QPoint(gammaToHPos(m_gamma, m_black, m_white), 0))
shun-iwasawa 78dff8
                   .contains(pos)) {
shun-iwasawa 78dff8
        m_currentItem = GammaSlider;
shun-iwasawa 78dff8
        setToolTip(tr("Drag to Move Gamma"));
shun-iwasawa 78dff8
      }
shun-iwasawa 78dff8
      // black
shun-iwasawa 78dff8
      else if (sliderRect.translated(sliderBasePos + QPoint(m_black, 0))
shun-iwasawa 78dff8
                   .contains(pos)) {
shun-iwasawa 78dff8
        m_currentItem = BlackSlider;
shun-iwasawa 78dff8
        setToolTip(tr("Drag to Move Black Point"));
shun-iwasawa 78dff8
      }
shun-iwasawa 78dff8
    } else if (m_mode == BlackAndWhite) {
shun-iwasawa 78dff8
      // threshold
shun-iwasawa 78dff8
      if (sliderRect.translated(sliderBasePos + QPoint(m_threshold, 0))
shun-iwasawa 78dff8
              .contains(pos)) {
shun-iwasawa 78dff8
        m_currentItem = ThresholdSlider;
shun-iwasawa 78dff8
        setToolTip(tr("Drag to Move Threshold Point"));
shun-iwasawa 78dff8
      }
shun-iwasawa 78dff8
    }
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
  if (oldItem != m_currentItem) update();
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void CameraCaptureLevelHistogram::mouseReleaseEvent(QMouseEvent* event) {
shun-iwasawa 78dff8
  m_offset = 0;
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void CameraCaptureLevelHistogram::leaveEvent(QEvent* event) {
shun-iwasawa 78dff8
  m_currentItem = None;
shun-iwasawa 78dff8
  m_offset      = 0;
shun-iwasawa 78dff8
  update();
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//=============================================================================
shun-iwasawa 78dff8
shun-iwasawa 78dff8
CameraCaptureLevelControl::CameraCaptureLevelControl(QWidget* parent)
shun-iwasawa 78dff8
    : QFrame(parent) {
shun-iwasawa 78dff8
  m_histogram    = new CameraCaptureLevelHistogram(this);
shun-iwasawa 78dff8
  m_blackFld     = new IntLineEdit(this, m_histogram->black(), 0, 253);
shun-iwasawa 78dff8
  m_whiteFld     = new IntLineEdit(this, m_histogram->white(), 2, 255);
shun-iwasawa 78dff8
  m_thresholdFld = new IntLineEdit(this, m_histogram->threshold(), 0, 255);
shun-iwasawa 78dff8
  m_gammaFld     = new DoubleLineEdit(this, m_histogram->gamma());
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  m_blackFld->setToolTip(tr("Black Point Value"));
shun-iwasawa 78dff8
  m_whiteFld->setToolTip(tr("White Point Value"));
shun-iwasawa 78dff8
  m_thresholdFld->setToolTip(tr("Threshold Value"));
shun-iwasawa 78dff8
  m_thresholdFld->hide();
shun-iwasawa 78dff8
  m_gammaFld->setRange(0.01, 9.99);
shun-iwasawa 78dff8
  m_gammaFld->setDecimals(2);
shun-iwasawa 78dff8
  m_gammaFld->setFixedWidth(54);
shun-iwasawa 78dff8
  m_gammaFld->setToolTip(tr("Gamma Value"));
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  QVBoxLayout* mainLay = new QVBoxLayout();
shun-iwasawa 78dff8
  mainLay->setMargin(0);
shun-iwasawa 78dff8
  mainLay->setSpacing(4);
shun-iwasawa 78dff8
  {
shun-iwasawa 78dff8
    mainLay->addWidget(m_histogram, 0, Qt::AlignHCenter);
shun-iwasawa 78dff8
    QHBoxLayout* fieldsLay = new QHBoxLayout();
shun-iwasawa 78dff8
    fieldsLay->setMargin(1);
shun-iwasawa 78dff8
    fieldsLay->setSpacing(0);
shun-iwasawa 78dff8
    {
shun-iwasawa 78dff8
      fieldsLay->addWidget(m_blackFld, 0);
shun-iwasawa 78dff8
      fieldsLay->addStretch(1);
shun-iwasawa 78dff8
      fieldsLay->addWidget(m_gammaFld, 0);
shun-iwasawa 78dff8
      fieldsLay->addWidget(m_thresholdFld, 0);
shun-iwasawa 78dff8
      fieldsLay->addStretch(1);
shun-iwasawa 78dff8
      fieldsLay->addWidget(m_whiteFld, 0);
shun-iwasawa 78dff8
    }
shun-iwasawa 78dff8
    mainLay->addLayout(fieldsLay, 0);
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
  setLayout(mainLay);
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  connect(m_histogram, SIGNAL(valueChange(int)), this,
shun-iwasawa 78dff8
          SLOT(onHistogramValueChanged(int)));
shun-iwasawa 78dff8
  connect(m_blackFld, SIGNAL(editingFinished()), this, SLOT(onFieldChanged()));
shun-iwasawa 78dff8
  connect(m_whiteFld, SIGNAL(editingFinished()), this, SLOT(onFieldChanged()));
shun-iwasawa 78dff8
  connect(m_gammaFld, SIGNAL(editingFinished()), this, SLOT(onFieldChanged()));
shun-iwasawa 78dff8
  connect(m_thresholdFld, SIGNAL(editingFinished()), this,
shun-iwasawa 78dff8
          SLOT(onFieldChanged()));
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void CameraCaptureLevelControl::onHistogramValueChanged(int itemId) {
shun-iwasawa 78dff8
  if (itemId == CameraCaptureLevelHistogram::BlackSlider) {
shun-iwasawa 78dff8
    m_blackFld->setValue(m_histogram->black());
shun-iwasawa 78dff8
    m_whiteFld->setRange(m_histogram->black() + 2, 255);
shun-iwasawa 78dff8
  } else if (itemId == CameraCaptureLevelHistogram::WhiteSlider) {
shun-iwasawa 78dff8
    m_whiteFld->setValue(m_histogram->white());
shun-iwasawa 78dff8
    m_blackFld->setRange(0, m_histogram->white() - 2);
shun-iwasawa 78dff8
  } else if (itemId == CameraCaptureLevelHistogram::GammaSlider) {
shun-iwasawa 78dff8
    m_gammaFld->setValue(m_histogram->gamma());
shun-iwasawa 78dff8
  } else if (itemId == CameraCaptureLevelHistogram::ThresholdSlider) {
shun-iwasawa 78dff8
    m_thresholdFld->setValue(m_histogram->threshold());
shun-iwasawa 78dff8
  }
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void CameraCaptureLevelControl::onFieldChanged() {
shun-iwasawa 78dff8
  if (m_histogram->mode() == CameraCaptureLevelHistogram::Color_GrayScale)
shun-iwasawa 78dff8
    m_histogram->setValues(m_blackFld->getValue(), m_whiteFld->getValue(),
shun-iwasawa 78dff8
                           m_gammaFld->getValue());
shun-iwasawa 78dff8
  else if (m_histogram->mode() == CameraCaptureLevelHistogram::BlackAndWhite)
shun-iwasawa 78dff8
    m_histogram->setThreshold(m_thresholdFld->getValue());
shun-iwasawa 78dff8
shun-iwasawa 78dff8
  m_histogram->update();
shun-iwasawa 78dff8
}
shun-iwasawa 78dff8
shun-iwasawa 78dff8
//-----------------------------------------------------------------------------
shun-iwasawa 78dff8
shun-iwasawa 78dff8
void CameraCaptureLevelControl::setMode(bool color_grayscale) {
shun-iwasawa 78dff8
  m_histogram->setMode((color_grayscale)
shun-iwasawa 78dff8
                           ? CameraCaptureLevelHistogram::Color_GrayScale
shun-iwasawa 78dff8
                           : CameraCaptureLevelHistogram::BlackAndWhite);
shun-iwasawa 78dff8
  m_blackFld->setVisible(color_grayscale);
shun-iwasawa 78dff8
  m_whiteFld->setVisible(color_grayscale);
shun-iwasawa 78dff8
  m_gammaFld->setVisible(color_grayscale);
shun-iwasawa 78dff8
  m_thresholdFld->setVisible(!color_grayscale);
shun-iwasawa 78dff8
  update();
shun-iwasawa 78dff8
}