//////////////////////////////////////////////////////////////////////////////////////////////////// // NoesisGUI - http://www.noesisengine.com // Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved. //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __GUI_INTEGRATIONAPI_H__ #define __GUI_INTEGRATIONAPI_H__ #include #include #include #include #include #include namespace Noesis { struct Uri; struct CultureInfo; class Cursor; class Stream; class UIElement; class FontProvider; class XamlProvider; class BaseComponent; class TextureProvider; class FrameworkElement; class ResourceDictionary; enum FontWeight: int32_t; enum FontStyle: int32_t; enum FontStretch: int32_t; enum XamlDependencyType: int32_t; NS_INTERFACE IView; namespace GUI { /// Installs custom assert handler. See 'NsCore/Error.h' /// Must be invoked before Noesis::GUI::Init() using Noesis::SetAssertHandler; /// Installs custom global error handler. See 'NsCore/Error.h' /// Must be invoked before Noesis::GUI::Init() using Noesis::SetErrorHandler; /// Installs custom thread error handler. See 'NsCore/Error.h' /// Must be invoked before Noesis::GUI::Init() using Noesis::SetThreadErrorHandler; /// Installs custom logging handler. See 'NsCore/Log.h' /// Must be invoked before Noesis::GUI::Init() using Noesis::SetLogHandler; /// Installs custom memory handlers. See 'NsCore/Memory.h' /// Must be invoked before Noesis::GUI::Init() using Noesis::SetMemoryCallbacks; /// Disables Hot Reload feature. This is useful in 'Debug' and 'Profile' build configurations where /// Hot Reload is enabled by default and takes a bit of extra memory. Note that we only recommend /// distributing applications in 'Release' configuration where Hot Reload is disabled at build time. /// Must be invoked before Noesis::GUI::Init() NS_GUI_CORE_API void DisableHotReload(); /// By default, profiling tools like the Inspector initialize sockets (e.g. WSAStartup in Windows). /// If sockets are already initialized before Noesis, use this function to avoid double init. /// Must be invoked before Noesis::GUI::Init() NS_GUI_CORE_API void DisableSocketInit(); /// Disables all connections from the remote Inspector tool. This is useful in 'Debug' and /// 'Profile' build configurations where Inspector is enabled by default and a socket connection /// is started automatically. Note that we only recommend distributing applications in 'Release' /// configuration where instrumentation is disabled at build time. /// Must be invoked before Noesis::GUI::Init() NS_GUI_CORE_API void DisableInspector(); /// Returns whether the remote Inspector is currently connected NS_GUI_CORE_API bool IsInspectorConnected(); /// Keeps alive the Inspector connection. Only needed if Inspector is connected before any /// view is created. Views call this function internally when updated NS_GUI_CORE_API void UpdateInspector(); /// Noesis Initialization. See 'NsCore/Init.h' using Noesis::Init; /// Noesis Shutdown. See 'NsCore/Init.h' using Noesis::Shutdown; /// Sets the active license. See 'NsCore/Init.h' using Noesis::SetLicense; /// Sets the default culture NS_GUI_CORE_API void SetCulture(const CultureInfo& culture); NS_GUI_CORE_API const CultureInfo& GetCulture(); /// Sets the provider in charge of loading XAML resources. Overloads for installing providers /// for specific assemblies in pack uris (pack://application:,,,/AssemblyName;component/path) /// or schemes (scheme:///path) are also available NS_GUI_CORE_API void SetXamlProvider(XamlProvider* provider); NS_GUI_CORE_API void SetAssemblyXamlProvider(const char* assembly, XamlProvider* provider); NS_GUI_CORE_API void SetSchemeXamlProvider(const char* scheme, XamlProvider* provider); /// Sets the provider in charge of loading texture resources. Overloads for installing providers /// for specific assemblies in pack uris (pack://application:,,,/AssemblyName;component/path) /// or schemes (scheme:///path) are also available NS_GUI_CORE_API void SetTextureProvider(TextureProvider* provider); NS_GUI_CORE_API void SetAssemblyTextureProvider(const char* assembly, TextureProvider* provider); NS_GUI_CORE_API void SetSchemeTextureProvider(const char* scheme, TextureProvider* provider); /// Sets the provider in charge of loading font resources. Overloads for installing providers /// for specific assemblies in pack uris (pack://application:,,,/AssemblyName;component/path) /// or schemes (scheme:///path) are also available NS_GUI_CORE_API void SetFontProvider(FontProvider* provider); NS_GUI_CORE_API void SetAssemblyFontProvider(const char* assembly, FontProvider* provider); NS_GUI_CORE_API void SetSchemeFontProvider(const char* scheme, FontProvider* provider); /// Sets the family names to be used by the global font fallback mechanism. These fonts are used /// whenever the FontFamily of an element does not contain needed glyphs. Fallback sequence can /// specify font locations, for example { "./Fonts/#Pericles Light", "Tahoma", "Verdana" } NS_GUI_CORE_API void SetFontFallbacks(const char** familyNames, uint32_t numFamilies); /// Sets default font properties to be used when not specified in an element NS_GUI_CORE_API void SetFontDefaultProperties(float size, FontWeight weight, FontStretch stretch, FontStyle style); /// Sets a collection of application-scope resources, such as styles and brushes NS_GUI_CORE_API void LoadApplicationResources(const Uri& uri); NS_GUI_CORE_API void SetApplicationResources(ResourceDictionary* resources); NS_GUI_CORE_API ResourceDictionary* GetApplicationResources(); /// Registers the given dictionary in the internal theme. Useful for setting default styles NS_GUI_CORE_API void RegisterDefaultStyles(const Uri& dictionary); /// Callback invoked each time an element requests opening or closing the on-screen keyboard typedef void (*SoftwareKeyboardCallback)(void* user, UIElement* focused, bool open); NS_GUI_CORE_API void SetSoftwareKeyboardCallback(void* user, SoftwareKeyboardCallback callback); /// Callback invoked each time a view needs to update the mouse cursor icon typedef void (*UpdateCursorCallback)(void* user, IView* view, Cursor* cursor); NS_GUI_CORE_API void SetCursorCallback(void* user, UpdateCursorCallback callback); /// Callback for opening URL in a browser typedef void (*OpenUrlCallback)(void* user, const char* url); NS_GUI_CORE_API void SetOpenUrlCallback(void* user, OpenUrlCallback callback); NS_GUI_CORE_API void OpenUrl(const char* url); /// Callback for playing audio typedef void (*PlayAudioCallback)(void* user, const Uri& uri, float volume); NS_GUI_CORE_API void SetPlayAudioCallback(void* user, PlayAudioCallback callback); NS_GUI_CORE_API void PlayAudio(const Uri& uri, float volume); /// Callback for assembly loading. It will be called for each assembly referenced in a XAML, /// for example when a xmlns attribute specifies an assembly: /// /// or when a resource Uri specifies an assembly: /// typedef void (*LoadAssemblyCallback)(void* user, const char* assembly); NS_GUI_CORE_API void SetLoadAssemblyCallback(void* user, LoadAssemblyCallback callback); /// Finds dependencies to other XAMLS and resources (fonts, textures, sounds...) typedef void (*XamlDependencyCallback)(void* user, const Uri& uri, XamlDependencyType type); NS_GUI_CORE_API void GetXamlDependencies(Stream* xaml, const Uri& baseUri, void* user, XamlDependencyCallback callback); /// Loads a XAML file that is located at the specified uniform resource identifier NS_GUI_CORE_API Ptr LoadXaml(Stream* xaml, const Uri& uri); NS_GUI_CORE_API Ptr LoadXaml(const Uri& uri); template Ptr LoadXaml(const Uri& uri); /// Parses a well-formed XAML fragment and creates a corresponding object tree NS_GUI_CORE_API Ptr ParseXaml(const char* xamlText); template Ptr ParseXaml(const char* xamlText); /// Loads a XAML resource, like an audio, at the given uniform resource identifier NS_GUI_CORE_API Ptr LoadXamlResource(const Uri& uri); /// Loads a XAML file passing an object of the same type as the root element NS_GUI_CORE_API void LoadComponent(BaseComponent* component, const Uri& uri); /// Creates a view with the given root element NS_GUI_CORE_API Ptr CreateView(FrameworkElement* content); } } #include #endif