コード例 #1
0
HRESULT CarouselThumbnailAnimation::Setup(D2D1_POINT_2F targetPoint, double targetOpacity, double duration)
{
    // Animation objects
    ComPtr<IUIAnimationManager> animationManager;
    ComPtr<IUIAnimationTimer> animationTimer;
    ComPtr<IUIAnimationTransitionLibrary> transitionLibrary;
    ComPtr<IUIAnimationStoryboard> storyboard;

    // Transition objects
    ComPtr<IUIAnimationTransition> pointXTransition;
    ComPtr<IUIAnimationTransition> pointYTransition;
    ComPtr<IUIAnimationTransition> opacityTransition;

    // Retrieve animation objects
    HRESULT hr = AnimationUtility::GetAnimationManager(&animationManager);

    if (SUCCEEDED(hr))
    {
        hr = AnimationUtility::GetTransitionLibrary(&transitionLibrary);
    }

    if (SUCCEEDED(hr))
    {
        hr = AnimationUtility::GetAnimationTimer(&animationTimer);
    }

    // Initialize storyboard
    if (SUCCEEDED(hr))
    {
        hr = animationManager->CreateStoryboard(&storyboard);

        // Create one transition for each orbit variable
        if (SUCCEEDED(hr))
        {
            hr = transitionLibrary->CreateLinearTransition(duration, targetPoint.x, &pointXTransition);

            if (SUCCEEDED(hr))
            {
                hr = storyboard->AddTransition(m_pointX, pointXTransition);
            }
        }

        if (SUCCEEDED(hr))
        {
            hr = transitionLibrary->CreateLinearTransition(duration, targetPoint.y, &pointYTransition);

            if (SUCCEEDED(hr))
            {
                hr = storyboard->AddTransition(m_pointY, pointYTransition);
            }
        }

        if (SUCCEEDED(hr))
        {
            hr = transitionLibrary->CreateLinearTransition(duration, targetOpacity, &opacityTransition);

            if (SUCCEEDED(hr))
            {
                hr = storyboard->AddTransition(m_opacity, opacityTransition);
            }
        }

        if (SUCCEEDED(hr))
        {
            hr = AnimationUtility::ScheduleStoryboard(storyboard);
        }
    }

    return hr;
}
コード例 #2
0
// Build storyboard for the animation
HRESULT SlideAnimation::BuildStoryboard()
{
    ComPtr<IUIAnimationStoryboard> storyboard;
    HRESULT hr = S_OK;

    // clear all the previous animation points
    m_animationPoints.clear();

    // Initialize animation variables if necessary
    if (nullptr == m_animationManager)
    {
        hr = Initialize();
    }
    if (SUCCEEDED (hr))
    {
        hr = m_animationManager->CreateStoryboard(&storyboard);
    }
    if (SUCCEEDED (hr))
    {
        // Populate all the animated thumbnail cells
        for ( auto animatedCell = m_animatedThumbnailCells.begin(); animatedCell < m_animatedThumbnailCells.end(); animatedCell++)
        {
            D2D1_POINT_2F startPoint = animatedCell->start;
            D2D1_POINT_2F endPoint = animatedCell->end;
            ComPtr<IUIAnimationTransition> xTransition, yTransition;

            // Create animation variables
            LineAnimationVar animationVar;
            hr = m_animationManager->CreateAnimationVariable(startPoint.x, &(animationVar.animationX));
            if (SUCCEEDED (hr))
            {
                hr = m_animationManager->CreateAnimationVariable(startPoint.y, &(animationVar.animationY));
            }

            // Add a transition for the animation variable
            if (SUCCEEDED (hr))
            {

                hr = m_transitionLibrary->CreateAccelerateDecelerateTransition(m_duration, endPoint.x, m_accelerationRatio , m_decelerationRatio , &xTransition);
            }
            if (SUCCEEDED (hr))
            {
                hr  = storyboard->AddTransition(animationVar.animationX, xTransition);
            }
            if (SUCCEEDED (hr))
            {
                hr = m_transitionLibrary->CreateConstantTransition(m_duration, &yTransition);
            }
            if (SUCCEEDED (hr))
            {
                hr = storyboard->AddTransition(animationVar.animationY, yTransition);
            }
            // Store the pair of animation variable and thumbnail control
            m_animationPoints.insert(LineAnimationPair(animatedCell->cell.control, animationVar));
        }
    }

    // Schedule storyboard
    if (SUCCEEDED (hr))
    {
        hr = AnimationUtility::ScheduleStoryboard(storyboard);
    }
    return hr;
}
コード例 #3
0
HRESULT CarouselThumbnailAnimation::Setup(D2D1_POINT_2F keyFramePoint, D2D1_POINT_2F targetPoint, double duration)
{
    // Animation objects
    ComPtr<IUIAnimationManager> animationManager;
    ComPtr<IUIAnimationTimer> animationTimer;
    ComPtr<IUIAnimationTransitionLibrary> transitionLibrary;
    ComPtr<IUIAnimationStoryboard> storyboard;

    // Transition objects
    ComPtr<IUIAnimationTransition> transitionX1;
    ComPtr<IUIAnimationTransition> transitionY1;
    ComPtr<IUIAnimationTransition> transitionX2;
    ComPtr<IUIAnimationTransition> transitionY2;

    // Retrieve animation objects
    HRESULT hr = AnimationUtility::GetAnimationManager(&animationManager);

    if (SUCCEEDED(hr))
    {
        hr = AnimationUtility::GetTransitionLibrary(&transitionLibrary);
    }

    if (SUCCEEDED(hr))
    {
        hr = AnimationUtility::GetAnimationTimer(&animationTimer);
    }

    // Initialize storyboard
    if (SUCCEEDED(hr))
    {
        hr = animationManager->CreateStoryboard(&storyboard);

        // Add keyframe to increase the time of the first transition
        UI_ANIMATION_SECONDS keyFrameStartTime = duration * 0.2;
        UI_ANIMATION_KEYFRAME keyframe1;

        hr = storyboard->AddKeyframeAtOffset(
            UI_ANIMATION_KEYFRAME_STORYBOARD_START,
            keyFrameStartTime,
            &keyframe1);

        // Use initial point to determine whether or not to do first transition
        double initialPointY;
        hr = m_pointY->GetValue(&initialPointY);

        if (initialPointY > keyFramePoint.y)
        {
            if (SUCCEEDED(hr))
            {
                hr = transitionLibrary->CreateAccelerateDecelerateTransition(
                    keyFrameStartTime,
                    keyFramePoint.x,
                    0.0,
                    1.0,
                    &transitionX1);
            }

            if (SUCCEEDED(hr))
            {
                hr = storyboard->AddTransition(m_pointX, transitionX1);
            }

            if (SUCCEEDED(hr))
            {
                hr = transitionLibrary->CreateAccelerateDecelerateTransition(
                    keyFrameStartTime,
                    keyFramePoint.y,
                    1.0,
                    0.0,
                    &transitionY1);

                if (SUCCEEDED(hr))
                {
                    hr = storyboard->AddTransition(m_pointY, transitionY1);
                }
            }
        }
        else
        {
            keyFrameStartTime = 0.0;
        }

        if (SUCCEEDED(hr))
        {
            hr = transitionLibrary->CreateAccelerateDecelerateTransition(
                duration - keyFrameStartTime,
                targetPoint.x,
                1.0,
                0.0,
                &transitionX2);

            if (SUCCEEDED(hr))
            {
                if (initialPointY > keyFramePoint.y)
                {
                    hr = storyboard->AddTransitionAtKeyframe(m_pointX, transitionX2, keyframe1);
                }
                else
                {
                    hr = storyboard->AddTransition(m_pointX, transitionX2);
                }
            }
        }

        if (SUCCEEDED(hr))
        {
            hr = transitionLibrary->CreateAccelerateDecelerateTransition(
                duration - keyFrameStartTime,
                targetPoint.y,
                0.0,
                1.0,
                &transitionY2);

            if (SUCCEEDED(hr))
            {
                if (initialPointY > keyFramePoint.y)
                {
                    hr = storyboard->AddTransitionAtKeyframe(m_pointY, transitionY2, keyframe1);
                }
                else
                {
                    hr = storyboard->AddTransition(m_pointY, transitionY2);
                }
            }
        }

        if (SUCCEEDED(hr))
        {
            hr = AnimationUtility::ScheduleStoryboard(storyboard);
        }
    }

    return hr;
}
コード例 #4
0
ファイル: PanAnimation.cpp プロジェクト: xutianyi/Workspace
//
// Sets up a new animation using the specified distance and duration
//
HRESULT PanAnimation::Setup(double startPosition, double targetPosition, double duration)
{
    // Animation objects
    ComPtr<IUIAnimationManager> animationManager;
    ComPtr<IUIAnimationTimer> animationTimer;
    ComPtr<IUIAnimationTransitionLibrary> transitionLibrary;
    ComPtr<IUIAnimationStoryboard> storyboard;

    // Transition objects
    ComPtr<IUIAnimationTransition> instantTransition;
    ComPtr<IUIAnimationTransition> panTransition;

    // Retrieve animation objects
    HRESULT hr = AnimationUtility::GetAnimationManager(&animationManager);
    if (SUCCEEDED(hr))
    {
        hr = AnimationUtility::GetTransitionLibrary(&transitionLibrary);
    }

    if (SUCCEEDED(hr))
    {
        hr = AnimationUtility::GetAnimationTimer(&animationTimer);
    }

    // Initialize storyboard
    if (SUCCEEDED(hr))
    {
        hr = animationManager->CreateStoryboard(&storyboard);

        if (SUCCEEDED(hr))
        {
            hr = transitionLibrary->CreateInstantaneousTransition(startPosition, &instantTransition);

            if (SUCCEEDED(hr))
            {
                hr = storyboard->AddTransition(m_panValue, instantTransition);
            }
        }

        if (SUCCEEDED(hr))
        {
            hr = transitionLibrary->CreateAccelerateDecelerateTransition(
                duration,
                targetPosition,
                0.25,
                0.25,
                &panTransition);

            if (SUCCEEDED(hr))
            {
                hr = storyboard->AddTransition(m_panValue, panTransition);
            }
        }

        if (SUCCEEDED(hr))
        {
            hr = AnimationUtility::ScheduleStoryboard(storyboard);
        }
    }

    return hr;
}