1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright 2006 The Android Open Source Project
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkBoundable.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkAnimateMaker.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SkCanvas.h"
13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SkBoundable::SkBoundable() {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    clearBounds();
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fBounds.fTop = 0;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fBounds.fRight = 0;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fBounds.fBottom = 0;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SkBoundable::clearBounder() {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fBounds.fLeft = 0x7fff;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SkBoundable::getBounds(SkRect* rect) {
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    SkASSERT(rect);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (fBounds.fLeft == (int16_t)0x8000U) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        INHERITED::getBounds(rect);
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        return;
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rect->fLeft = SkIntToScalar(fBounds.fLeft);
328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    rect->fTop = SkIntToScalar(fBounds.fTop);
338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    rect->fRight = SkIntToScalar(fBounds.fRight);
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    rect->fBottom = SkIntToScalar(fBounds.fBottom);
358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void SkBoundable::enableBounder() {
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    fBounds.fLeft = 0;
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)SkBoundableAuto::SkBoundableAuto(SkBoundable* boundable,
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        SkAnimateMaker& maker) : fBoundable(boundable), fMaker(maker) {
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    if (fBoundable->hasBounds()) {
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//        fMaker.fCanvas->setBounder(&maker.fDisplayList);
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        fMaker.fDisplayList.fBounds.setEmpty();
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    }
488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)SkBoundableAuto::~SkBoundableAuto() {
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    if (fBoundable->hasBounds() == false)
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        return;
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//    fMaker.fCanvas->setBounder(NULL);
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    fBoundable->setBounds(fMaker.fDisplayList.fBounds);
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)