*/
uint32_t getGenerationID() const;
-#ifdef SK_BUILD_FOR_ANDROID
+#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
static const int kPathRefGenIDBitCnt = 30; // leave room for the fill type (skbug.com/1762)
- const SkPath* getSourcePath() const;
- void setSourcePath(const SkPath* path);
#else
static const int kPathRefGenIDBitCnt = 32;
#endif
mutable uint8_t fConvexity;
mutable uint8_t fDirection;
mutable SkBool8 fIsVolatile;
-#ifdef SK_BUILD_FOR_ANDROID
- const SkPath* fSourcePath;
-#endif
/** Resets all fields other than fPathRef to their initial 'empty' values.
* Assumes the caller has already emptied fPathRef.
#define INITIAL_LASTMOVETOINDEX_VALUE ~0
SkPath::SkPath()
- : fPathRef(SkPathRef::CreateEmpty())
-#ifdef SK_BUILD_FOR_ANDROID
- , fSourcePath(NULL)
-#endif
-{
+ : fPathRef(SkPathRef::CreateEmpty()) {
this->resetFields();
fIsVolatile = false;
}
SkPath::SkPath(const SkPath& that)
: fPathRef(SkRef(that.fPathRef.get())) {
this->copyFields(that);
-#ifdef SK_BUILD_FOR_ANDROID
- fSourcePath = that.fSourcePath;
-#endif
SkDEBUGCODE(that.validate();)
}
if (this != &that) {
fPathRef.reset(SkRef(that.fPathRef.get()));
this->copyFields(that);
-#ifdef SK_BUILD_FOR_ANDROID
- fSourcePath = that.fSourcePath;
-#endif
}
SkDEBUGCODE(this->validate();)
return *this;
SkTSwap<uint8_t>(fConvexity, that.fConvexity);
SkTSwap<uint8_t>(fDirection, that.fDirection);
SkTSwap<SkBool8>(fIsVolatile, that.fIsVolatile);
-#ifdef SK_BUILD_FOR_ANDROID
- SkTSwap<const SkPath*>(fSourcePath, that.fSourcePath);
-#endif
}
}
uint32_t SkPath::getGenerationID() const {
uint32_t genID = fPathRef->genID();
-#ifdef SK_BUILD_FOR_ANDROID
+#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
SkASSERT((unsigned)fFillType < (1 << (32 - kPathRefGenIDBitCnt)));
genID |= static_cast<uint32_t>(fFillType) << kPathRefGenIDBitCnt;
#endif
return genID;
}
-#ifdef SK_BUILD_FOR_ANDROID
-const SkPath* SkPath::getSourcePath() const {
- return fSourcePath;
-}
-
-void SkPath::setSourcePath(const SkPath* path) {
- fSourcePath = path;
-}
-#endif
-
void SkPath::reset() {
SkDEBUGCODE(this->validate();)
REPORTER_ASSERT(reporter, 95 == last.fY);
}
-static void test_android_specific_behavior(skiatest::Reporter* reporter) {
-#ifdef SK_BUILD_FOR_ANDROID
- // Make sure we treat fGenerationID and fSourcePath correctly for each of
- // copy, assign, rewind, reset, and swap.
- SkPath original, source, anotherSource;
- original.setSourcePath(&source);
- original.moveTo(0, 0);
- original.lineTo(1, 1);
- REPORTER_ASSERT(reporter, original.getSourcePath() == &source);
-
- uint32_t copyID, assignID;
-
- // Test copy constructor. Copy generation ID, copy source path.
- SkPath copy(original);
- REPORTER_ASSERT(reporter, copy.getGenerationID() == original.getGenerationID());
- REPORTER_ASSERT(reporter, copy.getSourcePath() == original.getSourcePath());
-
- // Test assigment operator. Change generation ID, copy source path.
- SkPath assign;
- assignID = assign.getGenerationID();
- assign = original;
- REPORTER_ASSERT(reporter, assign.getGenerationID() != assignID);
- REPORTER_ASSERT(reporter, assign.getSourcePath() == original.getSourcePath());
-
- // Test rewind. Change generation ID, don't touch source path.
- copyID = copy.getGenerationID();
- copy.rewind();
- REPORTER_ASSERT(reporter, copy.getGenerationID() != copyID);
- REPORTER_ASSERT(reporter, copy.getSourcePath() == original.getSourcePath());
-
- // Test reset. Change generation ID, don't touch source path.
- assignID = assign.getGenerationID();
- assign.reset();
- REPORTER_ASSERT(reporter, assign.getGenerationID() != assignID);
- REPORTER_ASSERT(reporter, assign.getSourcePath() == original.getSourcePath());
-
- // Test swap. Swap the generation IDs, swap source paths.
- copy.reset();
- copy.moveTo(2, 2);
- copy.setSourcePath(&anotherSource);
- copyID = copy.getGenerationID();
- assign.moveTo(3, 3);
- assignID = assign.getGenerationID();
- copy.swap(assign);
- REPORTER_ASSERT(reporter, copy.getGenerationID() != copyID);
- REPORTER_ASSERT(reporter, assign.getGenerationID() != assignID);
- REPORTER_ASSERT(reporter, copy.getSourcePath() == original.getSourcePath());
- REPORTER_ASSERT(reporter, assign.getSourcePath() == &anotherSource);
-#endif
-}
-
static void test_gen_id(skiatest::Reporter* reporter) {
SkPath a, b;
REPORTER_ASSERT(reporter, a.getGenerationID() == b.getGenerationID());
test_crbug_170666();
test_bad_cubic_crbug229478();
test_bad_cubic_crbug234190();
- test_android_specific_behavior(reporter);
test_gen_id(reporter);
test_path_close_issue1474(reporter);
test_path_to_region(reporter);