diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/public/vgui/ISurfaceV30.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/public/vgui/ISurfaceV30.h')
| -rw-r--r-- | mp/src/public/vgui/ISurfaceV30.h | 375 |
1 files changed, 375 insertions, 0 deletions
diff --git a/mp/src/public/vgui/ISurfaceV30.h b/mp/src/public/vgui/ISurfaceV30.h new file mode 100644 index 00000000..ebe74601 --- /dev/null +++ b/mp/src/public/vgui/ISurfaceV30.h @@ -0,0 +1,375 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// The copyright to the contents herein is the property of Valve, L.L.C.
+// The contents may be used and/or copied only with the written permission of
+// Valve, L.L.C., or in accordance with the terms and conditions stipulated in
+// the agreement/contract under which the contents have been supplied.
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#ifndef ISURFACE_V30_H
+#define ISURFACE_V30_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <vgui/VGUI.h>
+#include <vgui/IHTML.h> // CreateHTML, PaintHTML
+#include "interface.h"
+#include "IVguiMatInfo.h"
+
+#include "appframework/IAppSystem.h"
+#include "bitmap/ImageFormat.h"
+#include "Vector2D.h" // must be before the namespace line
+
+#ifdef CreateFont
+#undef CreateFont
+#endif
+
+#ifdef PlaySound
+#undef PlaySound
+#endif
+
+class Color;
+
+namespace vgui
+{
+
+ class Image;
+ class Point;
+
+ // handles
+ typedef unsigned long HCursor;
+ typedef unsigned long HTexture;
+ typedef unsigned long HFont;
+}
+
+
+
+namespace SurfaceV30
+{
+
+ //SRC only defines
+
+
+ struct Vertex_t
+ {
+ Vertex_t() {}
+ Vertex_t( const Vector2D &pos, const Vector2D &coord = Vector2D( 0, 0 ) )
+ {
+ m_Position = pos;
+ m_TexCoord = coord;
+ }
+ void Init( const Vector2D &pos, const Vector2D &coord = Vector2D( 0, 0 ) )
+ {
+ m_Position = pos;
+ m_TexCoord = coord;
+ }
+
+ Vector2D m_Position;
+ Vector2D m_TexCoord;
+ };
+
+
+ enum FontDrawType_t
+ {
+ // Use the "additive" value from the scheme file
+ FONT_DRAW_DEFAULT = 0,
+
+ // Overrides
+ FONT_DRAW_NONADDITIVE,
+ FONT_DRAW_ADDITIVE,
+
+ FONT_DRAW_TYPE_COUNT = 2,
+ };
+
+
+ // Refactor these two
+ struct CharRenderInfo
+ {
+ // In:
+ FontDrawType_t drawType;
+ wchar_t ch;
+
+ // Out
+ bool valid;
+
+ // In/Out (true by default)
+ bool shouldclip;
+ // Text pos
+ int x, y;
+ // Top left and bottom right
+ Vertex_t verts[ 2 ];
+ int textureId;
+ int abcA;
+ int abcB;
+ int abcC;
+ int fontTall;
+ vgui::HFont currentFont;
+ };
+
+
+ struct IntRect
+ {
+ int x0;
+ int y0;
+ int x1;
+ int y1;
+ };
+
+
+ //-----------------------------------------------------------------------------
+ // Purpose: Wraps contextless windows system functions
+ //-----------------------------------------------------------------------------
+ class ISurface : public IAppSystem
+ {
+ public:
+ // call to Shutdown surface; surface can no longer be used after this is called
+ virtual void Shutdown() = 0;
+
+ // frame
+ virtual void RunFrame() = 0;
+
+ // hierarchy root
+ virtual vgui::VPANEL GetEmbeddedPanel() = 0;
+ virtual void SetEmbeddedPanel( vgui::VPANEL pPanel ) = 0;
+
+ // drawing context
+ virtual void PushMakeCurrent(vgui::VPANEL panel, bool useInsets) = 0;
+ virtual void PopMakeCurrent(vgui::VPANEL panel) = 0;
+
+ // rendering functions
+ virtual void DrawSetColor(int r, int g, int b, int a) = 0;
+ virtual void DrawSetColor(Color col) = 0;
+
+ virtual void DrawFilledRect(int x0, int y0, int x1, int y1) = 0;
+ virtual void DrawFilledRectArray( IntRect *pRects, int numRects ) = 0;
+ virtual void DrawOutlinedRect(int x0, int y0, int x1, int y1) = 0;
+
+ virtual void DrawLine(int x0, int y0, int x1, int y1) = 0;
+ virtual void DrawPolyLine(int *px, int *py, int numPoints) = 0;
+
+ virtual void DrawSetTextFont(vgui::HFont font) = 0;
+ virtual void DrawSetTextColor(int r, int g, int b, int a) = 0;
+ virtual void DrawSetTextColor(Color col) = 0;
+ virtual void DrawSetTextPos(int x, int y) = 0;
+ virtual void DrawGetTextPos(int& x,int& y) = 0;
+ virtual void DrawPrintText(const wchar_t *text, int textLen, FontDrawType_t drawType = FONT_DRAW_DEFAULT ) = 0;
+ virtual void DrawUnicodeChar(wchar_t wch, FontDrawType_t drawType = FONT_DRAW_DEFAULT ) = 0;
+
+ virtual void DrawFlushText() = 0; // flushes any buffered text (for rendering optimizations)
+ virtual vgui::IHTML *CreateHTMLWindow(vgui::IHTMLEvents *events,vgui::VPANEL context)=0;
+ virtual void PaintHTMLWindow(vgui::IHTML *htmlwin) =0;
+ virtual void DeleteHTMLWindow(vgui::IHTML *htmlwin)=0;
+
+ virtual int DrawGetTextureId( char const *filename ) = 0;
+ virtual bool DrawGetTextureFile(int id, char *filename, int maxlen ) = 0;
+ virtual void DrawSetTextureFile(int id, const char *filename, int hardwareFilter, bool forceReload) = 0;
+ virtual void DrawSetTextureRGBA(int id, const unsigned char *rgba, int wide, int tall, int hardwareFilter, bool forceReload)=0;
+ virtual void DrawSetTexture(int id) = 0;
+ virtual void DrawGetTextureSize(int id, int &wide, int &tall) = 0;
+ virtual void DrawTexturedRect(int x0, int y0, int x1, int y1) = 0;
+ virtual bool IsTextureIDValid(int id) = 0;
+
+ virtual int CreateNewTextureID( bool procedural = false ) = 0;
+#ifdef _XBOX
+ virtual void DestroyTextureID( int id ) = 0;
+ virtual bool IsCachedForRendering( int id, bool bSyncWait ) = 0;
+ virtual void CopyFrontBufferToBackBuffer() = 0;
+ virtual void UncacheUnusedMaterials() = 0;
+#endif
+
+ virtual void GetScreenSize(int &wide, int &tall) = 0;
+ virtual void SetAsTopMost(vgui::VPANEL panel, bool state) = 0;
+ virtual void BringToFront(vgui::VPANEL panel) = 0;
+ virtual void SetForegroundWindow (vgui::VPANEL panel) = 0;
+ virtual void SetPanelVisible(vgui::VPANEL panel, bool state) = 0;
+ virtual void SetMinimized(vgui::VPANEL panel, bool state) = 0;
+ virtual bool IsMinimized(vgui::VPANEL panel) = 0;
+ virtual void FlashWindow(vgui::VPANEL panel, bool state) = 0;
+ virtual void SetTitle(vgui::VPANEL panel, const wchar_t *title) = 0;
+ virtual void SetAsToolBar(vgui::VPANEL panel, bool state) = 0; // removes the window's task bar entry (for context menu's, etc.)
+
+ // windows stuff
+ virtual void CreatePopup(vgui::VPANEL panel, bool minimised, bool showTaskbarIcon = true, bool disabled = false, bool mouseInput = true , bool kbInput = true) = 0;
+ virtual void SwapBuffers(vgui::VPANEL panel) = 0;
+ virtual void Invalidate(vgui::VPANEL panel) = 0;
+ virtual void SetCursor(vgui::HCursor cursor) = 0;
+ virtual bool IsCursorVisible() = 0;
+ virtual void ApplyChanges() = 0;
+ virtual bool IsWithin(int x, int y) = 0;
+ virtual bool HasFocus() = 0;
+
+ // returns true if the surface supports minimize & maximize capabilities
+ enum SurfaceFeature_e
+ {
+ ANTIALIASED_FONTS = 1,
+ DROPSHADOW_FONTS = 2,
+ ESCAPE_KEY = 3,
+ OPENING_NEW_HTML_WINDOWS = 4,
+ FRAME_MINIMIZE_MAXIMIZE = 5,
+ OUTLINE_FONTS = 6,
+ DIRECT_HWND_RENDER = 7,
+ };
+ virtual bool SupportsFeature(SurfaceFeature_e feature) = 0;
+
+ // restricts what gets drawn to one panel and it's children
+ // currently only works in the game
+ virtual void RestrictPaintToSinglePanel(vgui::VPANEL panel) = 0;
+
+ // these two functions obselete, use IInput::SetAppModalSurface() instead
+ virtual void SetModalPanel(vgui::VPANEL ) = 0;
+ virtual vgui::VPANEL GetModalPanel() = 0;
+
+ virtual void UnlockCursor() = 0;
+ virtual void LockCursor() = 0;
+ virtual void SetTranslateExtendedKeys(bool state) = 0;
+ virtual vgui::VPANEL GetTopmostPopup() = 0;
+
+ // engine-only focus handling (replacing WM_FOCUS windows handling)
+ virtual void SetTopLevelFocus(vgui::VPANEL panel) = 0;
+
+ // fonts
+ // creates an empty handle to a vgui font. windows fonts can be add to this via SetFontGlyphSet().
+ virtual vgui::HFont CreateFont() = 0;
+
+ // adds to the font
+ enum EFontFlags
+ {
+ FONTFLAG_NONE,
+ FONTFLAG_ITALIC = 0x001,
+ FONTFLAG_UNDERLINE = 0x002,
+ FONTFLAG_STRIKEOUT = 0x004,
+ FONTFLAG_SYMBOL = 0x008,
+ FONTFLAG_ANTIALIAS = 0x010,
+ FONTFLAG_GAUSSIANBLUR = 0x020,
+ FONTFLAG_ROTARY = 0x040,
+ FONTFLAG_DROPSHADOW = 0x080,
+ FONTFLAG_ADDITIVE = 0x100,
+ FONTFLAG_OUTLINE = 0x200,
+ FONTFLAG_CUSTOM = 0x400, // custom generated font - never fall back to asian compatibility mode
+ FONTFLAG_BITMAP = 0x800, // compiled bitmap font - no fallbacks
+ };
+
+ virtual bool SetFontGlyphSet(vgui::HFont font, const char *windowsFontName, int tall, int weight, int blur, int scanlines, int flags) = 0;
+
+ // adds a custom font file (only supports true type font files (.ttf) for now)
+ virtual bool AddCustomFontFile(const char *fontName, const char *fontFileName) = 0;
+
+ // returns the details about the font
+ virtual int GetFontTall(vgui::HFont font) = 0;
+ virtual int GetFontAscent(vgui::HFont font, wchar_t wch) = 0;
+ virtual bool IsFontAdditive(vgui::HFont font) = 0;
+ virtual void GetCharABCwide(vgui::HFont font, int ch, int &a, int &b, int &c) = 0;
+ virtual int GetCharacterWidth(vgui::HFont font, int ch) = 0;
+ virtual void GetTextSize(vgui::HFont font, const wchar_t *text, int &wide, int &tall) = 0;
+
+ // notify icons?!?
+ virtual vgui::VPANEL GetNotifyPanel() = 0;
+ virtual void SetNotifyIcon(vgui::VPANEL context, vgui::HTexture icon, vgui::VPANEL panelToReceiveMessages, const char *text) = 0;
+
+ // plays a sound
+ virtual void PlaySound(const char *fileName) = 0;
+
+ //!! these functions should not be accessed directly, but only through other vgui items
+ //!! need to move these to seperate interface
+ virtual int GetPopupCount() = 0;
+ virtual vgui::VPANEL GetPopup(int index) = 0;
+ virtual bool ShouldPaintChildPanel(vgui::VPANEL childPanel) = 0;
+ virtual bool RecreateContext(vgui::VPANEL panel) = 0;
+ virtual void AddPanel(vgui::VPANEL panel) = 0;
+ virtual void ReleasePanel(vgui::VPANEL panel) = 0;
+ virtual void MovePopupToFront(vgui::VPANEL panel) = 0;
+ virtual void MovePopupToBack(vgui::VPANEL panel) = 0;
+
+ virtual void SolveTraverse(vgui::VPANEL panel, bool forceApplySchemeSettings = false) = 0;
+ virtual void PaintTraverse(vgui::VPANEL panel) = 0;
+
+ virtual void EnableMouseCapture(vgui::VPANEL panel, bool state) = 0;
+
+ // returns the size of the workspace
+ virtual void GetWorkspaceBounds(int &x, int &y, int &wide, int &tall) = 0;
+
+ // gets the absolute coordinates of the screen (in windows space)
+ virtual void GetAbsoluteWindowBounds(int &x, int &y, int &wide, int &tall) = 0;
+
+ // gets the base resolution used in proportional mode
+ virtual void GetProportionalBase( int &width, int &height ) = 0;
+
+ virtual void CalculateMouseVisible() = 0;
+ virtual bool NeedKBInput() = 0;
+
+ virtual bool HasCursorPosFunctions() = 0;
+ virtual void SurfaceGetCursorPos(int &x, int &y) = 0;
+ virtual void SurfaceSetCursorPos(int x, int y) = 0;
+
+
+ // SRC only functions!!!
+ virtual void DrawTexturedLine( const Vertex_t &a, const Vertex_t &b ) = 0;
+ virtual void DrawOutlinedCircle(int x, int y, int radius, int segments) = 0;
+ virtual void DrawTexturedPolyLine( const Vertex_t *p,int n ) = 0; // (Note: this connects the first and last points).
+ virtual void DrawTexturedSubRect( int x0, int y0, int x1, int y1, float texs0, float text0, float texs1, float text1 ) = 0;
+ virtual void DrawTexturedPolygon(int n, Vertex_t *pVertices) = 0;
+ virtual const wchar_t *GetTitle(vgui::VPANEL panel) = 0;
+ virtual bool IsCursorLocked( void ) const = 0;
+ virtual void SetWorkspaceInsets( int left, int top, int right, int bottom ) = 0;
+
+ // Lower level char drawing code, call DrawGet then pass in info to DrawRender
+ virtual bool DrawGetUnicodeCharRenderInfo( wchar_t ch, CharRenderInfo& info ) = 0;
+ virtual void DrawRenderCharFromInfo( const CharRenderInfo& info ) = 0;
+
+ // global alpha setting functions
+ // affect all subsequent draw calls - shouldn't normally be used directly, only in Panel::PaintTraverse()
+ virtual void DrawSetAlphaMultiplier( float alpha /* [0..1] */ ) = 0;
+ virtual float DrawGetAlphaMultiplier() = 0;
+
+ // web browser
+ virtual void SetAllowHTMLJavaScript( bool state ) = 0;
+
+ // video mode changing
+ virtual void OnScreenSizeChanged( int nOldWidth, int nOldHeight ) = 0;
+#if !defined( _XBOX )
+ virtual vgui::HCursor CreateCursorFromFile( char const *curOrAniFile, char const *pPathID = 0 ) = 0;
+#endif
+ // create IVguiMatInfo object ( IMaterial wrapper in VguiMatSurface, NULL in CWin32Surface )
+ virtual IVguiMatInfo *DrawGetTextureMatInfoFactory( int id ) = 0;
+
+ virtual void PaintTraverseEx(vgui::VPANEL panel, bool paintPopups = false ) = 0;
+
+ virtual float GetZPos() const = 0;
+
+ // From the Xbox
+ virtual void SetPanelForInput( vgui::VPANEL vpanel ) = 0;
+ virtual void DrawFilledRectFade( int x0, int y0, int x1, int y1, unsigned int alpha0, unsigned int alpha1, bool bHorizontal ) = 0;
+ virtual void DrawSetTextureRGBAEx(int id, const unsigned char *rgba, int wide, int tall, ImageFormat imageFormat ) = 0;
+ virtual void DrawSetTextScale(float sx, float sy) = 0;
+ virtual bool SetBitmapFontGlyphSet(vgui::HFont font, const char *windowsFontName, float scalex, float scaley, int flags) = 0;
+ // adds a bitmap font file
+ virtual bool AddBitmapFontFile(const char *fontFileName) = 0;
+ // sets a symbol for the bitmap font
+ virtual void SetBitmapFontName( const char *pName, const char *pFontFilename ) = 0;
+ // gets the bitmap font filename
+ virtual const char *GetBitmapFontName( const char *pName ) = 0;
+
+ virtual vgui::IImage *GetIconImageForFullPath( char const *pFullPath ) = 0;
+ virtual void DrawUnicodeString( const wchar_t *pwString, FontDrawType_t drawType = FONT_DRAW_DEFAULT ) = 0;
+ };
+
+} // end namespace
+
+//-----------------------------------------------------------------------------
+// FIXME: This works around using scoped interfaces w/ EXPOSE_SINGLE_INTERFACE
+//-----------------------------------------------------------------------------
+class ISurfaceV30 : public SurfaceV30::ISurface
+{
+public:
+};
+
+
+#define VGUI_SURFACE_INTERFACE_VERSION_30 "VGUI_Surface030"
+
+#endif // ISURFACE_V30_H
|