~ubuntu-branches/ubuntu/karmic/gears/karmic

« back to all changes in this revision

Viewing changes to third_party/skia/src/animator/SkHitTest.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Lesicnik
  • Date: 2009-04-30 19:15:25 UTC
  • Revision ID: james.westby@ubuntu.com-20090430191525-0790sb5wzg8ou0xb
Tags: upstream-0.5.21.0~svn3334+dfsg
ImportĀ upstreamĀ versionĀ 0.5.21.0~svn3334+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* libs/graphics/animator/SkHitTest.cpp
 
2
**
 
3
** Copyright 2006, The Android Open Source Project
 
4
**
 
5
** Licensed under the Apache License, Version 2.0 (the "License"); 
 
6
** you may not use this file except in compliance with the License. 
 
7
** You may obtain a copy of the License at 
 
8
**
 
9
**     http://www.apache.org/licenses/LICENSE-2.0 
 
10
**
 
11
** Unless required by applicable law or agreed to in writing, software 
 
12
** distributed under the License is distributed on an "AS IS" BASIS, 
 
13
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 
14
** See the License for the specific language governing permissions and 
 
15
** limitations under the License.
 
16
*/
 
17
 
 
18
#include "SkHitTest.h"
 
19
 
 
20
#if SK_USE_CONDENSED_INFO == 0
 
21
 
 
22
const SkMemberInfo SkHitTest::fInfo[] = {
 
23
    SK_MEMBER_ARRAY(bullets, Displayable),
 
24
    SK_MEMBER_ARRAY(hits, Int),
 
25
    SK_MEMBER_ARRAY(targets, Displayable),
 
26
    SK_MEMBER(value, Boolean)
 
27
};
 
28
 
 
29
#endif
 
30
 
 
31
DEFINE_GET_MEMBER(SkHitTest);
 
32
 
 
33
SkHitTest::SkHitTest() : value(false) {
 
34
}
 
35
 
 
36
bool SkHitTest::draw(SkAnimateMaker& maker) {
 
37
    hits.setCount(bullets.count());
 
38
    value = false;
 
39
    int bulletCount = bullets.count();
 
40
    int targetCount = targets.count();
 
41
    for (int bIndex = 0; bIndex < bulletCount; bIndex++) {
 
42
        SkDisplayable* bullet = bullets[bIndex];
 
43
        SkRect bBounds;
 
44
        bullet->getBounds(&bBounds);
 
45
        hits[bIndex] = -1;
 
46
        if (bBounds.fLeft == (int16_t)0x8000U)
 
47
            continue;
 
48
        for (int tIndex = 0; tIndex < targetCount; tIndex++) {
 
49
            SkDisplayable* target = targets[tIndex];
 
50
            SkRect tBounds;
 
51
            target->getBounds(&tBounds);
 
52
            if (bBounds.intersect(tBounds)) {
 
53
                hits[bIndex] = tIndex;
 
54
                value = true;
 
55
                break;
 
56
            }
 
57
        }
 
58
    }
 
59
    return false;
 
60
}
 
61
 
 
62
bool SkHitTest::enable(SkAnimateMaker& maker) {
 
63
    for (int bIndex = 0; bIndex < bullets.count(); bIndex++) {
 
64
        SkDisplayable* bullet = bullets[bIndex];
 
65
        bullet->enableBounder();
 
66
    }
 
67
    for (int tIndex = 0; tIndex < targets.count(); tIndex++) {
 
68
        SkDisplayable* target = targets[tIndex];
 
69
        target->enableBounder();
 
70
    }
 
71
    return false;
 
72
}
 
73
 
 
74
bool SkHitTest::hasEnable() const {
 
75
    return true;
 
76
}
 
77
 
 
78
const SkMemberInfo* SkHitTest::preferredChild(SkDisplayTypes type) {
 
79
    if (bullets.count() == 0)
 
80
        return getMember("bullets");
 
81
    return getMember("targets"); // !!! cwap! need to refer to member through enum like kScope instead
 
82
}
 
83