summaryrefslogtreecommitdiffstats
path: root/src/core/type_conversion.cpp
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@theqtcompany.com>2016-04-20 16:57:29 +0200
committerMichael BrĂ¼ning <michael.bruning@theqtcompany.com>2016-04-21 08:17:37 +0000
commit783db9da6962c331b126f0d2262a0c0600cf46ff (patch)
tree5e1473fbe2421e832f3a752924ddde3bbc1e2748 /src/core/type_conversion.cpp
parentd236c5a8a34803bda6115956184398b99dbba408 (diff)
Fix copying images to clipboard
The SkBitmap to QImage conversion in ClipboardQt::WriteBitmap was hardcoding the image format to ARGB32. This failed whenever the format of the SkBitmap provided by Chromium was different. This change backports 1cf9175e from 5.7. Task-number: QTBUG-52715 Change-Id: Icf27b97bc421a2201c307a4514928dcf384d9ba6 Reviewed-by: Michael BrĂ¼ning <michael.bruning@theqtcompany.com>
Diffstat (limited to 'src/core/type_conversion.cpp')
-rw-r--r--src/core/type_conversion.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/core/type_conversion.cpp b/src/core/type_conversion.cpp
new file mode 100644
index 000000000..705d22aed
--- /dev/null
+++ b/src/core/type_conversion.cpp
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "type_conversion.h"
+
+namespace QtWebEngineCore {
+
+QImage toQImage(const SkBitmap &bitmap)
+{
+ QImage image;
+ switch (bitmap.colorType()) {
+ case kUnknown_SkColorType:
+ break;
+ case kAlpha_8_SkColorType:
+ image = toQImage(bitmap, QImage::Format_Alpha8);
+ break;
+ case kRGB_565_SkColorType:
+ image = toQImage(bitmap, QImage::Format_RGB16);
+ break;
+ case kARGB_4444_SkColorType:
+ switch (bitmap.alphaType()) {
+ case kUnknown_SkAlphaType:
+ break;
+ case kUnpremul_SkAlphaType:
+ // not supported - treat as opaque
+ case kOpaque_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGB444);
+ break;
+ case kPremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_ARGB4444_Premultiplied);
+ break;
+ }
+ break;
+ case kRGBA_8888_SkColorType:
+ switch (bitmap.alphaType()) {
+ case kUnknown_SkAlphaType:
+ break;
+ case kOpaque_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGBX8888);
+ break;
+ case kPremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGBA8888_Premultiplied);
+ break;
+ case kUnpremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGBA8888);
+ break;
+ }
+ break;
+ case kBGRA_8888_SkColorType:
+ // we are assuming little-endian arch here.
+ switch (bitmap.alphaType()) {
+ case kUnknown_SkAlphaType:
+ break;
+ case kOpaque_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_RGB32);
+ break;
+ case kPremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_ARGB32_Premultiplied);
+ break;
+ case kUnpremul_SkAlphaType:
+ image = toQImage(bitmap, QImage::Format_ARGB32);
+ break;
+ }
+ break;
+ case kIndex_8_SkColorType: {
+ image = toQImage(bitmap, QImage::Format_Indexed8);
+ SkColorTable *skTable = bitmap.getColorTable();
+ if (skTable) {
+ QVector<QRgb> qTable(skTable->count());
+ for (int i = 0; i < skTable->count(); ++i)
+ qTable[i] = (*skTable)[i];
+ image.setColorTable(qTable);
+ }
+ break;
+ }
+ case kGray_8_SkColorType:
+ image = toQImage(bitmap, QImage::Format_Grayscale8);
+ break;
+ }
+ return image;
+}
+
+} // namespace QtWebEngineCore