Home | History | Annotate | Download | only in animator
      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 }
     75