private:
SkTypeface* fTypeface;
+ SkScalar fTextSize;
+ SkScalar fTextScaleX;
+ SkScalar fTextSkewX;
+
SkPathEffect* fPathEffect;
SkShader* fShader;
SkXfermode* fXfermode;
SkImageFilter* fImageFilter;
SkAnnotation* fAnnotation;
- SkScalar fTextSize;
- SkScalar fTextScaleX;
- SkScalar fTextSkewX;
SkColor fColor;
SkScalar fWidth;
SkScalar fMiterLimit;
+
union {
struct {
// all of these bitfields should add up to 32
};
uint32_t fBitfields;
};
- uint32_t fDirtyBits;
-
uint32_t getBitfields() const { return fBitfields; }
void setBitfields(uint32_t bitfields);
+ uint32_t fDirtyBits;
+
SkDrawCacheProc getDrawCacheProc() const;
SkMeasureCacheProc getMeasureCacheProc(TextBufferDirection dir,
bool needFullMetrics) const;
}
SkPaint::SkPaint(const SkPaint& src) {
-#define COPY(field) field = src.field
-#define REF_COPY(field) field = SkSafeRef(src.field)
- REF_COPY(fTypeface);
- REF_COPY(fPathEffect);
- REF_COPY(fShader);
- REF_COPY(fXfermode);
- REF_COPY(fMaskFilter);
- REF_COPY(fColorFilter);
- REF_COPY(fRasterizer);
- REF_COPY(fLooper);
- REF_COPY(fImageFilter);
- REF_COPY(fAnnotation);
-
- COPY(fTextSize);
- COPY(fTextScaleX);
- COPY(fTextSkewX);
- COPY(fColor);
- COPY(fWidth);
- COPY(fMiterLimit);
- COPY(fBitfields);
- COPY(fDirtyBits);
-#undef COPY
-#undef REF_COPY
+ memcpy(this, &src, sizeof(src));
+
+ SkSafeRef(fTypeface);
+ SkSafeRef(fPathEffect);
+ SkSafeRef(fShader);
+ SkSafeRef(fXfermode);
+ SkSafeRef(fMaskFilter);
+ SkSafeRef(fColorFilter);
+ SkSafeRef(fRasterizer);
+ SkSafeRef(fLooper);
+ SkSafeRef(fImageFilter);
+ SkSafeRef(fAnnotation);
#ifdef SK_BUILD_FOR_ANDROID
new (&fPaintOptionsAndroid) SkPaintOptionsAndroid(src.fPaintOptionsAndroid);
return count;
}
-DEF_TEST(Paint_cmap, reporter) {
- // need to implement charsToGlyphs on other backends (e.g. linux, win)
- // before we can run this tests everywhere
- return;
-
+static void test_cmap(skiatest::Reporter* reporter) {
static const int NGLYPHS = 64;
SkUnichar src[NGLYPHS];
}
// temparary api for bicubic, just be sure we can set/clear it
-DEF_TEST(Paint_filterlevel, reporter) {
+static void test_filterlevel(skiatest::Reporter* reporter) {
SkPaint p0, p1;
REPORTER_ASSERT(reporter,
}
}
-DEF_TEST(Paint_copy, reporter) {
+static void test_copy(skiatest::Reporter* reporter) {
SkPaint paint;
// set a few member variables
paint.setStyle(SkPaint::kStrokeAndFill_Style);
// found and fixed for webkit: mishandling when we hit recursion limit on
// mostly degenerate cubic flatness test
-DEF_TEST(Paint_regression_cubic, reporter) {
+static void regression_cubic(skiatest::Reporter* reporter) {
SkPath path, stroke;
SkPaint paint;
}
// found and fixed for android: not initializing rect for string's of length 0
-DEF_TEST(Paint_regression_measureText, reporter) {
+static void regression_measureText(skiatest::Reporter* reporter) {
SkPaint paint;
paint.setTextSize(12.0f);
REPORTER_ASSERT(reporter, r.isEmpty());
}
+DEF_TEST(Paint, reporter) {
+ // TODO add general paint tests
+ test_copy(reporter);
+
+ // regression tests
+ regression_cubic(reporter);
+ regression_measureText(reporter);
+
+ test_filterlevel(reporter);
+
+ // need to implement charsToGlyphs on other backends (e.g. linux, win)
+ // before we can run this tests everywhere
+ if (false) {
+ test_cmap(reporter);
+ }
+}
+
#define ASSERT(expr) REPORTER_ASSERT(r, expr)
DEF_TEST(Paint_FlatteningTraits, r) {