Do not change depth for the backingstore's underlying image
The depth cannot change. This means that RGB16 cannot be upgraded to 8565 for example as that would be a 24 bit format whereas the backingstores and the underlying platform may expect a 16 bit format. Task-number: QTBUG-50869 Change-Id: I648b39287d43a80fae8097a33bbf3b8bbdcb8816 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Andreas Holzammer <andreas.holzammer@kdab.com> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
This commit is contained in:
parent
cb6d4d1f16
commit
d482805856
@ -189,6 +189,12 @@ inline QImage::Format qt_alphaVersion(QImage::Format format)
|
|||||||
return QImage::Format_ARGB32_Premultiplied;
|
return QImage::Format_ARGB32_Premultiplied;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline QImage::Format qt_maybeAlphaVersionWithSameDepth(QImage::Format format)
|
||||||
|
{
|
||||||
|
const QImage::Format toFormat = qt_alphaVersion(format);
|
||||||
|
return qt_depthForFormat(format) == qt_depthForFormat(toFormat) ? toFormat : format;
|
||||||
|
}
|
||||||
|
|
||||||
inline QImage::Format qt_alphaVersionForPainting(QImage::Format format)
|
inline QImage::Format qt_alphaVersionForPainting(QImage::Format format)
|
||||||
{
|
{
|
||||||
QImage::Format toFormat = qt_alphaVersion(format);
|
QImage::Format toFormat = qt_alphaVersion(format);
|
||||||
|
@ -155,7 +155,7 @@ void QWindowsBackingStore::resize(const QSize &size, const QRegion ®ion)
|
|||||||
if (QImage::toPixelFormat(format).alphaUsage() == QPixelFormat::UsesAlpha)
|
if (QImage::toPixelFormat(format).alphaUsage() == QPixelFormat::UsesAlpha)
|
||||||
m_alphaNeedsFill = true;
|
m_alphaNeedsFill = true;
|
||||||
else // upgrade but here we know app painting does not rely on alpha hence no need to fill
|
else // upgrade but here we know app painting does not rely on alpha hence no need to fill
|
||||||
format = qt_alphaVersionForPainting(format);
|
format = qt_maybeAlphaVersionWithSameDepth(format);
|
||||||
|
|
||||||
QWindowsNativeImage *oldwni = m_image.data();
|
QWindowsNativeImage *oldwni = m_image.data();
|
||||||
QWindowsNativeImage *newwni = new QWindowsNativeImage(size.width(), size.height(), format);
|
QWindowsNativeImage *newwni = new QWindowsNativeImage(size.width(), size.height(), format);
|
||||||
|
@ -179,7 +179,7 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI
|
|||||||
|
|
||||||
m_hasAlpha = QImage::toPixelFormat(format).alphaUsage() == QPixelFormat::UsesAlpha;
|
m_hasAlpha = QImage::toPixelFormat(format).alphaUsage() == QPixelFormat::UsesAlpha;
|
||||||
if (!m_hasAlpha)
|
if (!m_hasAlpha)
|
||||||
format = qt_alphaVersionForPainting(format);
|
format = qt_maybeAlphaVersionWithSameDepth(format);
|
||||||
|
|
||||||
m_qimage = QImage( (uchar*) m_xcb_image->data, m_xcb_image->width, m_xcb_image->height, m_xcb_image->stride, format);
|
m_qimage = QImage( (uchar*) m_xcb_image->data, m_xcb_image->width, m_xcb_image->height, m_xcb_image->stride, format);
|
||||||
m_graphics_buffer = new QXcbShmGraphicsBuffer(&m_qimage);
|
m_graphics_buffer = new QXcbShmGraphicsBuffer(&m_qimage);
|
||||||
|
Loading…
Reference in New Issue
Block a user