2008-04-21 Holger Hans Peter Freyther <holger.freyther@trolltech.com>
authorhausmann@webkit.org <hausmann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 21 Apr 2008 10:46:47 +0000 (10:46 +0000)
committerhausmann@webkit.org <hausmann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 21 Apr 2008 10:46:47 +0000 (10:46 +0000)
        Reviewed by Simon.

        * Remove the special Qt ctor of BitmapImage as it did not work. The Bitmap returned
        0 as width and after intialising drawing would fail. BitmapImage relies on a proper
        ImageSource.
        * Instead of adding more special cases to BitmapImage create a new class called StillImage
        which is getting one QPixmap and is implementing Image::draw and Image::size. This is
        working well for the images created using Image::loadPlatformResource.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@32302 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/platform/graphics/BitmapImage.h
WebCore/platform/graphics/qt/ImageQt.cpp

index 9e1ce75..a3f33d5 100644 (file)
@@ -2,6 +2,26 @@
 
         Reviewed by Simon.
 
+        * Remove the special Qt ctor of BitmapImage as it did not work. The Bitmap returned
+        0 as width and after intialising drawing would fail. BitmapImage relies on a proper
+        ImageSource.
+        * Instead of adding more special cases to BitmapImage create a new class called StillImage
+        which is getting one QPixmap and is implementing Image::draw and Image::size. This is
+        working well for the images created using Image::loadPlatformResource.
+
+        * platform/graphics/BitmapImage.h:
+        * platform/graphics/qt/ImageQt.cpp:
+        (WebCore::BitmapImage::initPlatformData):
+        (WebCore::BitmapImage::getPixmap):
+        (WebCore::StillImage::StillImage):
+        (WebCore::StillImage::size):
+        (WebCore::StillImage::getPixmap):
+        (WebCore::StillImage::draw):
+
+2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
+
+        Reviewed by Simon.
+
         * Package the Resources into a qrc
 
         * Resources/WebKitResources.qrc: Added.
index bb10ef3..bfa5230 100644 (file)
@@ -91,9 +91,7 @@ class BitmapImage : public Image {
     friend class GeneratedImage;
     friend class GraphicsContext;
 public:
-#if PLATFORM(QT)
-    BitmapImage(const QPixmap &pixmap, ImageObserver* = 0);
-#elif PLATFORM(CG)
+#if PLATFORM(CG)
     BitmapImage(CGImageRef, ImageObserver* = 0);
 #elif PLATFORM(CAIRO)
     BitmapImage(cairo_surface_t*, ImageObserver* = 0);
@@ -203,11 +201,6 @@ protected:
 
     mutable bool m_haveFrameCount;
     size_t m_frameCount;
-
-#if PLATFORM(QT)
-    QPixmap *m_pixmap;
-#endif
-
 };
 
 }
index 91090eb..2bad1c2 100644 (file)
 
 #include <math.h>
 
+namespace WebCore {
+class StillImage : public Image {
+public:
+    StillImage(const QPixmap& pixmap);
+
+    virtual IntSize size() const;
+    virtual QPixmap* getPixmap() const;
+    virtual void draw(GraphicsContext*, const FloatRect& dstRect, const FloatRect& srcRect, CompositeOperator);
+
+private:
+    QPixmap m_pixmap;
+};
+}
+
 // This function loads resources into WebKit
 static QPixmap loadResourcePixmap(const char *name)
 {
@@ -87,8 +101,7 @@ void FrameData::clear()
 
 Image* Image::loadPlatformResource(const char* name)
 {
-    BitmapImage* img = new BitmapImage(loadResourcePixmap(name));
-    return img;
+    return new StillImage(loadResourcePixmap(name));
 }
 
     
@@ -98,35 +111,12 @@ void Image::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRect, const
     notImplemented();
 }
 
-BitmapImage::BitmapImage(const QPixmap &pixmap, ImageObserver *observer)
-    : Image(observer)
-    , m_currentFrame(0)
-    , m_frames(0)
-    , m_frameTimer(0)
-    , m_repetitionCount(0)
-    , m_repetitionsComplete(0)
-    , m_isSolidColor(false)
-    , m_animatingImageType(true)
-    , m_animationFinished(false)
-    , m_allDataReceived(false)
-    , m_haveSize(false)
-    , m_sizeAvailable(false)
-    , m_decodedSize(0)
-    , m_haveFrameCount(false)
-    , m_frameCount(0)
-{
-    m_pixmap = new QPixmap(pixmap);
-}
-
 void BitmapImage::initPlatformData()
 {
-    m_pixmap = 0;
 }
 
 void BitmapImage::invalidatePlatformData()
 {
-    delete m_pixmap;
-    m_pixmap = 0;
 }
     
 // Drawing Routines
@@ -200,10 +190,34 @@ void BitmapImage::checkForSolidColor()
 
 QPixmap* BitmapImage::getPixmap() const
 {
-    if (!m_pixmap)
-      return const_cast<BitmapImage*>(this)->frameAtIndex(0);
-    else
-      return m_pixmap;
+    return const_cast<BitmapImage*>(this)->frameAtIndex(0);
+}
+
+StillImage::StillImage(const QPixmap& pixmap)
+    : m_pixmap(pixmap)
+{}
+
+IntSize StillImage::size() const
+{
+    return IntSize(m_pixmap.width(), m_pixmap.height());
+}
+
+QPixmap* StillImage::getPixmap() const
+{
+    return const_cast<QPixmap*>(&m_pixmap);
+}
+
+void StillImage::draw(GraphicsContext* ctxt, const FloatRect& dst,
+                      const FloatRect& src, CompositeOperator op)
+{
+    if (m_pixmap.isNull())
+        return;
+
+    ctxt->save();
+    ctxt->setCompositeOperation(op);
+    QPainter* painter(ctxt->platformContext());
+    painter->drawPixmap(dst, m_pixmap, src);
+    ctxt->restore();
 }
 
 }