gfx/skia/trunk/src/animator/SkHitTest.cpp

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:abe3261d4d3d
1
2 /*
3 * Copyright 2006 The Android Open Source Project
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9
10 #include "SkHitTest.h"
11
12 #if SK_USE_CONDENSED_INFO == 0
13
14 const SkMemberInfo SkHitTest::fInfo[] = {
15 SK_MEMBER_ARRAY(bullets, Displayable),
16 SK_MEMBER_ARRAY(hits, Int),
17 SK_MEMBER_ARRAY(targets, Displayable),
18 SK_MEMBER(value, Boolean)
19 };
20
21 #endif
22
23 DEFINE_GET_MEMBER(SkHitTest);
24
25 SkHitTest::SkHitTest() : value(false) {
26 }
27
28 bool SkHitTest::draw(SkAnimateMaker&) {
29 hits.setCount(bullets.count());
30 value = false;
31 int bulletCount = bullets.count();
32 int targetCount = targets.count();
33 for (int bIndex = 0; bIndex < bulletCount; bIndex++) {
34 SkDisplayable* bullet = bullets[bIndex];
35 SkRect bBounds;
36 bullet->getBounds(&bBounds);
37 hits[bIndex] = -1;
38 if (bBounds.fLeft == (int16_t)0x8000U)
39 continue;
40 for (int tIndex = 0; tIndex < targetCount; tIndex++) {
41 SkDisplayable* target = targets[tIndex];
42 SkRect tBounds;
43 target->getBounds(&tBounds);
44 if (bBounds.intersect(tBounds)) {
45 hits[bIndex] = tIndex;
46 value = true;
47 break;
48 }
49 }
50 }
51 return false;
52 }
53
54 bool SkHitTest::enable(SkAnimateMaker&) {
55 for (int bIndex = 0; bIndex < bullets.count(); bIndex++) {
56 SkDisplayable* bullet = bullets[bIndex];
57 bullet->enableBounder();
58 }
59 for (int tIndex = 0; tIndex < targets.count(); tIndex++) {
60 SkDisplayable* target = targets[tIndex];
61 target->enableBounder();
62 }
63 return false;
64 }
65
66 bool SkHitTest::hasEnable() const {
67 return true;
68 }
69
70 const SkMemberInfo* SkHitTest::preferredChild(SkDisplayTypes) {
71 if (bullets.count() == 0)
72 return getMember("bullets");
73 return getMember("targets"); // !!! cwap! need to refer to member through enum like kScope instead
74 }

mercurial