summaryrefslogtreecommitdiff
path: root/public/panorama/data/iimagesource.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/panorama/data/iimagesource.h')
-rw-r--r--public/panorama/data/iimagesource.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/public/panorama/data/iimagesource.h b/public/panorama/data/iimagesource.h
new file mode 100644
index 0000000..d6be4f4
--- /dev/null
+++ b/public/panorama/data/iimagesource.h
@@ -0,0 +1,93 @@
+//=========== Copyright Valve Corporation, All rights reserved. ===============//
+//
+// Purpose:
+//=============================================================================//
+
+#ifndef IIMAGESOURCE_H
+#define IIMAGESOURCE_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+namespace panorama
+{
+
+enum EImageFormat
+{
+ k_EImageFormatUnknown,
+ k_EImageFormatR8G8B8A8,
+ k_EImageFormatB8G8R8A8_PreMultiplied,
+ k_EImageFormatA8
+};
+
+class CPanel2D;
+
+//
+// Data source for image data used to render an asset
+//
+class IImageSource: public panorama::IUIJSObject
+{
+public:
+ virtual bool BIsValid() = 0;
+ virtual uint32 GetTextureID() = 0;
+ virtual int GetWidth() = 0;
+ virtual int GetHeight() = 0;
+ virtual EImageFormat ImageFormat() = 0;
+ virtual bool BIsAnimating() = 0;
+
+ // Ref counting
+ virtual int GetRefCount() = 0;
+ virtual int AddRef() = 0;
+ virtual int Release() = 0;
+
+ virtual const char *GetJSTypeName() { return "IImageSource"; }
+
+#ifdef DBGFLAG_VALIDATE
+ virtual void Validate( CValidator &validator, const tchar *pchName ) = 0;
+#endif
+protected:
+
+ friend class CImageResourceManager;
+};
+
+
+//
+// main interface to load images for display in the ui
+//
+const int k_ResizeNone = -1;
+class IUIImageManager
+{
+public:
+
+ // load image data from a URL (file://blah, http://blah/bob.tga, etc), pchDefaultResourceURL may be null, and is what will be used while the real resource is loaded
+ // if it is set. As such it must be a local file. bPrioritizeLoad will make your request jump to the head of the queue if it is an image over HTTP, use sparingly!
+ // nResizeWidth and nResizeHeight do nothing if -1, if one is set and the other -1 the image is resized before being made into a texture, but aspect ratio is maintained
+ // with the specified dimension at the set size, if both are set the image will be stretched if needed.
+ virtual IImageSource *LoadImageFromURL( const IUIPanel *pPanel, const char *pchDefaultResourceURL, const char *pchResourceURL, bool bPrioritizeLoad, EImageFormat imgFormatOut, int32 nResizeWidth = k_ResizeNone, int32 nResizeHeight = k_ResizeNone, bool bAllowAnimation = true ) = 0;
+
+ // load image data from image file (png/jpg/tga) bytes you already have in memory, pchDefaultResourceURL may be null, and is what will be used while the real resource is loaded
+ // if it is set. As such it must be a local file.
+ virtual IImageSource *LoadImageFileFromMemory( const IUIPanel *pPanel, const char *pchResourceURLDefault, const CUtlBuffer &bufFile, int nResizeWidth = panorama::k_ResizeNone, int nResizeHeight = panorama::k_ResizeNone, bool bAllowAnimation = true ) = 0;
+
+ // load image data from RGBA bytes you already have in memory, pchDefaultResourceURL may be null, and is what will be used while the real resource is loaded
+ // if it is set. As such it must be a local file.
+ virtual IImageSource *LoadImageFromMemory( const IUIPanel *pPanel, const char *pchDefaultResourceURL, const CUtlBuffer &bufData, int nWide, int nTall, EImageFormat imgFormatIn = k_EImageFormatR8G8B8A8, int nResizeWidth = k_ResizeNone, int nResizeHeight = k_ResizeNone, bool bAllowAnimation = true ) = 0;
+
+ virtual CUtlString GetPchImageSourcePath( IImageSource *pImageSource ) = 0;
+
+ virtual void ReloadChangedImage( IImageSource *pImageToReload ) = 0;
+
+ virtual void ReloadChangedFile( const char *pchFile ) = 0;
+
+#ifdef DBGFLAG_VALIDATE
+ virtual void Validate( CValidator &validator, const tchar *pchName ) = 0;
+#endif
+};
+
+DECLARE_PANEL_EVENT1( ImageLoaded, IImageSource * );
+DECLARE_PANEL_EVENT1( ImageFailedLoad, IImageSource * );
+
+} // namespace panorama
+
+#endif // IIMAGESOURCE_H \ No newline at end of file