summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/clipboard_qt.cpp3
-rw-r--r--src/core/core_gyp_generator.pro1
-rw-r--r--src/core/type_conversion.cpp116
-rw-r--r--src/core/type_conversion.h2
4 files changed, 120 insertions, 2 deletions
diff --git a/src/core/clipboard_qt.cpp b/src/core/clipboard_qt.cpp
index 206392840..9ac5c7a17 100644
--- a/src/core/clipboard_qt.cpp
+++ b/src/core/clipboard_qt.cpp
@@ -240,8 +240,7 @@ void ClipboardQt::WriteWebSmartPaste()
void ClipboardQt::WriteBitmap(const SkBitmap& bitmap)
{
- QImage image(reinterpret_cast<const uchar *>(bitmap.getPixels()), bitmap.width(), bitmap.height(), QImage::Format_ARGB32);
- getUncommittedData()->setImageData(image.copy());
+ getUncommittedData()->setImageData(toQImage(bitmap).copy());
}
void ClipboardQt::WriteBookmark(const char* title_data, size_t title_len, const char* url_data, size_t url_len)
diff --git a/src/core/core_gyp_generator.pro b/src/core/core_gyp_generator.pro
index 58e83f954..ab2a1c48e 100644
--- a/src/core/core_gyp_generator.pro
+++ b/src/core/core_gyp_generator.pro
@@ -83,6 +83,7 @@ SOURCES = \
ssl_host_state_delegate_qt.cpp \
stream_video_node.cpp \
surface_factory_qt.cpp \
+ type_conversion.cpp \
url_request_context_getter_qt.cpp \
url_request_custom_job.cpp \
url_request_custom_job_delegate.cpp \
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
diff --git a/src/core/type_conversion.h b/src/core/type_conversion.h
index e97ebed6f..a08c4c26f 100644
--- a/src/core/type_conversion.h
+++ b/src/core/type_conversion.h
@@ -148,6 +148,8 @@ inline QImage toQImage(const SkBitmap &bitmap, QImage::Format format)
return QImage((uchar *)pixelRef->pixels(), bitmap.width(), bitmap.height(), format);
}
+QImage toQImage(const SkBitmap &bitmap);
+
inline QMatrix4x4 toQt(const SkMatrix44 &m)
{
QMatrix4x4 qtMatrix(