/* 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);
}