/* libs/graphics/animator/SkBoundable.cpp ** ** Copyright 2006, 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 "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); }