180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkBoundable.h"
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkAnimateMaker.h"
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkCanvas.h"
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkBoundable::SkBoundable() {
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    clearBounds();
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fBounds.fTop = 0;
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fBounds.fRight = 0;
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fBounds.fBottom = 0;
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkBoundable::clearBounder() {
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fBounds.fLeft = 0x7fff;
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkBoundable::getBounds(SkRect* rect) {
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkASSERT(rect);
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (fBounds.fLeft == (int16_t)0x8000U) {
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        INHERITED::getBounds(rect);
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return;
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    rect->fLeft = SkIntToScalar(fBounds.fLeft);
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    rect->fTop = SkIntToScalar(fBounds.fTop);
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    rect->fRight = SkIntToScalar(fBounds.fRight);
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    rect->fBottom = SkIntToScalar(fBounds.fBottom);
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkBoundable::enableBounder() {
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fBounds.fLeft = 0;
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkBoundableAuto::SkBoundableAuto(SkBoundable* boundable,
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkAnimateMaker& maker) : fBoundable(boundable), fMaker(maker) {
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (fBoundable->hasBounds()) {
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fMaker.fCanvas->setBounder(&maker.fDisplayList);
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fMaker.fDisplayList.fBounds.setEmpty();
4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkBoundableAuto::~SkBoundableAuto() {
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (fBoundable->hasBounds() == false)
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return;
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fMaker.fCanvas->setBounder(NULL);
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fBoundable->setBounds(fMaker.fDisplayList.fBounds);
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
56