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
|