1685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com
2685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com/*
3685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Copyright 2006 The Android Open Source Project
4685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com *
5685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * found in the LICENSE file.
7685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com */
8685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com
9bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
10bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkBoundable.h"
11bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkAnimateMaker.h"
12bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkCanvas.h"
13bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
14bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comSkBoundable::SkBoundable() {
15bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    clearBounds();
16bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fBounds.fTop = 0;
17bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fBounds.fRight = 0;
18bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fBounds.fBottom = 0;
19bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
20bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
21bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comvoid SkBoundable::clearBounder() {
22bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fBounds.fLeft = 0x7fff;
23bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
24bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
25bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comvoid SkBoundable::getBounds(SkRect* rect) {
26bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkASSERT(rect);
27bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (fBounds.fLeft == (int16_t)0x8000U) {
28bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        INHERITED::getBounds(rect);
29bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        return;
30bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
31bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    rect->fLeft = SkIntToScalar(fBounds.fLeft);
32bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    rect->fTop = SkIntToScalar(fBounds.fTop);
33bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    rect->fRight = SkIntToScalar(fBounds.fRight);
34bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    rect->fBottom = SkIntToScalar(fBounds.fBottom);
35bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
36bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
37bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comvoid SkBoundable::enableBounder() {
38bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fBounds.fLeft = 0;
39bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
40bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
41bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
42dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.comSkBoundableAuto::SkBoundableAuto(SkBoundable* boundable,
43bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkAnimateMaker& maker) : fBoundable(boundable), fMaker(maker) {
44bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (fBoundable->hasBounds()) {
45bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMaker.fCanvas->setBounder(&maker.fDisplayList);
46bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMaker.fDisplayList.fBounds.setEmpty();
47bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
48bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
49bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
50bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comSkBoundableAuto::~SkBoundableAuto() {
51bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (fBoundable->hasBounds() == false)
52bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        return;
53bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fMaker.fCanvas->setBounder(NULL);
54bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fBoundable->setBounds(fMaker.fDisplayList.fBounds);
55bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
56