diff options
author | Steve Block <steveblock@google.com> | 2009-12-15 10:12:09 +0000 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2009-12-17 17:41:10 +0000 |
commit | 643ca7872b450ea4efacab6188849e5aac2ba161 (patch) | |
tree | 6982576c228bcd1a7efe98afed544d840751094c /WebCore/platform/graphics/qt | |
parent | d026980fde6eb3b01c1fe49441174e89cd1be298 (diff) | |
download | external_webkit-643ca7872b450ea4efacab6188849e5aac2ba161.zip external_webkit-643ca7872b450ea4efacab6188849e5aac2ba161.tar.gz external_webkit-643ca7872b450ea4efacab6188849e5aac2ba161.tar.bz2 |
Merge webkit.org at r51976 : Initial merge by git.
Change-Id: Ib0e7e2f0fb4bee5a186610272edf3186f0986b43
Diffstat (limited to 'WebCore/platform/graphics/qt')
-rw-r--r-- | WebCore/platform/graphics/qt/FontCacheQt.cpp | 245 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/FontCustomPlatformData.cpp | 2 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/FontFallbackListQt.cpp | 138 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/FontPlatformData.h | 120 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/FontPlatformDataQt.cpp | 116 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/FontQt.cpp | 3 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/FontQt43.cpp | 354 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/GraphicsContextQt.cpp | 69 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/IconQt.cpp | 16 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/ImageDecoderQt.cpp | 10 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/ImageQt.cpp | 49 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp | 8 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/StillImageQt.cpp | 2 | ||||
-rw-r--r-- | WebCore/platform/graphics/qt/StillImageQt.h | 2 |
14 files changed, 281 insertions, 853 deletions
diff --git a/WebCore/platform/graphics/qt/FontCacheQt.cpp b/WebCore/platform/graphics/qt/FontCacheQt.cpp index 1113eae..82fb709 100644 --- a/WebCore/platform/graphics/qt/FontCacheQt.cpp +++ b/WebCore/platform/graphics/qt/FontCacheQt.cpp @@ -34,260 +34,39 @@ #include <wtf/ListHashSet.h> #include <wtf/StdLibExtras.h> +#include <QFont> + using namespace WTF; namespace WebCore { -FontCache* fontCache() +void FontCache::platformInit() { - DEFINE_STATIC_LOCAL(FontCache, globalFontCache, ()); - return &globalFontCache; } -FontCache::FontCache() -{ -} - -void FontCache::getTraitsInFamily(const AtomicString&, Vector<unsigned>&) -{ -} - -// This type must be consistent with FontPlatformData's ctor - the one which -// gets FontDescription as it's parameter. -class FontPlatformDataCacheKey { -public: - FontPlatformDataCacheKey(const FontDescription& description) - : m_familyName() - , m_size(description.computedPixelSize()) - , m_bold(false) - , m_italic(description.italic()) - , m_smallCaps(description.smallCaps()) - , m_hash(0) - { - // FIXME: Map all FontWeight values to QFont weights in FontPlatformData's ctor and follow it here - if (FontPlatformData::toQFontWeight(description.weight()) > QFont::Normal) - m_bold = true; - - const FontFamily* family = &description.family(); - while (family) { - m_familyName.append(family->family()); - family = family->next(); - if (family) - m_familyName.append(','); - } - - computeHash(); - } - - FontPlatformDataCacheKey(const FontPlatformData& fontData) - : m_familyName(static_cast<String>(fontData.family())) - , m_size(fontData.pixelSize()) - , m_bold(fontData.bold()) - , m_italic(fontData.italic()) - , m_smallCaps(fontData.smallCaps()) - , m_hash(0) - { - computeHash(); - } - - FontPlatformDataCacheKey(HashTableDeletedValueType) : m_size(hashTableDeletedSize()) { } - bool isHashTableDeletedValue() const { return m_size == hashTableDeletedSize(); } - - enum HashTableEmptyValueType { HashTableEmptyValue }; - - FontPlatformDataCacheKey(HashTableEmptyValueType) - : m_familyName() - , m_size(0) - , m_bold(false) - , m_italic(false) - , m_smallCaps(false) - , m_hash(0) - { - } - - bool operator==(const FontPlatformDataCacheKey& other) const - { - if (m_hash != other.m_hash) - return false; - - return equalIgnoringCase(m_familyName, other.m_familyName) && m_size == other.m_size && - m_bold == other.m_bold && m_italic == other.m_italic && m_smallCaps == other.m_smallCaps; - } - - unsigned hash() const - { - return m_hash; - } - - void computeHash() - { - unsigned hashCodes[] = { - CaseFoldingHash::hash(m_familyName), - m_size | static_cast<unsigned>(m_bold << sizeof(unsigned) * 8 - 1) - | static_cast<unsigned>(m_italic) << sizeof(unsigned) *8 - 2 - | static_cast<unsigned>(m_smallCaps) << sizeof(unsigned) * 8 - 3 - }; - m_hash = StringImpl::computeHash(reinterpret_cast<UChar*>(hashCodes), sizeof(hashCodes) / sizeof(UChar)); - } - -private: - String m_familyName; - int m_size; - bool m_bold; - bool m_italic; - bool m_smallCaps; - unsigned m_hash; - - static unsigned hashTableDeletedSize() { return 0xFFFFFFFFU; } -}; - -struct FontPlatformDataCacheKeyHash { - static unsigned hash(const FontPlatformDataCacheKey& key) - { - return key.hash(); - } - - static bool equal(const FontPlatformDataCacheKey& a, const FontPlatformDataCacheKey& b) - { - return a == b; - } - - static const bool safeToCompareToEmptyOrDeleted = true; -}; - -struct FontPlatformDataCacheKeyTraits : WTF::GenericHashTraits<FontPlatformDataCacheKey> { - static const bool needsDestruction = true; - static const FontPlatformDataCacheKey& emptyValue() - { - DEFINE_STATIC_LOCAL(FontPlatformDataCacheKey, key, (FontPlatformDataCacheKey::HashTableEmptyValue)); - return key; - } - static void constructDeletedValue(FontPlatformDataCacheKey& slot) - { - new (&slot) FontPlatformDataCacheKey(HashTableDeletedValue); - } - static bool isDeletedValue(const FontPlatformDataCacheKey& value) - { - return value.isHashTableDeletedValue(); - } -}; - -typedef HashMap<FontPlatformDataCacheKey, FontPlatformData*, FontPlatformDataCacheKeyHash, FontPlatformDataCacheKeyTraits> FontPlatformDataCache; - -// using Q_GLOBAL_STATIC leads to crash. TODO investigate the way to fix this. -static FontPlatformDataCache* gFontPlatformDataCache = 0; - -FontPlatformData* FontCache::getCachedFontPlatformData(const FontDescription& description, const AtomicString&, bool) -{ - if (!gFontPlatformDataCache) - gFontPlatformDataCache = new FontPlatformDataCache; - - FontPlatformDataCacheKey key(description); - FontPlatformData* platformData = gFontPlatformDataCache->get(key); - if (!platformData) { - platformData = new FontPlatformData(description); - gFontPlatformDataCache->add(key, platformData); - } - return platformData; -} - -typedef HashMap<FontPlatformDataCacheKey, std::pair<SimpleFontData*, unsigned>, FontPlatformDataCacheKeyHash, FontPlatformDataCacheKeyTraits> FontDataCache; - -static FontDataCache* gFontDataCache = 0; - -static const int cMaxInactiveFontData = 40; -static const int cTargetInactiveFontData = 32; - -static ListHashSet<const SimpleFontData*>* gInactiveFontDataSet = 0; - -SimpleFontData* FontCache::getCachedFontData(const FontPlatformData* fontPlatformData) -{ - if (!gFontDataCache) { - gFontDataCache = new FontDataCache; - gInactiveFontDataSet = new ListHashSet<const SimpleFontData*>; - } - - FontPlatformDataCacheKey key(*fontPlatformData); - FontDataCache::iterator it = gFontDataCache->find(key); - if (it == gFontDataCache->end()) { - SimpleFontData* fontData = new SimpleFontData(*fontPlatformData); - gFontDataCache->add(key, std::pair<SimpleFontData*, unsigned>(fontData, 1)); - return fontData; - } - if (!it->second.second++) { - ASSERT(gInactiveFontDataSet->contains(it->second.first)); - gInactiveFontDataSet->remove(it->second.first); - } - return it->second.first; -} - -FontPlatformData* FontCache::getLastResortFallbackFont(const FontDescription&) +const SimpleFontData* FontCache::getFontDataForCharacters(const Font&, const UChar*, int) { return 0; } -void FontCache::releaseFontData(const WebCore::SimpleFontData* fontData) +FontPlatformData* FontCache::getSimilarFontPlatformData(const Font& font) { - ASSERT(gFontDataCache); - ASSERT(!fontData->isCustomFont()); - - FontPlatformDataCacheKey key(fontData->platformData()); - FontDataCache::iterator it = gFontDataCache->find(key); - ASSERT(it != gFontDataCache->end()); - if (!--it->second.second) { - gInactiveFontDataSet->add(it->second.first); - if (gInactiveFontDataSet->size() > cMaxInactiveFontData) - purgeInactiveFontData(gInactiveFontDataSet->size() - cTargetInactiveFontData); - } -} - -void FontCache::purgeInactiveFontData(int count) -{ - static bool isPurging; // Guard against reentry when e.g. a deleted FontData releases its small caps FontData. - if (isPurging) - return; - - isPurging = true; - - ListHashSet<const SimpleFontData*>::iterator it = gInactiveFontDataSet->begin(); - ListHashSet<const SimpleFontData*>::iterator end = gInactiveFontDataSet->end(); - for (int i = 0; i < count && it != end; ++i, ++it) { - FontPlatformDataCacheKey key = (*it)->platformData(); - pair<SimpleFontData*, unsigned> fontDataPair = gFontDataCache->take(key); - ASSERT(fontDataPair.first != 0); - ASSERT(!fontDataPair.second); - delete fontDataPair.first; - - FontPlatformData* platformData = gFontPlatformDataCache->take(key); - if (platformData) - delete platformData; - } - - if (it == end) { - // Removed everything - gInactiveFontDataSet->clear(); - } else { - for (int i = 0; i < count; ++i) - gInactiveFontDataSet->remove(gInactiveFontDataSet->begin()); - } - - isPurging = false; + return 0; } -void FontCache::addClient(FontSelector*) +FontPlatformData* FontCache::getLastResortFallbackFont(const FontDescription& fontDescription) { + const AtomicString fallbackFamily = QFont(fontDescription.family().family()).lastResortFont(); + return new FontPlatformData(fontDescription, fallbackFamily); } -void FontCache::removeClient(FontSelector*) +void FontCache::getTraitsInFamily(const AtomicString&, Vector<unsigned>&) { } -void FontCache::invalidate() +FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& familyName) { - if (!gFontPlatformDataCache || !gFontDataCache) - return; - - purgeInactiveFontData(); + return new FontPlatformData(fontDescription, familyName); } } // namespace WebCore diff --git a/WebCore/platform/graphics/qt/FontCustomPlatformData.cpp b/WebCore/platform/graphics/qt/FontCustomPlatformData.cpp index a19464e..6e9d053 100644 --- a/WebCore/platform/graphics/qt/FontCustomPlatformData.cpp +++ b/WebCore/platform/graphics/qt/FontCustomPlatformData.cpp @@ -43,7 +43,7 @@ FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, b font.setWeight(QFont::Bold); font.setItalic(italic); - return FontPlatformData(font, bold); + return FontPlatformData(font); } FontCustomPlatformData* createFontCustomPlatformData(SharedBuffer* buffer) diff --git a/WebCore/platform/graphics/qt/FontFallbackListQt.cpp b/WebCore/platform/graphics/qt/FontFallbackListQt.cpp deleted file mode 100644 index 8e1e4f6..0000000 --- a/WebCore/platform/graphics/qt/FontFallbackListQt.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - Copyright (C) 2008 Holger Hans Peter Freyther - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - Replacement of the stock FontFallbackList as Qt is going to find us a - replacement font, will do caching and the other stuff we implement in - WebKit. -*/ - -#include "config.h" -#include "FontFallbackList.h" - -#include "Font.h" -#include "FontCache.h" -#include "SegmentedFontData.h" - -#include <QDebug> - -namespace WebCore { - -FontFallbackList::FontFallbackList() - : m_pageZero(0) - , m_cachedPrimarySimpleFontData(0) - , m_fontSelector(0) - , m_familyIndex(0) - , m_pitch(UnknownPitch) - , m_loadingCustomFonts(false) - , m_generation(0) -{ -} - -void FontFallbackList::invalidate(WTF::PassRefPtr<WebCore::FontSelector> fontSelector) -{ - releaseFontData(); - m_fontList.clear(); - m_pageZero = 0; - m_pages.clear(); - m_cachedPrimarySimpleFontData = 0; - m_familyIndex = 0; - m_pitch = UnknownPitch; - m_loadingCustomFonts = false; - m_fontSelector = fontSelector; - m_generation = 0; -} - -void FontFallbackList::releaseFontData() -{ - unsigned numFonts = m_fontList.size(); - for (unsigned i = 0; i < numFonts; ++i) { - if (m_fontList[i].second) - delete m_fontList[i].first; - else { - ASSERT(!m_fontList[i].first->isSegmented()); - fontCache()->releaseFontData(static_cast<const SimpleFontData*>(m_fontList[i].first)); - } - } -} - -void FontFallbackList::determinePitch(const WebCore::Font* font) const -{ - const FontData* fontData = primaryFontData(font); - if (!fontData->isSegmented()) - m_pitch = static_cast<const SimpleFontData*>(fontData)->pitch(); - else { - const SegmentedFontData* segmentedFontData = static_cast<const SegmentedFontData*>(fontData); - unsigned numRanges = segmentedFontData->numRanges(); - if (numRanges == 1) - m_pitch = segmentedFontData->rangeAt(0).fontData()->pitch(); - else - m_pitch = VariablePitch; - } -} - -const FontData* FontFallbackList::fontDataAt(const WebCore::Font* _font, unsigned index) const -{ - if (index != 0) - return 0; - - // Search for the WebCore font that is already in the list - for (int i = m_fontList.size() - 1; i >= 0; --i) { - pair<const FontData*, bool> item = m_fontList[i]; - // item.second means that the item was created locally or not - if (!item.second) - return item.first; - } - - // Use the FontSelector to get a WebCore font and then fallback to Qt - const FontDescription& description = _font->fontDescription(); - const FontFamily* family = &description.family(); - while (family) { - if (m_fontSelector) { - FontData* data = m_fontSelector->getFontData(description, family->family()); - if (data) { - if (data->isLoading()) - m_loadingCustomFonts = true; - if (!data->isCustomFont()) { - // Custom fonts can be freed anytime so we must not hold them - m_fontList.append(pair<const FontData*, bool>(data, false)); - } - return data; - } - } - family = family->next(); - } - - if (m_fontList.size()) - return m_fontList[0].first; - - const FontData* result = new SimpleFontData(FontPlatformData(description, _font->wordSpacing(), _font->letterSpacing()), true); - m_fontList.append(pair<const FontData*, bool>(result, true)); - return result; -} - -const FontData* FontFallbackList::fontDataForCharacters(const WebCore::Font* font, const UChar*, int) const -{ - return primaryFontData(font); -} - -void FontFallbackList::setPlatformFont(const WebCore::FontPlatformData&) -{ - m_familyIndex = cAllFamiliesScanned; -} - -} diff --git a/WebCore/platform/graphics/qt/FontPlatformData.h b/WebCore/platform/graphics/qt/FontPlatformData.h index 92219fd..4a3f8bc 100644 --- a/WebCore/platform/graphics/qt/FontPlatformData.h +++ b/WebCore/platform/graphics/qt/FontPlatformData.h @@ -26,20 +26,62 @@ #include "FontDescription.h" #include <QFont> +#include <QHash> namespace WebCore { class String; +class FontPlatformDataPrivate { +public: + FontPlatformDataPrivate() + : refCount(1) + , size(font.pointSizeF()) + , bold(font.bold()) + , oblique(false) + {} + FontPlatformDataPrivate(const float size, const bool bold, const bool oblique) + : refCount(1) + , size(size) + , bold(bold) + , oblique(oblique) + {} + FontPlatformDataPrivate(const QFont& font) + : refCount(1) + , font(font) + , size(font.pointSizeF()) + , bold(font.bold()) + , oblique(false) + {} + unsigned refCount; + QFont font; + float size; + bool bold : 1; + bool oblique : 1; +}; + + -class FontPlatformData -{ +class FontPlatformData : public FastAllocBase { public: -#if ENABLE(SVG_FONTS) FontPlatformData(float size, bool bold, bool oblique); -#endif - FontPlatformData(); - FontPlatformData(const FontDescription&, int wordSpacing = 0, int letterSpacing = 0); - FontPlatformData(const QFont&, bool bold); + FontPlatformData(const FontPlatformData &); + FontPlatformData(const FontDescription&, const AtomicString& familyName, int wordSpacing = 0, int letterSpacing = 0); + FontPlatformData(const QFont& font) + : m_data(new FontPlatformDataPrivate(font)) + {} + FontPlatformData(WTF::HashTableDeletedValueType) + : m_data(reinterpret_cast<FontPlatformDataPrivate*>(-1)) + {} + + ~FontPlatformData(); + + FontPlatformData& operator=(const FontPlatformData&); + bool operator==(const FontPlatformData&) const; + + bool isHashTableDeletedValue() const + { + return m_data == reinterpret_cast<FontPlatformDataPrivate*>(-1); + } static inline QFont::Weight toQFontWeight(FontWeight fontWeight) { @@ -62,22 +104,62 @@ public: } } - QFont font() const { return m_font; } - float size() const { return m_size; } - QString family() const { return m_font.family(); } - bool bold() const { return m_bold; } - bool italic() const { return m_font.italic(); } - bool smallCaps() const { return m_font.capitalization() == QFont::SmallCaps; } - int pixelSize() const { return m_font.pixelSize(); } + QFont font() const + { + Q_ASSERT(m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)); + if (m_data) + return m_data->font; + return QFont(); + } + float size() const + { + Q_ASSERT(m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)); + if (m_data) + return m_data->size; + return 0.0f; + } + QString family() const + { + Q_ASSERT(m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)); + if (m_data) + return m_data->font.family(); + return QString(); + } + bool bold() const + { + Q_ASSERT(m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)); + if (m_data) + return m_data->bold; + return false; + } + bool italic() const + { + Q_ASSERT(m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)); + if (m_data) + return m_data->font.italic(); + return false; + } + bool smallCaps() const + { + Q_ASSERT(m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)); + if (m_data) + return m_data->font.capitalization() == QFont::SmallCaps; + return false; + } + int pixelSize() const + { + Q_ASSERT(m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)); + if (m_data) + return m_data->font.pixelSize(); + return 0; + } + unsigned hash() const; #ifndef NDEBUG String description() const; #endif - - float m_size; - bool m_bold; - bool m_oblique; - QFont m_font; +private: + FontPlatformDataPrivate* m_data; }; } // namespace WebCore diff --git a/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp b/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp index 7709be6..2cc2fc6 100644 --- a/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp +++ b/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp @@ -26,56 +26,104 @@ namespace WebCore { -FontPlatformData::FontPlatformData(const FontDescription& description, int wordSpacing, int letterSpacing) - : m_size(0.0f) - , m_bold(false) - , m_oblique(false) +static inline bool isEmtpyValue(const float size, const bool bold, const bool oblique) { - QString familyName; + // this is the empty value by definition of the trait FontDataCacheKeyTraits + return !bold && !oblique && size == 0.f; +} + +FontPlatformData::FontPlatformData(float size, bool bold, bool oblique) +{ + if (isEmtpyValue(size, bold, oblique)) + m_data = 0; + else + m_data = new FontPlatformDataPrivate(size, bold, oblique); +} + +FontPlatformData::FontPlatformData(const FontPlatformData &other) : m_data(other.m_data) +{ + if (m_data && m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)) + ++m_data->refCount; +} + +FontPlatformData::FontPlatformData(const FontDescription& description, const AtomicString& familyName, int wordSpacing, int letterSpacing) + : m_data(new FontPlatformDataPrivate()) +{ + QString familyNames(familyName); + if (!familyName.isEmpty()) + familyNames += QLatin1Char(','); + const FontFamily* family = &description.family(); while (family) { - familyName += family->family(); + familyNames += family->family(); family = family->next(); if (family) - familyName += QLatin1Char(','); + familyNames += QLatin1Char(','); } + QFont& font = m_data->font; + font.setFamily(familyName); + font.setPixelSize(qRound(description.computedSize())); + font.setItalic(description.italic()); + font.setWeight(toQFontWeight(description.weight())); + font.setWordSpacing(wordSpacing); + font.setLetterSpacing(QFont::AbsoluteSpacing, letterSpacing); + const bool smallCaps = description.smallCaps(); + font.setCapitalization(smallCaps ? QFont::SmallCaps : QFont::MixedCase); + + m_data->bold = font.bold(); + m_data->size = font.pointSizeF(); +} - m_font.setFamily(familyName); - m_font.setPixelSize(qRound(description.computedSize())); - m_font.setItalic(description.italic()); - - m_font.setWeight(toQFontWeight(description.weight())); - m_bold = m_font.bold(); - - bool smallCaps = description.smallCaps(); - m_font.setCapitalization(smallCaps ? QFont::SmallCaps : QFont::MixedCase); - m_font.setWordSpacing(wordSpacing); - m_font.setLetterSpacing(QFont::AbsoluteSpacing, letterSpacing); - m_size = m_font.pointSize(); +FontPlatformData::~FontPlatformData() +{ + if (!m_data || m_data == reinterpret_cast<FontPlatformDataPrivate*>(-1)) + return; + --m_data->refCount; + if (!m_data->refCount) + delete m_data; } -FontPlatformData::FontPlatformData(const QFont& font, bool bold) - : m_size(font.pointSize()) - , m_bold(bold) - , m_oblique(false) - , m_font(font) +FontPlatformData& FontPlatformData::operator=(const FontPlatformData& other) { + if (m_data == other.m_data) + return *this; + if (m_data && m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)) { + --m_data->refCount; + if (!m_data->refCount) + delete m_data; + } + m_data = other.m_data; + if (m_data && m_data != reinterpret_cast<FontPlatformDataPrivate*>(-1)) + ++m_data->refCount; + return *this; } -#if ENABLE(SVG_FONTS) -FontPlatformData::FontPlatformData(float size, bool bold, bool oblique) - : m_size(size) - , m_bold(bold) - , m_oblique(oblique) +bool FontPlatformData::operator==(const FontPlatformData& other) const { + if (m_data == other.m_data) + return true; + + if (!m_data || !other.m_data + || m_data == reinterpret_cast<FontPlatformDataPrivate*>(-1) || other.m_data == reinterpret_cast<FontPlatformDataPrivate*>(-1)) + return false; + + const bool equals = (m_data->size == other.m_data->size + && m_data->bold == other.m_data->bold + && m_data->oblique == other.m_data->oblique + && m_data->font == other.m_data->font); + return equals; } -#endif -FontPlatformData::FontPlatformData() - : m_size(0.0f) - , m_bold(false) - , m_oblique(false) +unsigned FontPlatformData::hash() const { + if (!m_data) + return 0; + if (m_data == reinterpret_cast<FontPlatformDataPrivate*>(-1)) + return 1; + return qHash(m_data->font.toString()) + ^ qHash(*reinterpret_cast<quint32*>(&m_data->size)) + ^ qHash(m_data->bold) + ^ qHash(m_data->oblique); } #ifndef NDEBUG diff --git a/WebCore/platform/graphics/qt/FontQt.cpp b/WebCore/platform/graphics/qt/FontQt.cpp index c5960ac..1e44626 100644 --- a/WebCore/platform/graphics/qt/FontQt.cpp +++ b/WebCore/platform/graphics/qt/FontQt.cpp @@ -42,7 +42,6 @@ #include <limits.h> -#if QT_VERSION >= 0x040400 namespace WebCore { static const QString qstring(const TextRun& run) @@ -229,5 +228,3 @@ QFont Font::font() const } -#endif - diff --git a/WebCore/platform/graphics/qt/FontQt43.cpp b/WebCore/platform/graphics/qt/FontQt43.cpp deleted file mode 100644 index 45bf05d..0000000 --- a/WebCore/platform/graphics/qt/FontQt43.cpp +++ /dev/null @@ -1,354 +0,0 @@ -/* - Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) - Copyright (C) 2008 Holger Hans Peter Freyther - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#include "config.h" -#include "Font.h" -#include "FontDescription.h" -#include "FontFallbackList.h" -#include "FontSelector.h" - -#include "GraphicsContext.h" -#include <QTextLayout> -#include <QPainter> -#include <QFontMetrics> -#include <QFontInfo> -#include <qalgorithms.h> -#include <qdebug.h> - -#include <limits.h> - -#if QT_VERSION < 0x040400 - -namespace WebCore { - -struct TextRunComponent { - TextRunComponent() : font(0) {} - TextRunComponent(const UChar *start, int length, bool rtl, const QFont *font, int offset, bool sc = false); - TextRunComponent(int spaces, bool rtl, const QFont *font, int offset); - - inline bool isSpace() const { return spaces != 0; } - - QString string; - const QFont *font; - int width; - int offset; - int spaces; -}; - -TextRunComponent::TextRunComponent(const UChar *start, int length, bool rtl, const QFont *f, int o, bool sc) - : string(reinterpret_cast<const QChar*>(start), length) - , font(f) - , offset(o) - , spaces(0) -{ - if (sc) - string = string.toUpper(); - string.prepend(rtl ? QChar(0x202e) : QChar(0x202d)); - width = QFontMetrics(*font).width(string); -} - -TextRunComponent::TextRunComponent(int s, bool rtl, const QFont *f, int o) - : string(s, QLatin1Char(' ')) - , font(f) - , offset(o) - , spaces(s) -{ - string.prepend(rtl ? QChar(0x202e) : QChar(0x202d)); - width = spaces * QFontMetrics(*font).width(QLatin1Char(' ')); -} - - -static int generateComponents(Vector<TextRunComponent, 1024>* components, const Font &font, const TextRun &run) -{ -// qDebug() << "generateComponents" << QString((const QChar *)run.characters(), run.length()); - int letterSpacing = font.letterSpacing(); - int wordSpacing = font.wordSpacing(); - bool smallCaps = font.fontDescription().smallCaps(); - int padding = run.padding(); - int numSpaces = 0; - if (padding) { - for (int i = 0; i < run.length(); i++) - if (Font::treatAsSpace(run[i])) - ++numSpaces; - } - - int offset = 0; - const QFont *f = &font.font(); - if (letterSpacing || smallCaps) { - // need to draw every letter on it's own - int start = 0; - if (Font::treatAsSpace(run[0])) { - int add = 0; - if (numSpaces) { - add = padding/numSpaces; - padding -= add; - --numSpaces; - } - components->append(TextRunComponent(1, run.rtl(), &font.font(), offset)); - offset += add + letterSpacing + components->last().width; - start = 1; -// qDebug() << "space at 0" << offset; - } else if (smallCaps) - f = (QChar::category(run[0]) == QChar::Letter_Lowercase ? &font.scFont() : &font.font()); - - for (int i = 1; i < run.length(); ++i) { - uint ch = run[i]; - if (QChar(ch).isHighSurrogate() && QChar(run[i-1]).isLowSurrogate()) - ch = QChar::surrogateToUcs4(ch, run[i-1]); - if (QChar(ch).isLowSurrogate() || QChar::category(ch) == QChar::Mark_NonSpacing) - continue; - if (Font::treatAsSpace(run[i])) { - int add = 0; -// qDebug() << " treatAsSpace:" << i << start; - if (i - start > 0) { - components->append(TextRunComponent(run.characters() + start, i - start, - run.rtl(), - f, offset, f == &font.scFont())); - offset += components->last().width + letterSpacing; -// qDebug() << " appending(1) " << components->last().string << components->last().width; - } - if (numSpaces) { - add = padding/numSpaces; - padding -= add; - --numSpaces; - } - components->append(TextRunComponent(1, run.rtl(), &font.font(), offset)); - offset += wordSpacing + add + components->last().width + letterSpacing; - start = i + 1; - continue; - } else if (!letterSpacing) { -// qDebug() << i << char(run[i]) << (QChar::category(ch) == QChar::Letter_Lowercase) << -// QFontInfo(*f).pointSizeF(); - if (QChar::category(ch) == QChar::Letter_Lowercase) { - if (f == &font.scFont()) - continue; - } else { - if (f == &font.font()) - continue; - } - } - if (i - start > 0) { - components->append(TextRunComponent(run.characters() + start, i - start, - run.rtl(), - f, offset, f == &font.scFont())); - offset += components->last().width + letterSpacing; -// qDebug() << " appending(2) " << components->last().string << components->last().width; - } - if (smallCaps) - f = (QChar::category(ch) == QChar::Letter_Lowercase ? &font.scFont() : &font.font()); - start = i; - } - if (run.length() - start > 0) { - components->append(TextRunComponent(run.characters() + start, run.length() - start, - run.rtl(), - f, offset, f == &font.scFont())); - offset += components->last().width; -// qDebug() << " appending(3) " << components->last().string << components->last().width; - } - offset += letterSpacing; - } else { - int start = 0; - for (int i = 0; i < run.length(); ++i) { - if (Font::treatAsSpace(run[i])) { - if (i - start > 0) { - components->append(TextRunComponent(run.characters() + start, i - start, - run.rtl(), - f, offset)); - offset += components->last().width; - } - int add = 0; - if (numSpaces) { - add = padding/numSpaces; - padding -= add; - --numSpaces; - } - components->append(TextRunComponent(1, run.rtl(), &font.font(), offset)); - offset += add + components->last().width; - if (i) - offset += wordSpacing; - start = i + 1; - } - } - if (run.length() - start > 0) { - components->append(TextRunComponent(run.characters() + start, run.length() - start, - run.rtl(), - f, offset)); - offset += components->last().width; - } - } - return offset; -} - -void Font::drawComplexText(GraphicsContext* ctx, const TextRun& run, const FloatPoint& point, int from, int to) const -{ - if (to < 0) - to = run.length(); - - QPainter *p = ctx->platformContext(); - Color color = ctx->fillColor(); - p->setPen(QColor(color)); - - Vector<TextRunComponent, 1024> components; - int w = generateComponents(&components, *this, run); - - if (from > 0 || to < run.length()) { - FloatRect clip = selectionRectForComplexText(run, - IntPoint(qRound(point.x()), qRound(point.y())), - QFontMetrics(font()).height(), from, to); - QRectF rect(clip.x(), clip.y() - ascent(), clip.width(), clip.height()); - p->save(); - p->setClipRect(rect.toRect()); - } - - if (run.rtl()) { - for (int i = 0; i < components.size(); ++i) { - if (!components.at(i).isSpace()) { - p->setFont(*components.at(i).font); - QPointF pt(point.x() + w - components.at(i).offset - components.at(i).width, point.y()); - p->drawText(pt, components.at(i).string); - } - } - } else { - for (int i = 0; i < components.size(); ++i) { - if (!components.at(i).isSpace()) { - p->setFont(*components.at(i).font); - QPointF pt(point.x() + components.at(i).offset, point.y()); - p->drawText(pt, components.at(i).string); - } - } - } - if (from > 0 || to < run.length()) - p->restore(); -} - -float Font::floatWidthForComplexText(const TextRun& run) const -{ - Vector<TextRunComponent, 1024> components; - int w = generateComponents(&components, *this, run); - - return w; -} - -int Font::offsetForPositionForComplexText(const TextRun& run, int position, bool includePartialGlyphs) const -{ - Vector<TextRunComponent, 1024> components; - int w = generateComponents(&components, *this, run); - - int offset = 0; - if (run.rtl()) { - for (int i = 0; i < components.size(); ++i) { - int xe = w - components.at(i).offset; - int xs = xe - components.at(i).width; - if (position >= xs) { - QTextLayout layout(components.at(i).string, *components.at(i).font); - layout.beginLayout(); - QTextLine l = layout.createLine(); - if (!l.isValid()) - return offset; - - l.setLineWidth(INT_MAX / 256); - layout.endLayout(); - - if (position - xs >= l.width()) - return offset; - int cursor = l.xToCursor(position - xs); - if (cursor > 1) - --cursor; - return offset + cursor; - } else - offset += components.at(i).string.length() - 1; - } - } else { - for (int i = 0; i < components.size(); ++i) { - int xs = components.at(i).offset; - int xe = xs + components.at(i).width; - if (position <= xe) { - QTextLayout layout(components.at(i).string, *components.at(i).font); - layout.beginLayout(); - QTextLine l = layout.createLine(); - if (!l.isValid()) - return offset; - - l.setLineWidth(INT_MAX / 256); - layout.endLayout(); - - if (position - xs >= l.width()) - return offset + components.at(i).string.length() - 1; - int cursor = l.xToCursor(position - xs); - if (cursor > 1) - --cursor; - return offset + cursor; - } else - offset += components.at(i).string.length() - 1; - } - } - return run.length(); -} - -static float cursorToX(const Vector<TextRunComponent, 1024>& components, int width, bool rtl, int cursor) -{ - int start = 0; - for (int i = 0; i < components.size(); ++i) { - if (start + components.at(i).string.length() - 1 < cursor) { - start += components.at(i).string.length() - 1; - continue; - } - int xs = components.at(i).offset; - if (rtl) - xs = width - xs - components.at(i).width; - QTextLayout layout(components.at(i).string, *components.at(i).font); - layout.beginLayout(); - QTextLine l = layout.createLine(); - if (!l.isValid()) - return 0; - - l.setLineWidth(INT_MAX / 256); - layout.endLayout(); - - return xs + l.cursorToX(cursor - start + 1); - } - return width; -} - -FloatRect Font::selectionRectForComplexText(const TextRun& run, const IntPoint& pt, - int h, int from, int to) const -{ - Vector<TextRunComponent, 1024> components; - int w = generateComponents(&components, *this, run); - - if (from == 0 && to == run.length()) - return FloatRect(pt.x(), pt.y(), w, h); - - float x1 = cursorToX(components, w, run.rtl(), from); - float x2 = cursorToX(components, w, run.rtl(), to); - if (x2 < x1) - qSwap(x1, x2); - - return FloatRect(pt.x() + x1, pt.y(), x2 - x1, h); -} - -int Font::lineGap() const -{ - return QFontMetrics(m_font).leading(); -} - -} - -#endif diff --git a/WebCore/platform/graphics/qt/GraphicsContextQt.cpp b/WebCore/platform/graphics/qt/GraphicsContextQt.cpp index 57a481a..a095476 100644 --- a/WebCore/platform/graphics/qt/GraphicsContextQt.cpp +++ b/WebCore/platform/graphics/qt/GraphicsContextQt.cpp @@ -256,8 +256,8 @@ GraphicsContext::GraphicsContext(PlatformGraphicsContext* context) setPaintingDisabled(!context); if (context) { // Make sure the context starts in sync with our state. - setPlatformFillColor(fillColor()); - setPlatformStrokeColor(strokeColor()); + setPlatformFillColor(fillColor(), DeviceColorSpace); + setPlatformStrokeColor(strokeColor(), DeviceColorSpace); } } @@ -639,24 +639,18 @@ void GraphicsContext::fillPath() QPainterPath path = m_data->currentPath; path.setFillRule(toQtFillRule(fillRule())); - if ((m_common->state.fillColorSpace != SolidColorSpace) - || (fillColor().alpha())) { + if (m_common->state.fillPattern || m_common->state.fillGradient || fillColor().alpha()) { drawFilledShadowPath(this, p, &path); - switch (m_common->state.fillColorSpace) { - case SolidColorSpace: - if (fillColor().alpha()) - p->fillPath(path, p->brush()); - break; - case PatternColorSpace: { + if (m_common->state.fillPattern) { TransformationMatrix affine; p->fillPath(path, QBrush(m_common->state.fillPattern->createPlatformPattern(affine))); - break; - } - case GradientColorSpace: + } else if (m_common->state.fillGradient) { QBrush brush(*m_common->state.fillGradient->platformGradient()); brush.setTransform(m_common->state.fillGradient->gradientSpaceTransform()); p->fillPath(path, brush); - break; + } else { + if (fillColor().alpha()) + p->fillPath(path, p->brush()); } } m_data->currentPath = QPainterPath(); @@ -672,8 +666,7 @@ void GraphicsContext::strokePath() QPainterPath path = m_data->currentPath; path.setFillRule(toQtFillRule(fillRule())); - if ((m_common->state.strokeColorSpace != SolidColorSpace) - || (strokeColor().alpha())) { + if (m_common->state.strokePattern || m_common->state.strokeGradient || strokeColor().alpha()) { IntSize shadowSize; int shadowBlur; Color shadowColor; @@ -685,26 +678,20 @@ void GraphicsContext::strokePath() p->strokePath(path, shadowPen); p->setWorldTransform(t); } - switch (m_common->state.strokeColorSpace) { - case SolidColorSpace: - if (strokeColor().alpha()) - p->strokePath(path, pen); - break; - case PatternColorSpace: { + if (m_common->state.strokePattern) { TransformationMatrix affine; pen.setBrush(QBrush(m_common->state.strokePattern->createPlatformPattern(affine))); p->setPen(pen); p->strokePath(path, pen); - break; - } - case GradientColorSpace: { + } else if (m_common->state.strokeGradient) { QBrush brush(*m_common->state.strokeGradient->platformGradient()); brush.setTransform(m_common->state.strokeGradient->gradientSpaceTransform()); pen.setBrush(brush); p->setPen(pen); p->strokePath(path, pen); - break; - } + } else { + if (strokeColor().alpha()) + p->strokePath(path, pen); } } m_data->currentPath = QPainterPath(); @@ -729,29 +716,23 @@ void GraphicsContext::fillRect(const FloatRect& rect) QPainter* p = m_data->p(); - if ((m_common->state.fillColorSpace != SolidColorSpace) - || (fillColor().alpha())) { + if (m_common->state.fillPattern || m_common->state.fillGradient || fillColor().alpha()) { drawBorderlessRectShadow(this, p, rect); - switch (m_common->state.fillColorSpace) { - case SolidColorSpace: - if (fillColor().alpha()) - p->fillRect(rect, p->brush()); - break; - case PatternColorSpace: { + if (m_common->state.fillPattern) { TransformationMatrix affine; p->fillRect(rect, QBrush(m_common->state.fillPattern->createPlatformPattern(affine))); - break; - } - case GradientColorSpace: + } else if (m_common->state.fillGradient) { QBrush brush(*m_common->state.fillGradient->platformGradient()); brush.setTransform(m_common->state.fillGradient->gradientSpaceTransform()); p->fillRect(rect, brush); - break; + } else { + if (fillColor().alpha()) + p->fillRect(rect, p->brush()); } } } -void GraphicsContext::fillRect(const FloatRect& rect, const Color& c) +void GraphicsContext::fillRect(const FloatRect& rect, const Color& c, ColorSpace colorSpace) { if (paintingDisabled()) return; @@ -762,7 +743,7 @@ void GraphicsContext::fillRect(const FloatRect& rect, const Color& c) p->fillRect(rect, m_data->solidColor); } -void GraphicsContext::fillRoundedRect(const IntRect& rect, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight, const Color& color) +void GraphicsContext::fillRoundedRect(const IntRect& rect, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight, const Color& color, ColorSpace colorSpace) { if (paintingDisabled() || !color.alpha()) return; @@ -886,7 +867,7 @@ FloatRect GraphicsContext::roundToDevicePixels(const FloatRect& frect) return FloatRect(QRectF(result)); } -void GraphicsContext::setPlatformShadow(const IntSize& size, int, const Color&) +void GraphicsContext::setPlatformShadow(const IntSize& size, int, const Color&, ColorSpace) { // Qt doesn't support shadows natively, they are drawn manually in the draw* // functions @@ -1225,7 +1206,7 @@ void GraphicsContext::setURLForRect(const KURL&, const IntRect&) notImplemented(); } -void GraphicsContext::setPlatformStrokeColor(const Color& color) +void GraphicsContext::setPlatformStrokeColor(const Color& color, ColorSpace colorSpace) { if (paintingDisabled()) return; @@ -1255,7 +1236,7 @@ void GraphicsContext::setPlatformStrokeThickness(float thickness) p->setPen(newPen); } -void GraphicsContext::setPlatformFillColor(const Color& color) +void GraphicsContext::setPlatformFillColor(const Color& color, ColorSpace colorSpace) { if (paintingDisabled()) return; diff --git a/WebCore/platform/graphics/qt/IconQt.cpp b/WebCore/platform/graphics/qt/IconQt.cpp index 98f4606..a9870fc 100644 --- a/WebCore/platform/graphics/qt/IconQt.cpp +++ b/WebCore/platform/graphics/qt/IconQt.cpp @@ -40,15 +40,17 @@ Icon::~Icon() { } -PassRefPtr<Icon> Icon::createIconForFile(const String& filename) +PassRefPtr<Icon> Icon::createIconForFiles(const Vector<String>& filenames) { - RefPtr<Icon> i = adoptRef(new Icon); - i->m_icon = QIcon(filename); - return i.release(); -} + if (filenames.isEmpty()) + return 0; + + if (filenames.size() == 1) { + RefPtr<Icon> i = adoptRef(new Icon); + i->m_icon = QIcon(filenames[0]); + return i.release(); + } -PassRefPtr<Icon> Icon::createIconForFiles(const Vector<String>&) -{ //FIXME: Implement this return 0; } diff --git a/WebCore/platform/graphics/qt/ImageDecoderQt.cpp b/WebCore/platform/graphics/qt/ImageDecoderQt.cpp index f8403b7..b6823dd 100644 --- a/WebCore/platform/graphics/qt/ImageDecoderQt.cpp +++ b/WebCore/platform/graphics/qt/ImageDecoderQt.cpp @@ -145,16 +145,8 @@ RGBA32Buffer* ImageDecoderQt::frameBufferAtIndex(size_t index) return &frame; } -void ImageDecoderQt::clearFrameBufferCache(size_t index) +void ImageDecoderQt::clearFrameBufferCache(size_t /*index*/) { - // Currently QImageReader will be asked to read everything. This - // might change when we read gif images on demand. For now we - // can have a rather simple implementation. - if (index > m_frameBufferCache.size()) - return; - - for (size_t i = 0; i < index; ++index) - m_frameBufferCache[index].clear(); } void ImageDecoderQt::internalDecodeSize() diff --git a/WebCore/platform/graphics/qt/ImageQt.cpp b/WebCore/platform/graphics/qt/ImageQt.cpp index da6ddac..9a82911 100644 --- a/WebCore/platform/graphics/qt/ImageQt.cpp +++ b/WebCore/platform/graphics/qt/ImageQt.cpp @@ -44,9 +44,7 @@ #include <QPainter> #include <QImage> #include <QImageReader> -#if QT_VERSION >= 0x040300 #include <QTransform> -#endif #include <QDebug> @@ -64,6 +62,8 @@ static QPixmap loadResourcePixmap(const char *name) pixmap = QWebSettings::webGraphic(QWebSettings::DefaultFrameIconGraphic); else if (qstrcmp(name, "textAreaResizeCorner") == 0) pixmap = QWebSettings::webGraphic(QWebSettings::TextAreaSizeGripCornerGraphic); + else if (qstrcmp(name, "deleteButton") == 0) + pixmap = QWebSettings::webGraphic(QWebSettings::DeleteButtonGraphic); return pixmap; } @@ -94,7 +94,7 @@ PassRefPtr<Image> Image::loadPlatformResource(const char* name) } void Image::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRect, const TransformationMatrix& patternTransform, - const FloatPoint& phase, CompositeOperator op, const FloatRect& destRect) + const FloatPoint& phase, ColorSpace, CompositeOperator op, const FloatRect& destRect) { QPixmap* framePixmap = nativeImageForCurrentFrame(); if (!framePixmap) // If it's too early we won't have an image yet. @@ -120,6 +120,38 @@ void Image::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRect, const imageObserver()->didDraw(this); } +BitmapImage::BitmapImage(QPixmap* pixmap, ImageObserver* observer) + : Image(observer) + , m_currentFrame(0) + , m_frames(0) + , m_frameTimer(0) + , m_repetitionCount(cAnimationNone) + , m_repetitionCountStatus(Unknown) + , m_repetitionsComplete(0) + , m_isSolidColor(false) + , m_checkedForSolidColor(false) + , m_animationFinished(true) + , m_allDataReceived(true) + , m_haveSize(true) + , m_sizeAvailable(true) + , m_decodedSize(0) + , m_haveFrameCount(true) + , m_frameCount(1) +{ + initPlatformData(); + + int width = pixmap->width(); + int height = pixmap->height(); + m_decodedSize = width * height * 4; + m_size = IntSize(width, height); + + m_frames.grow(1); + m_frames[0].m_frame = pixmap; + m_frames[0].m_hasAlpha = pixmap->hasAlpha(); + m_frames[0].m_haveMetadata = true; + checkForSolidColor(); +} + void BitmapImage::initPlatformData() { } @@ -130,7 +162,7 @@ void BitmapImage::invalidatePlatformData() // Drawing Routines void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& dst, - const FloatRect& src, CompositeOperator op) + const FloatRect& src, ColorSpace styleColorSpace, CompositeOperator op) { startAnimation(); @@ -139,7 +171,7 @@ void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& dst, return; if (mayFillWithSolidColor()) { - fillWithSolidColor(ctxt, dst, solidColor(), op); + fillWithSolidColor(ctxt, dst, solidColor(), styleColorSpace, op); return; } @@ -181,6 +213,13 @@ void BitmapImage::checkForSolidColor() m_solidColor = QColor::fromRgba(framePixmap->toImage().pixel(0, 0)); } +#if PLATFORM(WIN_OS) +PassRefPtr<BitmapImage> BitmapImage::create(HBITMAP hBitmap) +{ + return BitmapImage::create(new QPixmap(QPixmap::fromWinHBITMAP(hBitmap))); +} +#endif + } diff --git a/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp b/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp index 7078d16..f446755 100644 --- a/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp +++ b/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp @@ -101,15 +101,15 @@ MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player) foreach (QWidget* widget, qFindChildren<QWidget*>(m_videoWidget)) widget->installEventFilter(this); - connect(m_mediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)), - this, SLOT(stateChanged(Phonon::State, Phonon::State))); + connect(m_mediaObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)), + this, SLOT(stateChanged(Phonon::State,Phonon::State))); connect(m_mediaObject, SIGNAL(metaDataChanged()), this, SLOT(metaDataChanged())); connect(m_mediaObject, SIGNAL(seekableChanged(bool)), this, SLOT(seekableChanged(bool))); connect(m_mediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasVideoChanged(bool))); connect(m_mediaObject, SIGNAL(bufferStatus(int)), this, SLOT(bufferStatus(int))); connect(m_mediaObject, SIGNAL(finished()), this, SLOT(finished())); - connect(m_mediaObject, SIGNAL(currentSourceChanged(const Phonon::MediaSource&)), - this, SLOT(currentSourceChanged(const Phonon::MediaSource&))); + connect(m_mediaObject, SIGNAL(currentSourceChanged(Phonon::MediaSource)), + this, SLOT(currentSourceChanged(Phonon::MediaSource))); connect(m_mediaObject, SIGNAL(aboutToFinish()), this, SLOT(aboutToFinish())); connect(m_mediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(totalTimeChanged(qint64))); } diff --git a/WebCore/platform/graphics/qt/StillImageQt.cpp b/WebCore/platform/graphics/qt/StillImageQt.cpp index 95b3bc8..1db04a7 100644 --- a/WebCore/platform/graphics/qt/StillImageQt.cpp +++ b/WebCore/platform/graphics/qt/StillImageQt.cpp @@ -50,7 +50,7 @@ NativeImagePtr StillImage::nativeImageForCurrentFrame() } void StillImage::draw(GraphicsContext* ctxt, const FloatRect& dst, - const FloatRect& src, CompositeOperator op) + const FloatRect& src, ColorSpace, CompositeOperator op) { if (m_pixmap.isNull()) return; diff --git a/WebCore/platform/graphics/qt/StillImageQt.h b/WebCore/platform/graphics/qt/StillImageQt.h index 6c417b1..7be9136 100644 --- a/WebCore/platform/graphics/qt/StillImageQt.h +++ b/WebCore/platform/graphics/qt/StillImageQt.h @@ -46,7 +46,7 @@ namespace WebCore { virtual IntSize size() const; virtual NativeImagePtr nativeImageForCurrentFrame(); - virtual void draw(GraphicsContext*, const FloatRect& dstRect, const FloatRect& srcRect, CompositeOperator); + virtual void draw(GraphicsContext*, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator); private: StillImage(const QPixmap& pixmap); |