42
43
#include <KoUnit.h>
43
44
#include <KoColorModelStandardIds.h>
46
#include <kis_fill_painter.h>
47
#include <kis_image.h>
48
#include <kis_layer.h>
49
#include <kis_group_layer.h>
50
#include <kis_paint_layer.h>
51
#include <kis_paint_device.h>
52
#include <kis_painter.h>
45
54
#include "kis_clipboard.h"
46
55
#include "kis_doc2.h"
48
56
#include "widgets/kis_cmb_idlist.h"
49
57
#include "widgets/squeezedcombobox.h"
50
#include "kis_image.h"
51
#include "kis_layer.h"
52
#include "kis_group_layer.h"
53
#include "kis_paint_layer.h"
54
#include "kis_paint_device.h"
55
#include "kis_painter.h"
57
59
KisCustomImageWidget::KisCustomImageWidget(QWidget *parent, KisDoc2 *doc, qint32 defWidth, qint32 defHeight, bool clipAvailable, double resolution, const QString & defColorSpaceName, const QString & imageName)
58
60
: WdgNewImage(parent)
175
177
double resolution;
176
178
resolution = doubleResolution->value() / 72.0; // internal resolution is in pixels per pt
178
// XXX: Added explicit casts to get rid of warning
179
180
width = static_cast<qint32>(0.5 + KoUnit::ptToUnit(m_width, KoUnit(KoUnit::Pixel, resolution)));
180
181
height = static_cast<qint32>(0.5 + KoUnit::ptToUnit(m_height, KoUnit(KoUnit::Pixel, resolution)));
181
m_doc->newImage(txtName->text(), width, height, cs, KoColor(qc, cs), txtDescription->toPlainText(), resolution);
183
KisImageWSP img = m_doc->image();
184
if (img && img->root() && img->root()->firstChild()) {
185
KisLayer * layer = dynamic_cast<KisLayer*>(img->root()->firstChild().data());
183
KoColor bgColor(qc, cs);
184
m_doc->newImage(txtName->text(), width, height, cs, bgColor, txtDescription->toPlainText(), resolution);
186
KisImageWSP image = m_doc->image();
187
if (image && image->root() && image->root()->firstChild()) {
188
KisLayer * layer = dynamic_cast<KisLayer*>(image->root()->firstChild().data());
187
190
layer->setOpacity(backgroundOpacity());
192
// Hack: with a semi-transparent background color, the projection isn't composited right if we just set the default pixel
193
if (layer && backgroundOpacity() < OPACITY_OPAQUE_U8) {
194
KisFillPainter painter;
195
painter.begin(layer->paintDevice());
196
painter.beginTransaction("");
197
painter.fillRect(0, 0, width, height, bgColor, OPACITY_OPAQUE_U8);
198
delete painter.endTransaction();
189
201
if (chkFromClipboard->isChecked()) {
190
KisPaintDeviceSP clip = KisClipboard::instance()->clip();
202
KisPaintDeviceSP clip = KisClipboard::instance()->clip(QPoint(0,0));
192
204
QRect r = clip->exactBounds();
194
gc.begin(layer->paintDevice());
195
gc.setCompositeOp(COMPOSITE_COPY);
196
gc.bitBlt(0, 0, clip, r.x(), r.y(), r.width(), r.height());
206
painter.begin(layer->paintDevice());
207
painter.setCompositeOp(COMPOSITE_COPY);
208
painter.bitBlt(0, 0, clip, r.x(), r.y(), r.width(), r.height());
200
211
layer->setDirty(QRect(0, 0, width, height));
216
227
void KisCustomImageWidget::clipboardDataChanged()
218
229
QClipboard *cb = QApplication::clipboard();
219
QImage qimg = cb->image();
230
QImage qimage = cb->image();
220
231
const QMimeData *cbData = cb->mimeData();
221
232
QByteArray mimeType("application/x-krita-selection");
223
if ((cbData && cbData->hasFormat(mimeType)) || !qimg.isNull()) {
234
if ((cbData && cbData->hasFormat(mimeType)) || !qimage.isNull()) {
224
235
KisClipboard * cb = KisClipboard::instance();
225
236
QSize sz = cb->clipSize();
226
237
if (sz.isValid() && sz.width() != 0 && sz.height() != 0) {
242
253
void KisCustomImageWidget::screenSizeClicked()
244
QSize sz = QApplication::desktop()->availableGeometry(this).size();
255
QSize sz = QApplication::desktop()->screenGeometry(this).size();
256
cmbWidthUnit->setCurrentIndex(KoUnit::Pixel);
257
cmbHeightUnit->setCurrentIndex(KoUnit::Pixel);
258
widthUnitChanged(cmbWidthUnit->currentIndex());
259
heightUnitChanged(cmbHeightUnit->currentIndex());
245
261
doubleWidth->setValue(sz.width());
246
doubleWidth->setDecimals(0);
247
262
doubleHeight->setValue(sz.height());
248
doubleHeight->setDecimals(0);
251
265
#include "kis_custom_image_widget.moc"