~ubuntu-branches/ubuntu/raring/gwenview/raring-updates

« back to all changes in this revision

Viewing changes to lib/documentview/rasterimageview.cpp

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2012-11-19 15:42:29 UTC
  • mfrom: (1.1.18)
  • Revision ID: package-import@ubuntu.com-20121119154229-7301t2eh20uj27pi
Tags: 4:4.9.80-0ubuntu1
* Update .install file
* Add libkactivities-dev, liblcms2-dev, libpng12-dev to the build-deps
* New upstream beta release

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
// Local
25
25
#include <lib/documentview/abstractrasterimageviewtool.h>
26
26
#include <lib/imagescaler.h>
 
27
#include <cms/cmsprofile.h>
27
28
 
28
29
// KDE
29
30
#include <KDebug>
34
35
#include <QTimer>
35
36
#include <QWeakPointer>
36
37
 
 
38
#include <lcms2.h>
 
39
 
 
40
 
37
41
namespace Gwenview
38
42
{
39
43
 
61
65
 
62
66
    QWeakPointer<AbstractRasterImageViewTool> mTool;
63
67
 
 
68
    cmsHTRANSFORM mDisplayTransform;
 
69
 
 
70
    void updateDisplayTransform()
 
71
    {
 
72
        if (mDisplayTransform) {
 
73
            cmsDeleteTransform(mDisplayTransform);
 
74
        }
 
75
        mDisplayTransform = 0;
 
76
        Cms::Profile::Ptr profile = q->document()->cmsProfile();
 
77
        if (!profile) {
 
78
            return;
 
79
        }
 
80
        Cms::Profile::Ptr monitorProfile = Cms::Profile::getMonitorProfile();
 
81
        if (!monitorProfile) {
 
82
            return;
 
83
        }
 
84
 
 
85
        cmsUInt32Number cmsFormat = 0;
 
86
        switch (q->document()->image().format()) {
 
87
        case QImage::Format_RGB32:
 
88
        case QImage::Format_ARGB32:
 
89
            cmsFormat = TYPE_BGRA_8;
 
90
            break;
 
91
        default:
 
92
            return;
 
93
        }
 
94
        // FIXME: Wrap cmsHTRANSFORM type?
 
95
        mDisplayTransform = cmsCreateTransform(profile->handle(), cmsFormat,
 
96
                                               monitorProfile->handle(), cmsFormat,
 
97
                                               INTENT_PERCEPTUAL, cmsFLAGS_BLACKPOINTCOMPENSATION);
 
98
    }
 
99
 
64
100
    void createBackgroundTexture()
65
101
    {
66
102
        mBackgroundTexture = QPixmap(32, 32);
147
183
{
148
184
    d->q = this;
149
185
    d->mEmittedCompleted = false;
 
186
    d->mDisplayTransform = 0;
150
187
 
151
188
    d->mAlphaBackgroundMode = AlphaBackgroundCheckBoard;
152
189
    d->mAlphaBackgroundColor = Qt::black;
163
200
 
164
201
RasterImageView::~RasterImageView()
165
202
{
 
203
    if (d->mDisplayTransform) {
 
204
        cmsDeleteTransform(d->mDisplayTransform);
 
205
    }
166
206
    delete d;
167
207
}
168
208
 
218
258
        return;
219
259
    }
220
260
 
 
261
    d->updateDisplayTransform();
 
262
 
221
263
    d->mScaler->setDocument(document());
222
264
    d->resizeBuffer();
223
265
    applyPendingScrollPos();
258
300
 
259
301
void RasterImageView::updateFromScaler(int zoomedImageLeft, int zoomedImageTop, const QImage& image)
260
302
{
 
303
    if (d->mDisplayTransform) {
 
304
        quint8 *bytes = const_cast<quint8*>(image.bits());
 
305
        cmsDoTransform(d->mDisplayTransform, bytes, bytes, image.width() * image.height());
 
306
    }
 
307
 
261
308
    d->resizeBuffer();
262
309
    int viewportLeft = zoomedImageLeft - scrollPos().x();
263
310
    int viewportTop = zoomedImageTop - scrollPos().y();