| Index: src/core/SkMatrixClipStateMgr.cpp
|
| ===================================================================
|
| --- src/core/SkMatrixClipStateMgr.cpp (revision 13422)
|
| +++ src/core/SkMatrixClipStateMgr.cpp (working copy)
|
| @@ -15,28 +15,28 @@
|
| int matrixID) {
|
| int pathID = picRecord->addPathToHeap(path);
|
|
|
| - ClipOp& newClip = fClips.push_back();
|
| - newClip.fClipType = kPath_ClipType;
|
| - newClip.fGeom.fPathID = pathID;
|
| - newClip.fOp = op;
|
| - newClip.fDoAA = doAA;
|
| - newClip.fMatrixID = matrixID;
|
| - newClip.fOffset = kInvalidJumpOffset;
|
| + ClipOp* newClip = fClips.append();
|
| + newClip->fClipType = kPath_ClipType;
|
| + newClip->fGeom.fPathID = pathID;
|
| + newClip->fOp = op;
|
| + newClip->fDoAA = doAA;
|
| + newClip->fMatrixID = matrixID;
|
| + newClip->fOffset = kInvalidJumpOffset;
|
| return false;
|
| }
|
|
|
| bool SkMatrixClipStateMgr::MatrixClipState::ClipInfo::clipRegion(SkPictureRecord* picRecord,
|
| - const SkRegion& region,
|
| + int regionID,
|
| SkRegion::Op op,
|
| int matrixID) {
|
| // TODO: add a region dictionary so we don't have to copy the region in here
|
| - ClipOp& newClip = fClips.push_back();
|
| - newClip.fClipType = kRegion_ClipType;
|
| - newClip.fGeom.fRegion = SkNEW(SkRegion(region));
|
| - newClip.fOp = op;
|
| - newClip.fDoAA = true; // not necessary but sanity preserving
|
| - newClip.fMatrixID = matrixID;
|
| - newClip.fOffset = kInvalidJumpOffset;
|
| + ClipOp* newClip = fClips.append();
|
| + newClip->fClipType = kRegion_ClipType;
|
| + newClip->fGeom.fRegionID = regionID;
|
| + newClip->fOp = op;
|
| + newClip->fDoAA = true; // not necessary but sanity preserving
|
| + newClip->fMatrixID = matrixID;
|
| + newClip->fOffset = kInvalidJumpOffset;
|
| return false;
|
| }
|
|
|
| @@ -92,9 +92,11 @@
|
| curClip.fOffset = mgr->getPicRecord()->recordClipPath(curClip.fGeom.fPathID, op,
|
| curClip.fDoAA);
|
| break;
|
| - case kRegion_ClipType:
|
| - curClip.fOffset = mgr->getPicRecord()->recordClipRegion(*curClip.fGeom.fRegion, op);
|
| + case kRegion_ClipType: {
|
| + const SkRegion* region = mgr->lookupRegion(curClip.fGeom.fRegionID);
|
| + curClip.fOffset = mgr->getPicRecord()->recordClipRegion(*region, op);
|
| break;
|
| + }
|
| default:
|
| SkASSERT(0);
|
| }
|
| @@ -131,7 +133,13 @@
|
| new (fCurMCState) MatrixClipState(NULL, 0); // balanced in restore()
|
| }
|
|
|
| +SkMatrixClipStateMgr::~SkMatrixClipStateMgr() {
|
| + for (int i = 0; i < fRegionDict.count(); ++i) {
|
| + SkDELETE(fRegionDict[i]);
|
| + }
|
| +}
|
|
|
| +
|
| int SkMatrixClipStateMgr::save(SkCanvas::SaveFlags flags) {
|
| SkDEBUGCODE(this->validate();)
|
|
|
| @@ -268,6 +276,12 @@
|
| }
|
| #endif
|
|
|
| +int SkMatrixClipStateMgr::addRegionToDict(const SkRegion& region) {
|
| + int index = fRegionDict.count();
|
| + *fRegionDict.append() = SkNEW(SkRegion(region));
|
| + return index;
|
| +}
|
| +
|
| int SkMatrixClipStateMgr::addMatToDict(const SkMatrix& mat) {
|
| if (mat.isIdentity()) {
|
| return kIdentityMatID;
|
|
|