~ubuntu-branches/ubuntu/precise/koffice/precise

« back to all changes in this revision

Viewing changes to krita/ui/widgets/kis_custom_image_widget.cc

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2010-09-21 15:36:35 UTC
  • mfrom: (1.4.1 upstream) (60.2.11 maverick)
  • Revision ID: james.westby@ubuntu.com-20100921153635-6tejqkiro2u21ydi
Tags: 1:2.2.2-0ubuntu3
Add kubuntu_03_fix-crash-on-closing-sqlite-connection-2.2.2.diff and
kubuntu_04_support-large-memo-values-for-msaccess-2.2.2.diff as
recommended by upstream http://kexi-
project.org/wiki/wikiview/index.php@Kexi2.2_Patches.html#sqlite_stab
ility

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
#include <QApplication>
29
29
#include <QClipboard>
30
30
#include <QDesktopWidget>
 
31
#include <QUndoCommand>
31
32
 
32
33
#include <kcolorcombo.h>
33
34
#include <kis_debug.h>
42
43
#include <KoUnit.h>
43
44
#include <KoColorModelStandardIds.h>
44
45
 
 
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>
 
53
 
45
54
#include "kis_clipboard.h"
46
55
#include "kis_doc2.h"
47
 
 
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"
56
58
 
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
177
179
 
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);
182
 
 
183
 
    KisImageWSP img = m_doc->image();
184
 
    if (img && img->root() && img->root()->firstChild()) {
185
 
        KisLayer * layer = dynamic_cast<KisLayer*>(img->root()->firstChild().data());
 
182
 
 
183
    KoColor bgColor(qc, cs);
 
184
    m_doc->newImage(txtName->text(), width, height, cs, bgColor, txtDescription->toPlainText(), resolution);
 
185
 
 
186
    KisImageWSP image = m_doc->image();
 
187
    if (image && image->root() && image->root()->firstChild()) {
 
188
        KisLayer * layer = dynamic_cast<KisLayer*>(image->root()->firstChild().data());
186
189
        if (layer) {
187
190
            layer->setOpacity(backgroundOpacity());
188
191
        }
 
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();
 
199
 
 
200
        }
189
201
        if (chkFromClipboard->isChecked()) {
190
 
            KisPaintDeviceSP clip = KisClipboard::instance()->clip();
 
202
            KisPaintDeviceSP clip = KisClipboard::instance()->clip(QPoint(0,0));
191
203
            if (clip) {
192
204
                QRect r = clip->exactBounds();
193
 
                KisPainter gc;
194
 
                gc.begin(layer->paintDevice());
195
 
                gc.setCompositeOp(COMPOSITE_COPY);
196
 
                gc.bitBlt(0, 0, clip, r.x(), r.y(), r.width(), r.height());
197
 
                gc.end();
 
205
                KisPainter painter;
 
206
                painter.begin(layer->paintDevice());
 
207
                painter.setCompositeOp(COMPOSITE_COPY);
 
208
                painter.bitBlt(0, 0, clip, r.x(), r.y(), r.width(), r.height());
198
209
            }
199
210
        }
200
211
        layer->setDirty(QRect(0, 0, width, height));
216
227
void KisCustomImageWidget::clipboardDataChanged()
217
228
{
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");
222
233
 
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) {
241
252
 
242
253
void KisCustomImageWidget::screenSizeClicked()
243
254
{
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());
 
260
 
245
261
    doubleWidth->setValue(sz.width());
246
 
    doubleWidth->setDecimals(0);
247
262
    doubleHeight->setValue(sz.height());
248
 
    doubleHeight->setDecimals(0);
249
263
}
250
264
 
251
265
#include "kis_custom_image_widget.moc"