void
nsAnimationReceiver::RecordAnimationMutation(Animation* aAnimation,
                                             AnimationMutation aMutationType)
{
  KeyframeEffectReadonly* effect = aAnimation->GetEffect();
  if (!effect) {
    return;
  }

  Element* animationTarget = effect->GetTarget();
  if (!animationTarget) {
    return;
  }

  if (!Animations() || !(Subtree() || animationTarget == Target()) ||
      animationTarget->ChromeOnlyAccess()) {
    return;
  }

  if (nsAutoAnimationMutationBatch::IsBatching()) {
    if (nsAutoAnimationMutationBatch::GetBatchTarget() != animationTarget) {
      return;
    }

    switch (aMutationType) {
      case eAnimationMutation_Added:
        nsAutoAnimationMutationBatch::AnimationAdded(aAnimation);
        break;
      case eAnimationMutation_Changed:
        nsAutoAnimationMutationBatch::AnimationChanged(aAnimation);
        break;
      case eAnimationMutation_Removed:
        nsAutoAnimationMutationBatch::AnimationRemoved(aAnimation);
        break;
    }

    nsAutoAnimationMutationBatch::AddObserver(Observer());
    return;
  }

  nsDOMMutationRecord* m =
    Observer()->CurrentRecord(nsGkAtoms::animations);

  NS_ASSERTION(!m->mTarget, "Wrong target!");

  m->mTarget = animationTarget;

  switch (aMutationType) {
    case eAnimationMutation_Added:
      m->mAddedAnimations.AppendElement(aAnimation);
      break;
    case eAnimationMutation_Changed:
      m->mChangedAnimations.AppendElement(aAnimation);
      break;
    case eAnimationMutation_Removed:
      m->mRemovedAnimations.AppendElement(aAnimation);
      break;
  }
}
void Button_Panel::OnThink()
{
	BaseClass::OnThink();

	Animations();
}