• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
SkHitTest()33 SkHitTest::SkHitTest() : value(false) {
34 }
35 
draw(SkAnimateMaker & maker)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 
enable(SkAnimateMaker & maker)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 
hasEnable() const74 bool SkHitTest::hasEnable() const {
75     return true;
76 }
77 
preferredChild(SkDisplayTypes type)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 
84