diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:30:35 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:30:35 -0800 |
commit | 0910916c0f7b951ee55c4b7c6358295b9bca0565 (patch) | |
tree | 059e9645510636ae148ba4594b3d6009918655e2 /src/images/SkPageFlipper.cpp | |
parent | 6eb364108744656fcd23a96a478aa772cd4e85bc (diff) | |
download | external_skia-0910916c0f7b951ee55c4b7c6358295b9bca0565.zip external_skia-0910916c0f7b951ee55c4b7c6358295b9bca0565.tar.gz external_skia-0910916c0f7b951ee55c4b7c6358295b9bca0565.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'src/images/SkPageFlipper.cpp')
-rw-r--r-- | src/images/SkPageFlipper.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/images/SkPageFlipper.cpp b/src/images/SkPageFlipper.cpp new file mode 100644 index 0000000..526ba09 --- /dev/null +++ b/src/images/SkPageFlipper.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "SkPageFlipper.h" + +SkPageFlipper::SkPageFlipper() { + fWidth = 0; + fHeight = 0; + fDirty0 = &fDirty0Storage; + fDirty1 = &fDirty1Storage; + + fDirty0->setEmpty(); + fDirty1->setEmpty(); +} + +SkPageFlipper::SkPageFlipper(int width, int height) { + fWidth = width; + fHeight = height; + fDirty0 = &fDirty0Storage; + fDirty1 = &fDirty1Storage; + + fDirty0->setRect(0, 0, width, height); + fDirty1->setEmpty(); +} + +void SkPageFlipper::resize(int width, int height) { + fWidth = width; + fHeight = height; + + // this is the opposite of the constructors + fDirty1->setRect(0, 0, width, height); + fDirty0->setEmpty(); +} + +void SkPageFlipper::inval() { + fDirty1->setRect(0, 0, fWidth, fHeight); +} + +void SkPageFlipper::inval(const SkIRect& rect) { + SkIRect r; + r.set(0, 0, fWidth, fHeight); + if (r.intersect(rect)) { + fDirty1->op(r, SkRegion::kUnion_Op); + } +} + +void SkPageFlipper::inval(const SkRegion& rgn) { + SkRegion r; + r.setRect(0, 0, fWidth, fHeight); + if (r.op(rgn, SkRegion::kIntersect_Op)) { + fDirty1->op(r, SkRegion::kUnion_Op); + } +} + +void SkPageFlipper::inval(const SkRect& rect, bool antialias) { + SkIRect r; + rect.round(&r); + if (antialias) { + r.inset(-1, -1); + } + this->inval(r); +} + +const SkRegion& SkPageFlipper::update(SkRegion* copyBits) { + // Copy over anything new from page0 that isn't dirty in page1 + copyBits->op(*fDirty0, *fDirty1, SkRegion::kDifference_Op); + SkTSwap<SkRegion*>(fDirty0, fDirty1); + fDirty1->setEmpty(); + return *fDirty0; +} + + |