virtual ComPtr<CanvasSwapChainPanel> CreateCanvasSwapChainPanel() override { ComPtr<IInspectable> canvasSwapChainPanelInspectable; ThrowIfFailed(m_canvasSwapChainPanelActivationFactory->ActivateInstance(&canvasSwapChainPanelInspectable)); auto canvasSwapChainPanel = As<ICanvasSwapChainPanel>(canvasSwapChainPanelInspectable); return static_cast<CanvasSwapChainPanel*>(canvasSwapChainPanel.Get()); }
virtual ComPtr<IImage> CreateImageControl() override { ComPtr<IInspectable> inspectableImage; ThrowIfFailed(m_imageControlFactory->ActivateInstance(&inspectableImage)); ComPtr<IImage> image; ThrowIfFailed(inspectableImage.As(&image)); return image; }
HRESULT Trace::CreateLoggingFields(ComPtr<ILoggingFields> *ppFields) { HRESULT hr = S_OK; HStringReference runtimeClassLoggingFields(RuntimeClass_Windows_Foundation_Diagnostics_LoggingFields); ComPtr<IActivationFactory> spFactory; hr = ABI::Windows::Foundation::GetActivationFactory(runtimeClassLoggingFields.Get(), &spFactory); if (FAILED(hr)) return hr; ComPtr<IInspectable> object; spFactory->ActivateInstance(&object); hr = object.As(ppFields); return hr; }
bool WinRTWindow::initialize(const std::string &name, size_t width, size_t height) { ComPtr<ICoreWindowStatic> coreWindowStatic; ComPtr<IActivationFactory> propertySetFactory; ComPtr<IPropertyValueStatics> propertyValueStatics; ComPtr<ICoreApplication> coreApplication; ComPtr<IPropertySet> coreApplicationProperties; ComPtr<IMap<HSTRING, IInspectable *>> coreApplicationPropertiesAsMap; ComPtr<IMap<HSTRING, IInspectable *>> nativeWindowAsMap; ComPtr<IInspectable> sizeValue; HRESULT result = S_OK; boolean propertyReplaced = false; destroy(); // Get all the relevant activation factories result = GetActivationFactory( HStringReference(RuntimeClass_Windows_UI_Core_CoreWindow).Get(), &coreWindowStatic); if (FAILED(result)) { return false; } result = GetActivationFactory( HStringReference(RuntimeClass_Windows_Foundation_Collections_PropertySet).Get(), &propertySetFactory); if (FAILED(result)) { return false; } result = GetActivationFactory(HStringReference(RuntimeClass_Windows_Foundation_PropertyValue).Get(), &propertyValueStatics); if (FAILED(result)) { return false; } result = GetActivationFactory( HStringReference(RuntimeClass_Windows_ApplicationModel_Core_CoreApplication).Get(), &coreApplication); if (FAILED(result)) { return false; } // Create a PropertySet to be used as the native window result = propertySetFactory->ActivateInstance(&mNativeWindow); if (FAILED(result)) { return false; } // Get the PropertySet as a map, so we can Insert things into it later ComPtr<IInspectable> tempNativeWindow = mNativeWindow; result = tempNativeWindow.As(&nativeWindowAsMap); if (FAILED(result)) { return false; } // Get the CoreApplication properties result = coreApplication->get_Properties(coreApplicationProperties.GetAddressOf()); if (FAILED(result)) { return false; } // Get the CoreApplication properties as a map result = coreApplicationProperties.As(&coreApplicationPropertiesAsMap); if (FAILED(result)) { return false; } // See if the application properties contain an EGLNativeWindowTypeProperty boolean hasEGLNativeWindowTypeProperty; result = coreApplicationPropertiesAsMap->HasKey( HStringReference(EGLNativeWindowTypeProperty).Get(), &hasEGLNativeWindowTypeProperty); if (FAILED(result)) { return false; } // If an EGLNativeWindowTypeProperty is inputted then use it if (hasEGLNativeWindowTypeProperty) { ComPtr<IInspectable> coreApplicationPropertyNativeWindow; result = coreApplicationPropertiesAsMap->Lookup( HStringReference(EGLNativeWindowTypeProperty).Get(), &coreApplicationPropertyNativeWindow); if (FAILED(result)) { return false; } // See if the inputted window was a CoreWindow ComPtr<ICoreWindow> applicationPropertyCoreWindow; if (SUCCEEDED(coreApplicationPropertyNativeWindow.As(&applicationPropertyCoreWindow))) { // Store away the CoreWindow's dispatcher, to be used later to process messages result = applicationPropertyCoreWindow->get_Dispatcher(&mCoreDispatcher); if (FAILED(result)) { return false; } } else { ComPtr<IPropertySet> propSet; // Disallow Property Sets here, since we want to wrap this window in // a property set with the size property below if (SUCCEEDED(coreApplicationPropertyNativeWindow.As(&propSet))) { return false; } } // Add the window to the map result = nativeWindowAsMap->Insert(HStringReference(EGLNativeWindowTypeProperty).Get(), coreApplicationPropertyNativeWindow.Get(), &propertyReplaced); if (FAILED(result)) { return false; } } else { ComPtr<ICoreWindow> currentThreadCoreWindow; // Get the CoreWindow for the current thread result = coreWindowStatic->GetForCurrentThread(¤tThreadCoreWindow); if (FAILED(result)) { return false; } // By default, just add this thread's CoreWindow to the PropertySet result = nativeWindowAsMap->Insert(HStringReference(EGLNativeWindowTypeProperty).Get(), currentThreadCoreWindow.Get(), &propertyReplaced); if (FAILED(result)) { return false; } // Store away the CoreWindow's dispatcher, to be used later to process messages result = currentThreadCoreWindow->get_Dispatcher(&mCoreDispatcher); if (FAILED(result)) { return false; } } // Create a Size to represent the Native Window's size Size renderSize; renderSize.Width = static_cast<float>(width); renderSize.Height = static_cast<float>(height); result = propertyValueStatics->CreateSize(renderSize, sizeValue.GetAddressOf()); if (FAILED(result)) { return false; } // Add the Size to the PropertySet result = nativeWindowAsMap->Insert(HStringReference(EGLRenderSurfaceSizeProperty).Get(), sizeValue.Get(), &propertyReplaced); if (FAILED(result)) { return false; } return true; };