72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// NoesisGUI - http://www.noesisengine.com
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __GUI_TEXTUREPROVIDER_H__
							 | 
						||
| 
								 | 
							
								#define __GUI_TEXTUREPROVIDER_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <NsCore/Noesis.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/BaseComponent.h>
							 | 
						||
| 
								 | 
							
								#include <NsCore/Delegate.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Noesis
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct Uri;
							 | 
						||
| 
								 | 
							
								class Texture;
							 | 
						||
| 
								 | 
							
								class RenderDevice;
							 | 
						||
| 
								 | 
							
								template<class T> class Ptr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Texture metadata returned by TextureProvider::GetTextureInfo()
							 | 
						||
| 
								 | 
							
								// The rectangle [x, y, width, height] defines the logical surface used by the texture
							 | 
						||
| 
								 | 
							
								// Note that the provider can reuse the same texture with different names and rectangles to
							 | 
						||
| 
								 | 
							
								// implementing texture atlas compatible with standard XAML. For example:
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  - ItemA ==> Atlas.png [0,   0, 100, 100]
							 | 
						||
| 
								 | 
							
								//  - ItemB ==> Atlas.png [0, 100, 100, 200]
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  <StackPanel>
							 | 
						||
| 
								 | 
							
								//    <Image Source="ItemA.png"/>
							 | 
						||
| 
								 | 
							
								//    <Image Source="ItemB.png"/>
							 | 
						||
| 
								 | 
							
								//  </StackPanel>
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// The member 'dpiScale' can be used for scaling (eg: 96 dpi = 1.0, 72 dpi = 0.75 (72/96))
							 | 
						||
| 
								 | 
							
								struct TextureInfo
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t width = 0;
							 | 
						||
| 
								 | 
							
								    uint32_t height = 0;
							 | 
						||
| 
								 | 
							
								    uint32_t x = 0;
							 | 
						||
| 
								 | 
							
								    uint32_t y = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    float dpiScale = 1.0f;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								/// Base class for implementing providers of textures
							 | 
						||
| 
								 | 
							
								////////////////////////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								class TextureProvider: public BaseComponent
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    /// Returns metadata for the texture at the given URI or empty rectangle if texture is not found
							 | 
						||
| 
								 | 
							
								    virtual TextureInfo GetTextureInfo(const Uri& uri) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Returns a texture compatible with the given device or null if texture is not found
							 | 
						||
| 
								 | 
							
								    virtual Ptr<Texture> LoadTexture(const Uri& uri, RenderDevice* device) = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// Delegate to notify changes to the texture file content
							 | 
						||
| 
								 | 
							
								    typedef Delegate<void (const Uri&)> TextureChangedDelegate;
							 | 
						||
| 
								 | 
							
								    TextureChangedDelegate& TextureChanged() { return mTextureChanged; }
							 | 
						||
| 
								 | 
							
								    void RaiseTextureChanged(const Uri& uri) { mTextureChanged(uri); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    TextureChangedDelegate mTextureChanged;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |