18 formats.reserve(imageFormats.size());
19 for (
const auto &format : imageFormats)
20 formats.append(
"image/"_L1 + QLatin1StringView(format.toLower()));
23 const qsizetype pngIndex = formats.indexOf(
"image/png"_L1);
24 if (pngIndex != -1 && pngIndex != 0)
25 formats.move(pngIndex, 0);
49bool QInternalMimeData::hasFormat(
const QString &mimeType)
const
51 bool foundFormat = hasFormat_sys(mimeType);
52 if (!foundFormat && mimeType ==
"application/x-qt-image"_L1) {
53 QStringList imageFormats = imageReadMimeFormats();
54 for (
int i = 0; i < imageFormats.size(); ++i) {
55 if ((foundFormat = hasFormat_sys(imageFormats.at(i))))
62QStringList QInternalMimeData::formats()
const
64 QStringList realFormats = formats_sys();
65 if (!realFormats.contains(
"application/x-qt-image"_L1)) {
66 QStringList imageFormats = imageReadMimeFormats();
67 for (
int i = 0; i < imageFormats.size(); ++i) {
68 if (realFormats.contains(imageFormats.at(i))) {
69 realFormats +=
"application/x-qt-image"_L1;
77QVariant QInternalMimeData::retrieveData(
const QString &mimeType, QMetaType type)
const
79 QVariant data = retrieveData_sys(mimeType, type);
80 if (mimeType ==
"application/x-qt-image"_L1) {
81 if (data.isNull() || (data.metaType().id() == QMetaType::QByteArray && data.toByteArray().isEmpty())) {
83 QStringList imageFormats = imageReadMimeFormats();
84 for (
int i = 0; i < imageFormats.size(); ++i) {
85 data = retrieveData_sys(imageFormats.at(i), type);
86 if (data.isNull() || (data.metaType().id() == QMetaType::QByteArray && data.toByteArray().isEmpty()))
91 int typeId = type.id();
93 if (data.metaType().id() == QMetaType::QByteArray
94 && (typeId == QMetaType::QImage || typeId == QMetaType::QPixmap || typeId == QMetaType::QBitmap))
95 data = QImage::fromData(data.toByteArray());
97 }
else if (mimeType ==
"application/x-color"_L1 && data.metaType().id() == QMetaType::QByteArray) {
99 QByteArray ba = data.toByteArray();
100 if (ba.size() == 8) {
101 ushort * colBuf = (ushort *)ba.data();
102 c.setRgbF(qreal(colBuf[0]) / qreal(0xFFFF),
103 qreal(colBuf[1]) / qreal(0xFFFF),
104 qreal(colBuf[2]) / qreal(0xFFFF),
105 qreal(colBuf[3]) / qreal(0xFFFF));
108 qWarning(
"Qt: Invalid color format");
110 }
else if (data.metaType() != type && data.metaType().id() == QMetaType::QByteArray) {
112 QInternalMimeData *that =
const_cast<QInternalMimeData *>(
this);
113 that->setData(mimeType, data.toByteArray());
114 data = QMimeData::retrieveData(mimeType, type);
126QStringList QInternalMimeData::formatsHelper(
const QMimeData *data)
128 QStringList realFormats = data->formats();
129 if (realFormats.contains(
"application/x-qt-image"_L1)) {
131 QStringList imageFormats = imageWriteMimeFormats();
132 for (
int i = 0; i < imageFormats.size(); ++i) {
133 if (!realFormats.contains(imageFormats.at(i)))
134 realFormats.append(imageFormats.at(i));
140bool QInternalMimeData::hasFormatHelper(
const QString &mimeType,
const QMimeData *data)
143 bool foundFormat = data->hasFormat(mimeType);
145 if (mimeType ==
"application/x-qt-image"_L1) {
147 QStringList imageFormats = imageWriteMimeFormats();
148 for (
int i = 0; i < imageFormats.size(); ++i) {
149 if ((foundFormat = data->hasFormat(imageFormats.at(i))))
152 }
else if (mimeType.startsWith(
"image/"_L1)) {
153 return data->hasImage() && imageWriteMimeFormats().contains(mimeType);
159QByteArray QInternalMimeData::renderDataHelper(
const QString &mimeType,
const QMimeData *data)
162 if (mimeType ==
"application/x-color"_L1) {
164
165
166
167
168
169
170
171
172
173
175 ushort * colBuf = (ushort *)ba.data();
176 QColor c = qvariant_cast<QColor>(data->colorData());
177 colBuf[0] = ushort(c.redF() * 0xFFFF);
178 colBuf[1] = ushort(c.greenF() * 0xFFFF);
179 colBuf[2] = ushort(c.blueF() * 0xFFFF);
180 colBuf[3] = ushort(c.alphaF() * 0xFFFF);
182 ba = data->data(mimeType);
184 if (mimeType ==
"application/x-qt-image"_L1 && data->hasImage()) {
185 QImage image = qvariant_cast<QImage>(data->imageData());
187 buf.open(QBuffer::WriteOnly);
189 image.save(&buf,
"PNG");
190 }
else if (
auto prefix =
"image/"_L1; mimeType.startsWith(prefix) && data->hasImage()) {
191 QImage image = qvariant_cast<QImage>(data->imageData());
193 buf.open(QBuffer::WriteOnly);
194 auto type = QStringView{mimeType}.sliced(prefix.size());
195 image.save(&buf, type.toLatin1().toUpper().constData());