| |
| /* |
| * Copyright 2006 The Android Open Source Project |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| |
| #include "SkBoundable.h" |
| #include "SkAnimateMaker.h" |
| #include "SkCanvas.h" |
| |
| SkBoundable::SkBoundable() { |
| clearBounds(); |
| fBounds.fTop = 0; |
| fBounds.fRight = 0; |
| fBounds.fBottom = 0; |
| } |
| |
| void SkBoundable::clearBounder() { |
| fBounds.fLeft = 0x7fff; |
| } |
| |
| void SkBoundable::getBounds(SkRect* rect) { |
| SkASSERT(rect); |
| if (fBounds.fLeft == (int16_t)0x8000U) { |
| INHERITED::getBounds(rect); |
| return; |
| } |
| rect->fLeft = SkIntToScalar(fBounds.fLeft); |
| rect->fTop = SkIntToScalar(fBounds.fTop); |
| rect->fRight = SkIntToScalar(fBounds.fRight); |
| rect->fBottom = SkIntToScalar(fBounds.fBottom); |
| } |
| |
| void SkBoundable::enableBounder() { |
| fBounds.fLeft = 0; |
| } |
| |
| |
| SkBoundableAuto::SkBoundableAuto(SkBoundable* boundable, |
| SkAnimateMaker& maker) : fBoundable(boundable), fMaker(maker) { |
| if (fBoundable->hasBounds()) { |
| fMaker.fCanvas->setBounder(&maker.fDisplayList); |
| fMaker.fDisplayList.fBounds.setEmpty(); |
| } |
| } |
| |
| SkBoundableAuto::~SkBoundableAuto() { |
| if (fBoundable->hasBounds() == false) |
| return; |
| fMaker.fCanvas->setBounder(NULL); |
| fBoundable->setBounds(fMaker.fDisplayList.fBounds); |
| } |