mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 10:52:49 +00:00
khtml: cleanup and fix alpha channel detection regression since 2f72cbbd
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
aef9f7cf16
commit
ac6aaa5fee
8 changed files with 18 additions and 52 deletions
|
@ -190,9 +190,6 @@ hash_prop (register const char *str, register unsigned int len)
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
__inline
|
__inline
|
||||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
|
||||||
__attribute__ ((__gnu_inline__))
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
const struct css_prop *
|
const struct css_prop *
|
||||||
findProp (register const char *str, register unsigned int len)
|
findProp (register const char *str, register unsigned int len)
|
||||||
|
|
|
@ -175,9 +175,6 @@ hash_val (register const char *str, register unsigned int len)
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
__inline
|
__inline
|
||||||
#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
|
||||||
__attribute__ ((__gnu_inline__))
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
const struct css_value *
|
const struct css_value *
|
||||||
findValue (register const char *str, register unsigned int len)
|
findValue (register const char *str, register unsigned int len)
|
||||||
|
|
|
@ -131,10 +131,9 @@ bool Image::processData(char* data, int length)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int stat = loader->processData(data, length);
|
const bool success = loader->processData(data, length);
|
||||||
|
|
||||||
//If we just finished decoding...
|
//If we just finished decoding...
|
||||||
if (stat == ImageLoader::Done)
|
if (success)
|
||||||
{
|
{
|
||||||
if (original && original->animProvider)
|
if (original && original->animProvider)
|
||||||
original->animProvider->setShowAnimations(animationAdvice);
|
original->animProvider->setShowAnimations(animationAdvice);
|
||||||
|
@ -142,15 +141,11 @@ bool Image::processData(char* data, int length)
|
||||||
fullyDecoded = true;
|
fullyDecoded = true;
|
||||||
owner->imageDone(this);
|
owner->imageDone(this);
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stat == ImageLoader::Error)
|
loadError();
|
||||||
{
|
return false;
|
||||||
loadError();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true; //Need more stuff
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Image::notifyImageInfo(int _width, int _height)
|
void Image::notifyImageInfo(int _width, int _height)
|
||||||
|
@ -406,13 +401,6 @@ QImage* Image::qimage() const
|
||||||
return &static_cast<RawImagePlane*>(original->parent)->image;
|
return &static_cast<RawImagePlane*>(original->parent)->image;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Image::hasAlpha() const
|
|
||||||
{
|
|
||||||
if (!original || !original->parent)
|
|
||||||
return false;
|
|
||||||
return original->parent->format.hasAlpha();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Image::setShowAnimations(KHTMLSettings::KAnimationAdvice newAdvice)
|
void Image::setShowAnimations(KHTMLSettings::KAnimationAdvice newAdvice)
|
||||||
{
|
{
|
||||||
if (animationAdvice != newAdvice)
|
if (animationAdvice != newAdvice)
|
||||||
|
|
|
@ -76,11 +76,6 @@ public:
|
||||||
*/
|
*/
|
||||||
bool complete() const;
|
bool complete() const;
|
||||||
|
|
||||||
/**
|
|
||||||
Returns true if the image may have an alpha channel
|
|
||||||
*/
|
|
||||||
bool hasAlpha() const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the image of basic content. Should be treated as READ ONLY.
|
Returns the image of basic content. Should be treated as READ ONLY.
|
||||||
(but see CanvasImage)
|
(but see CanvasImage)
|
||||||
|
|
|
@ -90,11 +90,6 @@ struct ImageFormat
|
||||||
return toRet;
|
return toRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasAlpha() const
|
|
||||||
{
|
|
||||||
return (type == Image_ARGB_32 || type == Image_ARGB_32_DontPremult);
|
|
||||||
}
|
|
||||||
|
|
||||||
mutable QVector<QRgb> palette;
|
mutable QVector<QRgb> palette;
|
||||||
|
|
||||||
//A helper for setting up a format descriptor for 8-bit grayscale
|
//A helper for setting up a format descriptor for 8-bit grayscale
|
||||||
|
|
|
@ -118,18 +118,12 @@ public:
|
||||||
|
|
||||||
virtual ~ImageLoader()
|
virtual ~ImageLoader()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
enum Status
|
|
||||||
{
|
|
||||||
Done = -2,
|
|
||||||
Error = -1
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Decodes a portion of the image, and returns the appropriate
|
Decodes the image, and returns the appropriate status,
|
||||||
status, or the number of bytes read
|
or the number of bytes read
|
||||||
*/
|
*/
|
||||||
virtual int processData(char* data, int length) = 0;
|
virtual bool processData(char* data, int length) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,7 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int processData(char* data, int length)
|
virtual bool processData(char* data, int length)
|
||||||
{
|
{
|
||||||
buffer.setData(data, length);
|
buffer.setData(data, length);
|
||||||
buffer.open(QIODevice::ReadOnly);
|
buffer.open(QIODevice::ReadOnly);
|
||||||
|
@ -105,7 +105,7 @@ public:
|
||||||
QImageReader reader(&buffer, qformat);
|
QImageReader reader(&buffer, qformat);
|
||||||
|
|
||||||
if (!reader.canRead()) {
|
if (!reader.canRead()) {
|
||||||
return Error;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize size = reader.size();
|
QSize size = reader.size();
|
||||||
|
@ -113,11 +113,11 @@ public:
|
||||||
if (ImageManager::isAcceptableSize(size.width(), size.height()))
|
if (ImageManager::isAcceptableSize(size.width(), size.height()))
|
||||||
notifyImageInfo(size.width(), size.height());
|
notifyImageInfo(size.width(), size.height());
|
||||||
else
|
else
|
||||||
return Error;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!reader.read(&image)) {
|
if (!reader.read(&image)) {
|
||||||
return Error;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!size.isValid()) {
|
if (!size.isValid()) {
|
||||||
|
@ -125,18 +125,18 @@ public:
|
||||||
if (ImageManager::isAcceptableSize(image.width(), image.height()))
|
if (ImageManager::isAcceptableSize(image.width(), image.height()))
|
||||||
notifyImageInfo(image.width(), image.height());
|
notifyImageInfo(image.width(), image.height());
|
||||||
else
|
else
|
||||||
return Error;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageFormat format;
|
ImageFormat format;
|
||||||
if (!imageFormat(image, format)) {
|
if (!imageFormat(image, format)) {
|
||||||
return Error;
|
return false;
|
||||||
}
|
}
|
||||||
notifyAppendFrame(image.width(), image.height(), format);
|
notifyAppendFrame(image.width(), image.height(), format);
|
||||||
|
|
||||||
notifyQImage(1, &image);
|
notifyQImage(1, &image);
|
||||||
|
|
||||||
return Done;
|
return true;
|
||||||
}
|
}
|
||||||
bool imageFormat(QImage &image, ImageFormat &format) {
|
bool imageFormat(QImage &image, ImageFormat &format) {
|
||||||
switch(image.format()) {
|
switch(image.format()) {
|
||||||
|
|
|
@ -616,7 +616,7 @@ QPixmap CachedImage::pixmap( ) const
|
||||||
int w = i->size().width();
|
int w = i->size().width();
|
||||||
int h = i->size().height();
|
int h = i->size().height();
|
||||||
|
|
||||||
if (i->hasAlpha() && QApplication::desktop()->paintEngine() &&
|
if (i->qimage()->hasAlphaChannel() && QApplication::desktop()->paintEngine() &&
|
||||||
!QApplication::desktop()->paintEngine()->hasFeature(QPaintEngine::PorterDuff)) {
|
!QApplication::desktop()->paintEngine()->hasFeature(QPaintEngine::PorterDuff)) {
|
||||||
QImage im(w, h, QImage::Format_ARGB32_Premultiplied);
|
QImage im(w, h, QImage::Format_ARGB32_Premultiplied);
|
||||||
QPainter paint(&im);
|
QPainter paint(&im);
|
||||||
|
@ -627,7 +627,7 @@ QPixmap CachedImage::pixmap( ) const
|
||||||
return QPixmap::fromImage( im, Qt::NoOpaqueDetection );
|
return QPixmap::fromImage( im, Qt::NoOpaqueDetection );
|
||||||
} else {
|
} else {
|
||||||
QPixmap pm(w, h);
|
QPixmap pm(w, h);
|
||||||
if (i->hasAlpha())
|
if (i->qimage()->hasAlphaChannel())
|
||||||
pm.fill(Qt::transparent);
|
pm.fill(Qt::transparent);
|
||||||
QPainter paint(&pm);
|
QPainter paint(&pm);
|
||||||
paint.setCompositionMode(QPainter::CompositionMode_Source);
|
paint.setCompositionMode(QPainter::CompositionMode_Source);
|
||||||
|
|
Loading…
Add table
Reference in a new issue