195 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			195 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __GUI_INTEGRATIONAPI_H__
							 | 
						||
| 
								 | 
							
								#define __GUI_INTEGRATIONAPI_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Ptr.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Init.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Error.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Log.h>
							 | 
						||
| 
								 | 
							
								#include <NsGui/CoreApi.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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:
							 | 
						||
| 
								 | 
							
								///   <UserControl xmlns:controls="clr-namespace:Noesis.Controls;assembly=Noesis.GUI.Controls"/>
							 | 
						||
| 
								 | 
							
								/// or when a resource Uri specifies an assembly:
							 | 
						||
| 
								 | 
							
								///   <Image Source="/SharedResources;component/Images/account.png"/>
							 | 
						||
| 
								 | 
							
								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<BaseComponent> LoadXaml(Stream* xaml, const Uri& uri);
							 | 
						||
| 
								 | 
							
								NS_GUI_CORE_API Ptr<BaseComponent> LoadXaml(const Uri& uri);
							 | 
						||
| 
								 | 
							
								template<class T> Ptr<T> LoadXaml(const Uri& uri);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Parses a well-formed XAML fragment and creates a corresponding object tree
							 | 
						||
| 
								 | 
							
								NS_GUI_CORE_API Ptr<BaseComponent> ParseXaml(const char* xamlText);
							 | 
						||
| 
								 | 
							
								template<class T> Ptr<T> ParseXaml(const char* xamlText);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// Loads a XAML resource, like an audio, at the given uniform resource identifier
							 | 
						||
| 
								 | 
							
								NS_GUI_CORE_API Ptr<Stream> 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<IView> CreateView(FrameworkElement* content);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsGui/IntegrationAPI.inl>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |