Fixed <rdar://problem/3704339> Context2D forces integer positions in drawImage
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Aug 2004 22:26:32 +0000 (22:26 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 16 Aug 2004 22:26:32 +0000 (22:26 +0000)
Use floats instead of ints to draw images.

        Reviewed by Ken.

        * khtml/ecma/kjs_html.cpp:
        (KJS::Context2DFunction::tryCall):
        * kwq/KWQPainter.h:
        * kwq/KWQPainter.mm:
        (QPainter::drawPixmap):
        (QPainter::drawFloatPixmap):

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/ecma/kjs_html.cpp
WebCore/kwq/KWQPainter.h
WebCore/kwq/KWQPainter.mm

index a7ee455b546e1239c5b8b672fba0abcc65affdaf..11b9a202b8ad1743d8428740ea9e85717266e28e 100644 (file)
@@ -1,3 +1,18 @@
+2004-08-16  Richard Williamson   <rjw@apple.com>
+
+       Fixed <rdar://problem/3704339> Context2D forces integer positions in drawImage
+
+       Use floats instead of ints to draw images.
+
+        Reviewed by Ken.
+
+        * khtml/ecma/kjs_html.cpp:
+        (KJS::Context2DFunction::tryCall):
+        * kwq/KWQPainter.h:
+        * kwq/KWQPainter.mm:
+        (QPainter::drawPixmap):
+        (QPainter::drawFloatPixmap):
+
 2004-08-13  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Darin.
index 3ae15dd17d738fa1870a9aad307927f3041d8566..e6498728aca41249d4f008b6896b94dcfb7f7bfe 100644 (file)
@@ -3890,16 +3890,16 @@ Value KJS::Context2DFunction::tryCall(ExecState *exec, Object &thisObj, const Li
                 return err;
             }
             Image *i = static_cast<Image*>(o);
-            int x = args[1].toInt32(exec);
-            int y = args[2].toInt32(exec);
-            int w = args[3].toInt32(exec);
-            int h = args[4].toInt32(exec);
+            float x = args[1].toNumber(exec);
+            float y = args[2].toNumber(exec);
+            float w = args[3].toNumber(exec);
+            float h = args[4].toNumber(exec);
             QString compositeOperator = args[5].toString(exec).qstring().lower();
             khtml::CachedImage *ci = i->image();
             if (ci) {
                 QPixmap pixmap = ci->pixmap();
                 QPainter p;
-                p.drawPixmap (x, y, pixmap, 0, 0, w, h, QPainter::compositeOperatorFromString(compositeOperator), drawingContext);
+                p.drawFloatPixmap (x, y, w, h, pixmap, 0.f, 0.f, w, h, QPainter::compositeOperatorFromString(compositeOperator), drawingContext);
                 
                 if (contextObject->_needsFlushRasterCache)
                     pixmap.flushRasterCache();
@@ -3921,21 +3921,21 @@ Value KJS::Context2DFunction::tryCall(ExecState *exec, Object &thisObj, const Li
                 return err;
             }
             Image *i = static_cast<Image*>(o);
-            int sx = args[1].toInt32(exec);
-            int sy = args[2].toInt32(exec);
-            int sw = args[3].toInt32(exec);
-            int sh = args[4].toInt32(exec);
-            int dx = args[5].toInt32(exec);
-            int dy = args[6].toInt32(exec);
-            int dw = args[7].toInt32(exec);
-            int dh = args[8].toInt32(exec);
+            float sx = args[1].toNumber(exec);
+            float sy = args[2].toNumber(exec);
+            float sw = args[3].toNumber(exec);
+            float sh = args[4].toNumber(exec);
+            float dx = args[5].toNumber(exec);
+            float dy = args[6].toNumber(exec);
+            float dw = args[7].toNumber(exec);
+            float dh = args[8].toNumber(exec);
             QString compositeOperator = args[9].toString(exec).qstring().lower();
             khtml::CachedImage *ci = i->image();
             if (ci) {
                 QPixmap pixmap = ci->pixmap();
                 QPainter p;
 
-                p.drawPixmap (dx, dy, dw, dh, pixmap, sx, sy, sw, sh, QPainter::compositeOperatorFromString(compositeOperator), drawingContext);
+                p.drawFloatPixmap (dx, dy, dw, dh, pixmap, sx, sy, sw, sh, QPainter::compositeOperatorFromString(compositeOperator), drawingContext);
                 
                 if (contextObject->_needsFlushRasterCache)
                     pixmap.flushRasterCache();
index b542f0e6de6b7b0b3abd28a5dd821e9bdc8aa641..74d67fcf34359fa58df6488be41aeea01c093c39 100644 (file)
@@ -91,6 +91,8 @@ public:
                            int sx=0, int sy=0, int sw=-1, int sh=-1, int compositeOperator=-1, CGContextRef context=0);
     void drawPixmap( int x, int y, int w, int h, const QPixmap &,
                            int sx=0, int sy=0, int sw=-1, int sh=-1, int compositeOperator=-1, CGContextRef context=0);
+    void drawFloatPixmap( float x, float y, float w, float h, const QPixmap &,
+                           float sx=0, float sy=0, float sw=-1, float sh=-1, int compositeOperator=-1, CGContextRef context=0);
     void drawTiledPixmap(int, int, int, int, const QPixmap &, int sx=0, int sy=0, CGContextRef context=0);
 
     void addClip(const QRect &);
index 113df223fb24856c5a61e015c70d98838b815044..18a0b1b54276a997b2a6503b26624c1aab1522ed 100644 (file)
@@ -541,6 +541,12 @@ void QPainter::drawPixmap( int x, int y, const QPixmap &pixmap,
 
 void QPainter::drawPixmap( int x, int y, int w, int h, const QPixmap &pixmap,
                            int sx, int sy, int sw, int sh, int compositeOperator, CGContextRef context)
+{
+    drawFloatPixmap ((float)x, (float)y, (float)w, (float)h, pixmap, (float)sx, (float)sy, (float)sw, (float)sh, compositeOperator, context);
+}
+
+void QPainter::drawFloatPixmap( float x, float y, float w, float h, const QPixmap &pixmap,
+                           float sx, float sy, float sw, float sh, int compositeOperator, CGContextRef context)
 {
     if (data->state.paintingDisabled)
         return;