Fixed Windows compiler complaints

http://codereview.appspot.com/6392044



git-svn-id: http://skia.googlecode.com/svn/trunk@4511 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/core/SkData.h b/include/core/SkData.h
index 61b52c5..301a4d8 100644
--- a/include/core/SkData.h
+++ b/include/core/SkData.h
@@ -108,7 +108,14 @@
     size_t      fSize;
 
     SkData(const void* ptr, size_t size, ReleaseProc, void* context);
-    ~SkData();
+    virtual ~SkData();
+
+    // This is here because SkAutoTUnref creates an internal helper class
+    // that derives from SkData (i.e., BlockRef) to prevent refs\unrefs.
+    // This helper class generates a compiler warning on Windows since the 
+    // SkData's destructor is private. This friending gives the helper class
+    // access to the destructor.
+    friend class SkAutoTUnref<SkData>::BlockRef<SkData>; 
 
     typedef SkRefCnt INHERITED;
 };
@@ -119,39 +126,25 @@
  */
 class SkAutoDataUnref : SkNoncopyable {
 public:
-    SkAutoDataUnref(SkData* data) : fRef(data) {
-        if (data) {
-            fData = data->data();
-            fSize = data->size();
-        } else {
-            fData = NULL;
-            fSize = 0;
-        }
-    }
+    SkAutoDataUnref(SkData* data) : fRef(data) {}
     ~SkAutoDataUnref() {
         SkSafeUnref(fRef);
     }
 
-    const void* data() const { return fData; }
-    const uint8_t* bytes() const {
-        return reinterpret_cast<const uint8_t*> (fData);
-    }
-    size_t size() const { return fSize; }
     SkData* get() const { return fRef; }
 
     void release() {
         if (fRef) {
             fRef->unref();
             fRef = NULL;
-            fData = NULL;
-            fSize = 0;
         }
     }
 
+    SkData *operator->() const { return fRef; }
+    operator SkData*() { return fRef; }
+
 private:
     SkData*     fRef;
-    const void* fData;
-    size_t      fSize;
 };
 
 #endif
diff --git a/include/gpu/GrScalar.h b/include/gpu/GrScalar.h
index 4ffc4ca..5d2f13b 100644
--- a/include/gpu/GrScalar.h
+++ b/include/gpu/GrScalar.h
@@ -36,7 +36,7 @@
 #define GrScalarMul(a,b)    SkScalarMul(a,b)
 #define GrScalarDiv(a,b)    SkScalarDiv(a, b)
 #define GrScalarToFloat(a)  SkScalarToFloat(a)
-#define GrFloatToScalar(a)  SkScalarToFloat(a)
+#define GrFloatToScalar(a)  SkFloatToScalar(a)
 #define GrIntToScalar(a)    SkIntToScalar(a)
 #define GrScalarAbs(a)      SkScalarAbs(a)
 #define GrScalarIsInt(a)    SkScalarIsInt(a)
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index e026df9..c5a9ca1 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -1312,7 +1312,7 @@
             fPicture->unref();
 
             SkAutoDataUnref data(ostream.copyToData());
-            SkMemoryStream istream(data.data(), data.size());
+            SkMemoryStream istream(data->data(), data->size());
             SkPicture pict(&istream);
             orig->drawPicture(pict);
         } else {
diff --git a/src/animator/SkScriptTokenizer.cpp b/src/animator/SkScriptTokenizer.cpp
index 54aa2bf..1be7427 100644
--- a/src/animator/SkScriptTokenizer.cpp
+++ b/src/animator/SkScriptTokenizer.cpp
@@ -750,7 +750,7 @@
         decompile(data.bytes(), data.size());
 #endif
         SkScriptRuntime runtime(fCallBackArray);
-        runtime.executeTokens((unsigned char*) data.bytes());
+        runtime.executeTokens((unsigned char*) data->bytes());
         SkScriptValue2 value1;
         runtime.getResult(&value1.fOperand);
         value1.fType = fReturnType;
@@ -1158,7 +1158,7 @@
         decompile(data.bytes(), data.size());
 #endif
         SkScriptRuntime runtime(fCallBackArray);
-        runtime.executeTokens((unsigned char*)data.bytes());
+        runtime.executeTokens((unsigned char*)data->bytes());
         runtime.getResult(&value1.fOperand);
         if (attributes->fResultIsBoolean == kResultIsBoolean)
             value1.fType = SkOperand2::kS32;
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index c2a308e..60095ab 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -540,7 +540,7 @@
 }
 
 bool GrDrawTarget::StageUsesTexCoords(GrVertexLayout layout, int stage) {
-    return layout & gStageTexCoordMasks[stage];
+    return SkToBool(layout & gStageTexCoordMasks[stage]);
 }
 
 bool GrDrawTarget::reserveVertexAndIndexSpace(GrVertexLayout vertexLayout,
diff --git a/src/gpu/GrPathUtils.cpp b/src/gpu/GrPathUtils.cpp
index aa18792..4e487fd 100644
--- a/src/gpu/GrPathUtils.cpp
+++ b/src/gpu/GrPathUtils.cpp
@@ -199,12 +199,16 @@
     //                           [0  0   1]
     //                           [1  1   1]
     // We invert the control pt matrix and post concat to both sides to get M.
-    UVpts.setAll(0,   0.5f,  1.f,
-                 0,   0,     1.f,
-                 1.f, 1.f,   1.f);
+    UVpts.setAll(0,   GR_ScalarHalf,  GR_Scalar1,
+                 0,               0,  GR_Scalar1,
+                 SkScalarToPersp(GR_Scalar1), 
+                 SkScalarToPersp(GR_Scalar1), 
+                 SkScalarToPersp(GR_Scalar1));
     m.setAll(qPts[0].fX, qPts[1].fX, qPts[2].fX,
              qPts[0].fY, qPts[1].fY, qPts[2].fY,
-             1.f,        1.f,        1.f);
+             SkScalarToPersp(GR_Scalar1), 
+             SkScalarToPersp(GR_Scalar1), 
+             SkScalarToPersp(GR_Scalar1));
     if (!m.invert(&m)) {
         // The quad is degenerate. Hopefully this is rare. Find the pts that are
         // farthest apart to compute a line (unless it is really a pt).
@@ -247,7 +251,7 @@
         m.postConcat(UVpts);
 
         // The matrix should not have perspective.
-        static const GrScalar gTOL = 1.f / 100.f;
+        static const GrScalar gTOL = GrFloatToScalar(1.f / 100.f);
         GrAssert(GrScalarAbs(m.get(SkMatrix::kMPersp0)) < gTOL);
         GrAssert(GrScalarAbs(m.get(SkMatrix::kMPersp1)) < gTOL);
 
diff --git a/src/gpu/gl/GrGpuGL_program.cpp b/src/gpu/gl/GrGpuGL_program.cpp
index d506c6c..736be93 100644
--- a/src/gpu/gl/GrGpuGL_program.cpp
+++ b/src/gpu/gl/GrGpuGL_program.cpp
@@ -119,7 +119,7 @@
             // and perform a y-flip.
             GrMatrix m;
             m.setScale(GrIntToScalar(2) / rt->width(), GrIntToScalar(-2) / rt->height());
-            m.postTranslate(-1.f , 1.f);
+            m.postTranslate(-GR_Scalar1, GR_Scalar1);
             m.preConcat(vm);
 
             // GL wants a column-major 4x4.
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 68c210d..d05b640 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -1119,7 +1119,7 @@
         gsState.updateDrawingState(entry->fState);
 
         SkAutoDataUnref copy(entry->fContent.copyToData());
-        data->write(copy.data(), copy.size());
+        data->write(copy->data(), copy->size());
         entry = entry->fNext.get();
     }
     gsState.drainStack();
diff --git a/src/pdf/SkPDFImage.cpp b/src/pdf/SkPDFImage.cpp
index 72379b1..429667a 100644
--- a/src/pdf/SkPDFImage.cpp
+++ b/src/pdf/SkPDFImage.cpp
@@ -338,10 +338,10 @@
         SkRefPtr<SkPDFInt> zeroVal = new SkPDFInt(0);
         zeroVal->unref();  // SkRefPtr and new both took a reference.
         SkRefPtr<SkPDFScalar> scale5Val =
-                new SkPDFScalar(8.2258f);  // 255/2^5-1
+                new SkPDFScalar(SkFloatToScalar(8.2258f));  // 255/2^5-1
         scale5Val->unref();  // SkRefPtr and new both took a reference.
         SkRefPtr<SkPDFScalar> scale6Val =
-                new SkPDFScalar(4.0476f);  // 255/2^6-1
+                new SkPDFScalar(SkFloatToScalar(4.0476f));  // 255/2^6-1
         scale6Val->unref();  // SkRefPtr and new both took a reference.
         SkRefPtr<SkPDFArray> decodeValue = new SkPDFArray();
         decodeValue->unref();  // SkRefPtr and new both took a reference.
diff --git a/src/pipe/SkGPipeWrite.cpp b/src/pipe/SkGPipeWrite.cpp
index e257144..e546b5c 100644
--- a/src/pipe/SkGPipeWrite.cpp
+++ b/src/pipe/SkGPipeWrite.cpp
@@ -51,7 +51,7 @@
     if (writer) {
         writer->write32(size);
         SkAutoDataUnref data(stream.copyToData());
-        writer->writePad(data.data(), size);
+        writer->writePad(data->data(), size);
     }
     return 4 + SkAlign4(size);
 }
diff --git a/src/views/SkTouchGesture.cpp b/src/views/SkTouchGesture.cpp
index 31adc74..1828f03 100644
--- a/src/views/SkTouchGesture.cpp
+++ b/src/views/SkTouchGesture.cpp
@@ -14,9 +14,9 @@
 
 #define DISCRETIZE_TRANSLATE_TO_AVOID_FLICKER   true
 
-static const float MAX_FLING_SPEED = 1500;
+static const SkScalar MAX_FLING_SPEED = SkIntToScalar(1500);
 
-static float pin_max_fling(float speed) {
+static SkScalar pin_max_fling(SkScalar speed) {
     if (speed > MAX_FLING_SPEED) {
         speed = MAX_FLING_SPEED;
     }
@@ -50,7 +50,7 @@
 
 void SkFlingState::reset(float sx, float sy) {
     fActive = true;
-    fDirection.set(sx, sy);
+    fDirection.set(SkFloatToScalar(sx), SkFloatToScalar(sy));
     fSpeed0 = SkPoint::Normalize(&fDirection);
     fSpeed0 = pin_max_fling(fSpeed0);
     fTime0 = getseconds();
@@ -82,7 +82,7 @@
         tx = (float)sk_float_round2int(tx);
         ty = (float)sk_float_round2int(ty);
     }
-    matrix->setTranslate(tx, ty);
+    matrix->setTranslate(SkFloatToScalar(tx), SkFloatToScalar(ty));
 //    printf("---- evaluate (%g %g)\n", tx, ty);
 
     return true;
@@ -181,8 +181,8 @@
     return -1;
 }
 
-static float center(float pos0, float pos1) {
-    return (pos0 + pos1) * 0.5f;
+static SkScalar center(float pos0, float pos1) {
+    return SkFloatToScalar((pos0 + pos1) * 0.5f);
 }
 
 static const float MAX_ZOOM_SCALE = 4;
@@ -190,7 +190,7 @@
 
 float SkTouchGesture::limitTotalZoom(float scale) const {
     // this query works 'cause we know that we're square-scale w/ no skew/rotation
-    const float curr = fGlobalM[0];
+    const float curr = SkScalarToFloat(fGlobalM[0]);
     
     if (scale > 1 && curr * scale > MAX_ZOOM_SCALE) {
         scale = MAX_ZOOM_SCALE / curr;
diff --git a/tests/FlateTest.cpp b/tests/FlateTest.cpp
index 8697df9..446e412 100644
--- a/tests/FlateTest.cpp
+++ b/tests/FlateTest.cpp
@@ -72,14 +72,16 @@
     inputSize = testStream->getLength();
     if (inputSize == 0)
         inputSize = testStream->read(NULL, SkZeroSizeMemStream::kGetSizeKey);
-    REPORTER_ASSERT(reporter, data1.size() == inputSize);
+    REPORTER_ASSERT(reporter, data1->size() == inputSize);
     REPORTER_ASSERT(reporter, memcmp(testStream->getMemoryBase(),
-                                     data1.data(), data1.size()) == 0);
+                                     data1->data(), 
+                                     data1->size()) == 0);
 
     // Check that the uncompressed data matches the source data.
     SkAutoDataUnref data2(uncompressed.copyToData());
     REPORTER_ASSERT(reporter, testData.getLength() == uncompressed.getOffset());
-    REPORTER_ASSERT(reporter, memcmp(testData.getMemoryBase(), data2.data(),
+    REPORTER_ASSERT(reporter, memcmp(testData.getMemoryBase(), 
+                                     data2->data(),
                                      testData.getLength()) == 0);
 }
 
diff --git a/tests/PDFPrimitivesTest.cpp b/tests/PDFPrimitivesTest.cpp
index 2423d56..ea3093f 100644
--- a/tests/PDFPrimitivesTest.cpp
+++ b/tests/PDFPrimitivesTest.cpp
@@ -38,10 +38,10 @@
 static bool stream_equals(const SkDynamicMemoryWStream& stream, size_t offset,
                           const void* buffer, size_t len) {
     SkAutoDataUnref data(stream.copyToData());
-    if (offset + len > data.size()) {
+    if (offset + len > data->size()) {
         return false;
     }
-    return memcmp(data.bytes() + offset, buffer, len) == 0;
+    return memcmp(data->bytes() + offset, buffer, len) == 0;
 }
 
 static void CheckObjectOutput(skiatest::Reporter* reporter, SkPDFObject* obj,
@@ -128,19 +128,19 @@
         expectedResult1.writeText("\nendstream");
         SkAutoDataUnref expectedResultData1(expectedResult1.copyToData());
         CheckObjectOutput(reporter, stream.get(),
-                          (const char*) expectedResultData1.data(),
-                          expectedResultData1.size(), true, false);
+                          (const char*) expectedResultData1->data(),
+                          expectedResultData1->size(), true, false);
 
         // Then again with compression.
         SkDynamicMemoryWStream expectedResult2;
         expectedResult2.writeText("<</Filter /FlateDecode\n/Length 116\n"
                                  ">> stream\n");
-        expectedResult2.write(compressedData.data(), compressedData.size());
+        expectedResult2.write(compressedData->data(), compressedData->size());
         expectedResult2.writeText("\nendstream");
         SkAutoDataUnref expectedResultData2(expectedResult2.copyToData());
         CheckObjectOutput(reporter, stream.get(),
-                          (const char*) expectedResultData2.data(),
-                          expectedResultData2.size(), true, true);
+                          (const char*) expectedResultData2->data(),
+                          expectedResultData2->size(), true, true);
     }
 }
 
diff --git a/tests/PathMeasureTest.cpp b/tests/PathMeasureTest.cpp
index ee78c6b..9d153c2 100644
--- a/tests/PathMeasureTest.cpp
+++ b/tests/PathMeasureTest.cpp
@@ -152,14 +152,14 @@
     REPORTER_ASSERT(reporter, position.fY == 0);
     REPORTER_ASSERT(reporter, tangent.fX == SK_Scalar1);
     REPORTER_ASSERT(reporter, tangent.fY == 0);
-    REPORTER_ASSERT(reporter, meas.getPosTan(SK_Scalar1 * 2.5f, &position, &tangent));
+    REPORTER_ASSERT(reporter, meas.getPosTan(SkFloatToScalar(2.5f), &position, &tangent));
     REPORTER_ASSERT(reporter,
         SkScalarNearlyEqual(position.fX, SK_Scalar1, SkFloatToScalar(0.0001f)));
     REPORTER_ASSERT(reporter,
-        SkScalarNearlyEqual(position.fY, SK_Scalar1 * 1.5f));
+        SkScalarNearlyEqual(position.fY, SkFloatToScalar(1.5f)));
     REPORTER_ASSERT(reporter, tangent.fX == 0);
     REPORTER_ASSERT(reporter, tangent.fY == SK_Scalar1);
-    REPORTER_ASSERT(reporter, meas.getPosTan(SK_Scalar1 * 4.5f, &position, &tangent));
+    REPORTER_ASSERT(reporter, meas.getPosTan(SkFloatToScalar(4.5f), &position, &tangent));
     REPORTER_ASSERT(reporter,
         SkScalarNearlyEqual(position.fX, 
                             SkFloatToScalar(2.5f), 
diff --git a/tests/ToUnicode.cpp b/tests/ToUnicode.cpp
index 99e9ef6..ea9e258 100644
--- a/tests/ToUnicode.cpp
+++ b/tests/ToUnicode.cpp
@@ -16,13 +16,13 @@
 static bool stream_equals(const SkDynamicMemoryWStream& stream, size_t offset,
                           const char* buffer, size_t len) {
     SkAutoDataUnref data(stream.copyToData());
-    if (offset + len > data.size()) {
+    if (offset + len > data->size()) {
         return false;
     }
     if (len != strlen(buffer)) {
         return false;
     }
-    return memcmp(data.bytes() + offset, buffer, len) == 0;
+    return memcmp(data->bytes() + offset, buffer, len) == 0;
 }
 
 void append_cmap_sections(const SkTDArray<SkUnichar>& glyphToUnicode,
diff --git a/tools/bench_pictures_main.cpp b/tools/bench_pictures_main.cpp
index b2a7b7d..1c3dd4a 100644
--- a/tools/bench_pictures_main.cpp
+++ b/tools/bench_pictures_main.cpp
@@ -85,7 +85,8 @@
 };
 
 static void clip_tile(SkPicture* picture, const TileInfo& tile) {
-    SkRect clip = SkRect::MakeWH(picture->width(), picture->height());
+    SkRect clip = SkRect::MakeWH(SkIntToScalar(picture->width()), 
+                                 SkIntToScalar(picture->height()));
     tile.fCanvas->clipRect(clip);
 }
 
@@ -98,7 +99,8 @@
                                      options.fTileWidth, options.fTileHeight);
     bitmap.extractSubset(tile.fBitmap, rect);
     tile.fCanvas = new SkCanvas(*(tile.fBitmap));
-    tile.fCanvas->translate(-tile_x_start, -tile_y_start);
+    tile.fCanvas->translate(SkIntToScalar(-tile_x_start), 
+                            SkIntToScalar(-tile_y_start));
 
     clip_tile(picture, tile);
 }