19 formats.reserve(imageFormats.size());
20 for (
const auto &format : imageFormats)
21 formats.append(
"image/"_L1 + QLatin1StringView(format.toLower()));
24 const qsizetype pngIndex = formats.indexOf(
"image/png"_L1);
25 if (pngIndex != -1 && pngIndex != 0)
26 formats.move(pngIndex, 0);
50bool QInternalMimeData::hasFormat(
const QString &mimeType)
const
52 bool foundFormat = hasFormat_sys(mimeType);
53 if (!foundFormat && mimeType ==
"application/x-qt-image"_L1) {
54 QStringList imageFormats = imageReadMimeFormats();
55 for (
int i = 0; i < imageFormats.size(); ++i) {
56 if ((foundFormat = hasFormat_sys(imageFormats.at(i))))
63QStringList QInternalMimeData::formats()
const
65 QStringList realFormats = formats_sys();
66 if (!realFormats.contains(
"application/x-qt-image"_L1)) {
67 QStringList imageFormats = imageReadMimeFormats();
68 for (
int i = 0; i < imageFormats.size(); ++i) {
69 if (realFormats.contains(imageFormats.at(i))) {
70 realFormats +=
"application/x-qt-image"_L1;
78QVariant QInternalMimeData::retrieveData(
const QString &mimeType, QMetaType type)
const
80 QVariant data = retrieveData_sys(mimeType, type);
81 const QByteArray *ba = get_if<QByteArray>(&std::as_const(data));
82 if (mimeType ==
"application/x-qt-image"_L1) {
83 if (data.isNull() || (ba && ba->isEmpty())) {
85 QStringList imageFormats = imageReadMimeFormats();
86 for (
int i = 0; i < imageFormats.size(); ++i) {
87 data = retrieveData_sys(imageFormats.at(i), type);
88 ba = get_if<QByteArray>(&std::as_const(data));
89 if (data.isNull() || (ba && ba->isEmpty()))
94 int typeId = type.id();
97 && (typeId == QMetaType::QImage || typeId == QMetaType::QPixmap || typeId == QMetaType::QBitmap))
98 data = QImage::fromData(*ba);
100 }
else if (ba && mimeType ==
"application/x-color"_L1) {
102 if (ba->size() == 8) {
103 auto colBuf =
reinterpret_cast<
const ushort *>(ba->data());
104 c.setRgbF(qreal(colBuf[0]) / qreal(0xFFFF),
105 qreal(colBuf[1]) / qreal(0xFFFF),
106 qreal(colBuf[2]) / qreal(0xFFFF),
107 qreal(colBuf[3]) / qreal(0xFFFF));
110 qWarning(
"Qt: Invalid color format");
112 }
else if (ba && data.metaType() != type) {
114 QInternalMimeData *that =
const_cast<QInternalMimeData *>(
this);
115 that->setData(mimeType, *ba);
116 data = QMimeData::retrieveData(mimeType, type);
128QStringList QInternalMimeData::formatsHelper(
const QMimeData *data)
130 QStringList realFormats = data->formats();
131 if (realFormats.contains(
"application/x-qt-image"_L1)) {
133 QStringList imageFormats = imageWriteMimeFormats();
134 for (
int i = 0; i < imageFormats.size(); ++i) {
135 if (!realFormats.contains(imageFormats.at(i)))
136 realFormats.append(imageFormats.at(i));
142bool QInternalMimeData::hasFormatHelper(
const QString &mimeType,
const QMimeData *data)
145 bool foundFormat = data->hasFormat(mimeType);
147 if (mimeType ==
"application/x-qt-image"_L1) {
149 QStringList imageFormats = imageWriteMimeFormats();
150 for (
int i = 0; i < imageFormats.size(); ++i) {
151 if ((foundFormat = data->hasFormat(imageFormats.at(i))))
154 }
else if (mimeType.startsWith(
"image/"_L1)) {
155 return data->hasImage() && imageWriteMimeFormats().contains(mimeType);
161QByteArray QInternalMimeData::renderDataHelper(
const QString &mimeType,
const QMimeData *data)
164 if (mimeType ==
"application/x-color"_L1) {
166
167
168
169
170
171
172
173
174
175
177 ushort * colBuf = (ushort *)ba.data();
178 QColor c = qvariant_cast<QColor>(data->colorData());
179 colBuf[0] = ushort(c.redF() * 0xFFFF);
180 colBuf[1] = ushort(c.greenF() * 0xFFFF);
181 colBuf[2] = ushort(c.blueF() * 0xFFFF);
182 colBuf[3] = ushort(c.alphaF() * 0xFFFF);
184 ba = data->data(mimeType);
186 if (mimeType ==
"application/x-qt-image"_L1 && data->hasImage()) {
187 QImage image = qvariant_cast<QImage>(data->imageData());
189 buf.open(QBuffer::WriteOnly);
191 image.save(&buf,
"PNG");
192 }
else if (
auto prefix =
"image/"_L1; mimeType.startsWith(prefix) && data->hasImage()) {
193 QImage image = qvariant_cast<QImage>(data->imageData());
195 buf.open(QBuffer::WriteOnly);
196 auto type = QStringView{mimeType}.sliced(prefix.size());
197 image.save(&buf, type.toLatin1().toUpper().constData());