Changeset View
Changeset View
Standalone View
Standalone View
plugins/dockers/histogram/histogramdocker_dock.cpp
Context not available. | |||||
26 | #include <kis_zoom_manager.h> | 26 | #include <kis_zoom_manager.h> | ||
---|---|---|---|---|---|
27 | #include "kis_image.h" | 27 | #include "kis_image.h" | ||
28 | #include "kis_paint_device.h" | 28 | #include "kis_paint_device.h" | ||
29 | #include "kis_signal_compressor.h" | 29 | #include "kis_idle_watcher.h" | ||
30 | #include "kis_histogram_view.h" | 30 | #include "histogramdockerwidget.h" | ||
31 | 31 | | |||
32 | HistogramDockerDock::HistogramDockerDock( ) | 32 | HistogramDockerDock::HistogramDockerDock() | ||
33 | : QDockWidget(i18n("Histogram")), | 33 | : QDockWidget(i18n("Histogram")), | ||
34 | m_compressor(new KisSignalCompressor(200, KisSignalCompressor::POSTPONE, this)), | 34 | m_imageIdleWatcher(new KisIdleWatcher(250, this)), | ||
35 | m_canvas(0), m_producer(nullptr) | 35 | m_canvas(0) | ||
36 | { | 36 | { | ||
37 | QWidget *page = new QWidget(this); | 37 | QWidget *page = new QWidget(this); | ||
38 | m_layout = new QVBoxLayout(page); | 38 | m_layout = new QVBoxLayout(page); | ||
39 | 39 | | |||
40 | m_histogramWidget = new KisHistogramView(this); | 40 | m_histogramWidget = new HistogramDockerWidget(this); | ||
41 | | ||||
41 | m_histogramWidget->setMinimumHeight(50); | 42 | m_histogramWidget->setMinimumHeight(50); | ||
42 | m_histogramWidget->setSmoothHistogram(true); | 43 | //m_histogramWidget->setSmoothHistogram(false); | ||
43 | m_layout->addWidget(m_histogramWidget, 1); | 44 | m_layout->addWidget(m_histogramWidget, 1); | ||
44 | setWidget(page); | 45 | setWidget(page); | ||
45 | connect(m_compressor,SIGNAL(timeout()),SLOT(startUpdateCanvasProjection())); | 46 | connect(m_imageIdleWatcher, &KisIdleWatcher::startedIdleMode, this, &HistogramDockerDock::updateHistogram); | ||
46 | } | 47 | } | ||
47 | 48 | | |||
48 | 49 | | |||
49 | void HistogramDockerDock::setCanvas(KoCanvasBase * canvas) | 50 | void HistogramDockerDock::setCanvas(KoCanvasBase * canvas) | ||
50 | { | 51 | { | ||
51 | if(m_canvas == canvas) | 52 | if (m_canvas == canvas) | ||
52 | return; | 53 | return; | ||
53 | 54 | | |||
54 | setEnabled(canvas != 0); | 55 | setEnabled(canvas != 0); | ||
Context not available. | |||||
57 | m_canvas->disconnectCanvasObserver(this); | 58 | m_canvas->disconnectCanvasObserver(this); | ||
58 | m_canvas->image()->disconnect(this); | 59 | m_canvas->image()->disconnect(this); | ||
59 | } | 60 | } | ||
60 | m_canvas = dynamic_cast<KisCanvas2*>(canvas); | | |||
61 | if (m_canvas && m_canvas->imageView() && m_canvas->imageView()->image() ) { | | |||
62 | 61 | | |||
63 | KisPaintDeviceSP dev = m_canvas->image()->projection(); | 62 | m_canvas = dynamic_cast<KisCanvas2*>(canvas); | ||
64 | auto cs = m_canvas->image()->colorSpace(); | 63 | if (m_canvas) { | ||
64 | m_histogramWidget->setPaintDevice(m_canvas); | ||||
65 | 65 | | |||
66 | QList<QString> producers = KoHistogramProducerFactoryRegistry::instance()->keysCompatibleWith(cs,true); | 66 | m_imageIdleWatcher->setTrackedImage(m_canvas->image()); | ||
67 | m_producer = KoHistogramProducerFactoryRegistry::instance()->get(producers.at(0))->generate(); | | |||
68 | m_histogramWidget->setPaintDevice( dev, m_producer, m_canvas->image()->bounds() ); | | |||
69 | 67 | | |||
70 | connect(m_canvas->image(), SIGNAL(sigImageUpdated(QRect)), m_compressor, SLOT(start()), Qt::UniqueConnection); | 68 | connect(m_canvas->image(), SIGNAL(sigImageUpdated(QRect)), this, SLOT(startUpdateCanvasProjection()), Qt::UniqueConnection); | ||
71 | connect(m_canvas->image(), SIGNAL(sigColorSpaceChanged(const KoColorSpace*)), this, SLOT(sigColorSpaceChanged(const KoColorSpace*)), Qt::UniqueConnection); | 69 | connect(m_canvas->image(), SIGNAL(sigColorSpaceChanged(const KoColorSpace*)), this, SLOT(sigColorSpaceChanged(const KoColorSpace*)), Qt::UniqueConnection); | ||
72 | 70 | m_imageIdleWatcher->startCountdown(); | |||
73 | m_compressor->start(); | | |||
74 | } | 71 | } | ||
75 | } | 72 | } | ||
76 | 73 | | |||
Context not available. | |||||
78 | { | 75 | { | ||
79 | setEnabled(false); | 76 | setEnabled(false); | ||
80 | m_canvas = 0; | 77 | m_canvas = 0; | ||
78 | m_histogramWidget->setPaintDevice(m_canvas); | ||||
79 | m_imageIdleWatcher->startCountdown(); | ||||
81 | } | 80 | } | ||
82 | 81 | | |||
83 | void HistogramDockerDock::startUpdateCanvasProjection() | 82 | void HistogramDockerDock::startUpdateCanvasProjection() | ||
84 | { | 83 | { | ||
85 | m_histogramWidget->startUpdateCanvasProjection(); | 84 | if (isVisible()) { | ||
85 | m_imageIdleWatcher->startCountdown(); | ||||
86 | } | ||||
87 | } | ||||
88 | | ||||
89 | void HistogramDockerDock::showEvent(QShowEvent *event) | ||||
90 | { | ||||
91 | Q_UNUSED(event); | ||||
92 | m_imageIdleWatcher->startCountdown(); | ||||
86 | } | 93 | } | ||
87 | 94 | | |||
95 | | ||||
88 | void HistogramDockerDock::sigColorSpaceChanged(const KoColorSpace *cs) | 96 | void HistogramDockerDock::sigColorSpaceChanged(const KoColorSpace *cs) | ||
89 | { | 97 | { | ||
90 | QList<QString> producers = KoHistogramProducerFactoryRegistry::instance()->keysCompatibleWith(cs,true); | 98 | if (isVisible()) { | ||
91 | m_producer = KoHistogramProducerFactoryRegistry::instance()->get(producers.at(0))->generate(); | 99 | m_imageIdleWatcher->startCountdown(); | ||
92 | m_histogramWidget->setProducer(m_producer); | 100 | } | ||
93 | } | 101 | } | ||
94 | 102 | | |||
103 | void HistogramDockerDock::updateHistogram() | ||||
104 | { | ||||
105 | if (isVisible()) { | ||||
106 | m_histogramWidget->updateHistogram(); | ||||
107 | } | ||||
108 | } | ||||
Context not available. |