// Apply a 3D flip for hit-tested tile visual HRESULT Application::FlipVisual(int visualIndex) { HRESULT hr = S_OK; Microsoft::WRL::ComPtr<IDCompositionAnimation> dcompAngleAnimation; if (SUCCEEDED(hr)) { hr = _dcompDevice->CreateAnimation(&dcompAngleAnimation); } if (SUCCEEDED(hr)) { hr = dcompAngleAnimation->AddCubic(0.0, 0.0f, 180.0f, 0.0f, 0.0f); } if (SUCCEEDED(hr)) { hr = dcompAngleAnimation->End(1.0, 180.0f); } Microsoft::WRL::ComPtr<IDCompositionRotateTransform3D> dcompFlipTransform; if (SUCCEEDED(hr)) { hr = _dcompDevice->CreateRotateTransform3D(&dcompFlipTransform); } if (SUCCEEDED(hr)) { hr = dcompFlipTransform->SetCenterX(1.0f * _hWndClientWidth / 8.0f); } if (SUCCEEDED(hr)) { hr = dcompFlipTransform->SetCenterY(1.0f * _hWndClientHeight / 8.0f); } if (SUCCEEDED(hr)) { hr = dcompFlipTransform->SetCenterZ(0.0f); } if (SUCCEEDED(hr)) { hr = dcompFlipTransform->SetAxisX(0.0f); } if (SUCCEEDED(hr)) { hr = dcompFlipTransform->SetAxisY(1.0f); } if (SUCCEEDED(hr)) { hr = dcompFlipTransform->SetAxisZ(0.0f); } if (SUCCEEDED(hr)) { hr = dcompFlipTransform->SetAngle(dcompAngleAnimation.Get()); } if (SUCCEEDED(hr)) { hr = _dcompTileVisuals[visualIndex]->SetEffect(dcompFlipTransform.Get()); } if (SUCCEEDED(hr)) { hr = _dcompDevice->Commit(); } return hr; }