当前位置: 首页>>代码示例>>C++>>正文


C++ AnimationPlayer::IsPausedOrPausing方法代码示例

本文整理汇总了C++中AnimationPlayer::IsPausedOrPausing方法的典型用法代码示例。如果您正苦于以下问题:C++ AnimationPlayer::IsPausedOrPausing方法的具体用法?C++ AnimationPlayer::IsPausedOrPausing怎么用?C++ AnimationPlayer::IsPausedOrPausing使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AnimationPlayer的用法示例。


在下文中一共展示了AnimationPlayer::IsPausedOrPausing方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: mb


//.........这里部分代码省略.........
        // direction which means that if there are more animations in
        // the new list of animations with a given name than in the old
        // list, it will be the animations towards the of the beginning of
        // the list that do not match and are treated as new animations.
        nsRefPtr<CSSAnimationPlayer> oldPlayer;
        size_t oldIdx = collection->mPlayers.Length();
        while (oldIdx-- != 0) {
          CSSAnimationPlayer* a =
            collection->mPlayers[oldIdx]->AsCSSAnimationPlayer();
          MOZ_ASSERT(a, "All players in the CSS Animation collection should"
                        " be CSSAnimationPlayer objects");
          if (a->Name() == newPlayer->Name()) {
            oldPlayer = a;
            break;
          }
        }
        if (!oldPlayer) {
          continue;
        }

        bool animationChanged = false;

        // Update the old from the new so we can keep the original object
        // identity (and any expando properties attached to it).
        if (oldPlayer->GetSource() && newPlayer->GetSource()) {
          Animation* oldAnim = oldPlayer->GetSource();
          Animation* newAnim = newPlayer->GetSource();
          animationChanged =
            oldAnim->Timing() != newAnim->Timing() ||
            oldAnim->Properties() != newAnim->Properties();
          oldAnim->Timing() = newAnim->Timing();
          oldAnim->Properties() = newAnim->Properties();
        }

        // Reset compositor state so animation will be re-synchronized.
        oldPlayer->ClearIsRunningOnCompositor();

        // Handle changes in play state.
        // CSSAnimationPlayer takes care of override behavior so that,
        // for example, if the author has called pause(), that will
        // override the animation-play-state.
        // (We should check newPlayer->IsStylePaused() but that requires
        //  downcasting to CSSAnimationPlayer and we happen to know that
        //  newPlayer will only ever be paused by calling PauseFromStyle
        //  making IsPausedOrPausing synonymous in this case.)
        if (!oldPlayer->IsStylePaused() && newPlayer->IsPausedOrPausing()) {
          oldPlayer->PauseFromStyle();
          animationChanged = true;
        } else if (oldPlayer->IsStylePaused() &&
                   !newPlayer->IsPausedOrPausing()) {
          oldPlayer->PlayFromStyle();
          animationChanged = true;
        }

        if (animationChanged) {
          nsNodeUtils::AnimationChanged(oldPlayer);
        }

        // Replace new animation with the (updated) old one and remove the
        // old one from the array so we don't try to match it any more.
        //
        // Although we're doing this while iterating this is safe because
        // we're not changing the length of newPlayers and we've finished
        // iterating over the list of old iterations.
        newPlayer->Cancel();
        newPlayer = nullptr;
        newPlayers.ReplaceElementAt(newIdx, oldPlayer);
        collection->mPlayers.RemoveElementAt(oldIdx);

        // We've touched the old animation's timing properties, so this
        // could update the old player's relevance.
        oldPlayer->UpdateRelevance();
      }
    }
  } else {
    collection =
      GetAnimationPlayers(aElement, aStyleContext->GetPseudoType(), true);
  }
  collection->mPlayers.SwapElements(newPlayers);
  collection->mNeedsRefreshes = true;
  collection->Tick();

  // Cancel removed animations
  for (size_t newPlayerIdx = newPlayers.Length(); newPlayerIdx-- != 0; ) {
    newPlayers[newPlayerIdx]->Cancel();
  }

  TimeStamp refreshTime = mPresContext->RefreshDriver()->MostRecentRefresh();
  UpdateStyleAndEvents(collection, refreshTime,
                       EnsureStyleRule_IsNotThrottled);
  // We don't actually dispatch the mPendingEvents now.  We'll either
  // dispatch them the next time we get a refresh driver notification
  // or the next time somebody calls
  // nsPresShell::FlushPendingNotifications.
  if (!mPendingEvents.IsEmpty()) {
    mPresContext->Document()->SetNeedStyleFlush();
  }

  return GetAnimationRule(aElement, aStyleContext->GetPseudoType());
}
开发者ID:RobertJGabriel,项目名称:Waterfox,代码行数:101,代码来源:nsAnimationManager.cpp


注:本文中的AnimationPlayer::IsPausedOrPausing方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。