17#include "addtransparencytopaperdialog.h"
18#include "ui_addtransparencytopaperdialog.h"
20#include <QGraphicsPixmapItem>
21#include <QProgressDialog>
25#include "layermanager.h"
26#include "selectionmanager.h"
27#include "layerbitmap.h"
28#include "bitmapimage.h"
31AddTransparencyToPaperDialog::AddTransparencyToPaperDialog(
QWidget *parent) :
37 connect(ui->sb_threshold,
static_cast<void(
QSpinBox::*)(
int)
>(&
QSpinBox::valueChanged),
this, &AddTransparencyToPaperDialog::thresholdSpinboxChanged);
38 connect(ui->sliderThreshold, &
QSlider::valueChanged,
this, &AddTransparencyToPaperDialog::thresholdSliderChanged);
43 connect(ui->testTransparencyCheckbox, &
QCheckBox::stateChanged,
this, &AddTransparencyToPaperDialog::checkerStateChanged);
47AddTransparencyToPaperDialog::~AddTransparencyToPaperDialog()
52void AddTransparencyToPaperDialog::setCore(
Editor *editor)
57void AddTransparencyToPaperDialog::initUI()
59 if (mEditor->layers()->currentLayer()->type() != Layer::BITMAP)
61 loadDrawing(mEditor->currentFrame());
62 connect(mEditor->layers(), &LayerManager::currentLayerChanged,
this, &AddTransparencyToPaperDialog::layerChanged);
66 ui->preview->setScene(&scene);
69 if (!mBitmap.bounds().
isValid()) {
74void AddTransparencyToPaperDialog::thresholdSpinboxChanged(
int value)
77 ui->sliderThreshold->setValue(value);
81void AddTransparencyToPaperDialog::thresholdSliderChanged(
int value)
84 ui->sb_threshold->setValue(value);
88void AddTransparencyToPaperDialog::checkerStateChanged(
bool state)
97void AddTransparencyToPaperDialog::zoomChanged(
int zoomLevel)
99 mZoomLevel = zoomLevel;
103void AddTransparencyToPaperDialog::buttonClicked(
QAbstractButton* button)
105 switch (ui->buttonBox->buttonRole(button)) {
117void AddTransparencyToPaperDialog::resizeEvent(
QResizeEvent*)
122void AddTransparencyToPaperDialog::updatePreview()
124 QImage loadedImage = *mBitmap.image();
126 QSize previewSize = ui->preview->size()*mZoomLevel;
131 QPainter painter(&mPixmapFromImage);
134 mPreviewImageItem->
setPixmap(mPixmapFromImage);
139void AddTransparencyToPaperDialog::loadDrawing(
int frame)
141 if (mEditor->layers()->currentLayer()->type() != Layer::BITMAP) {
return; }
145 if (!layer->keyExists(frame))
147 if (!layer->keyExistsWhichCovers(frame))
148 frame = layer->getPreviousKeyFramePosition(frame);
150 frame = layer->getNextKeyFramePosition(frame);
155 BitmapImage* currentImage = layer->getBitmapImageAtFrame(frame);
157 if (!currentImage) {
return; }
159 mBitmap = currentImage->copy();
161 mBitmap = *mBitmap.scanToTransparent(&mBitmap,
163 ui->cb_Red->isChecked(),
164 ui->cb_Green->isChecked(),
165 ui->cb_Blue->isChecked());
167 if (mPreviewImageItem ==
nullptr) {
168 mPreviewImageItem = scene.
addPixmap(mPixmapFromImage);
170 mPreviewImageItem->
setPixmap(mPixmapFromImage);
178void AddTransparencyToPaperDialog::updateDrawing()
180 loadDrawing(mEditor->currentFrame());
183void AddTransparencyToPaperDialog::layerChanged(
int index)
185 if (mEditor->layers()->getLayer(index)->type() == Layer::BITMAP)
196void AddTransparencyToPaperDialog::traceScannedDrawings()
198 if (mEditor->layers()->currentLayer()->type() != Layer::BITMAP) {
return; }
202 const bool somethingSelected = mEditor->select()->somethingSelected();
203 const QRect selectionRect = mEditor->select()->mySelectionRect().
toRect();
205 if (ui->rbCurrentKeyframe->isChecked())
207 int frame = mEditor->currentFrame();
208 if (!layer->keyExists(frame))
210 if (!layer->keyExistsWhichCovers(frame))
211 frame = layer->getPreviousKeyFramePosition(frame);
213 frame = layer->getNextKeyFramePosition(frame);
215 mEditor->scrubTo(frame);
217 if (somethingSelected)
219 BitmapImage selection = layer->getBitmapImageAtFrame(frame)->copy(selectionRect);
220 layer->removeKeyFrame(frame);
222 layer->getBitmapImageAtFrame(frame)->paste(&selection);
224 img = layer->getBitmapImageAtFrame(frame);
225 img = img->scanToTransparent(img,
227 ui->cb_Red->isChecked(),
228 ui->cb_Green->isChecked(),
229 ui->cb_Blue->isChecked());
237 mProgress->
setMaximum(layer->keyFrameCount());
241 for (
int i = layer->firstKeyFramePosition(); i <= layer->getMaxKeyFramePosition(); i++)
243 if (layer->keyExists(i))
251 if (somethingSelected)
253 BitmapImage selection = layer->getBitmapImageAtFrame(i)->copy(selectionRect);
254 layer->removeKeyFrame(i);
256 layer->getBitmapImageAtFrame(i)->paste(&selection);
258 img = layer->getBitmapImageAtFrame(i);
259 img = img->scanToTransparent(img,
261 ui->cb_Red->isChecked(),
262 ui->cb_Green->isChecked(),
263 ui->cb_Blue->isChecked());
void scrubbed(int frameNumber)
This should be emitted after scrubbing.
bool addNewKeyFrameAt(int position)
Creates a new keyframe at the given position, unless one already exists.
void valueChanged(int value)
void stateChanged(int state)
void processEvents(QEventLoop::ProcessEventsFlags flags)
void setPixmap(const QPixmap &pixmap)
QGraphicsPixmapItem * addPixmap(const QPixmap &pixmap)
void setBackgroundBrush(const QBrush &brush)
void setSceneRect(const QRectF &rect)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString tr(const char *sourceText, const char *disambiguation, int n)
void fill(const QColor &color)
void setMaximum(int maximum)
void setValue(int progress)
bool isValid() const const
QRect toRect() const const
QSize scaled(int width, int height, Qt::AspectRatioMode mode) const const
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QString number(int n, int base)
KeepAspectRatioByExpanding