CDTestFramework, OPCODE, ICE redistributed under the ZLib License, with permission of Pierre Terdiman
Added Bullet SAP/MultiSAP support by Erwin Coumans (BulletSAPCompleteBoxPruningTest.*) AABB tree broadphase by Nathanael Presson (btDbvt.*, DbvtTest.*)
This commit is contained in:
309
Extras/CDTestFramework/AntTweakBar/src/TwMgr.h
Normal file
309
Extras/CDTestFramework/AntTweakBar/src/TwMgr.h
Normal file
@@ -0,0 +1,309 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// @file TwMgr.h
|
||||
// @brief Tweak bar manager.
|
||||
// @author Philippe Decaudin - http://www.antisphere.com
|
||||
// @license This file is part of the AntTweakBar library.
|
||||
// Copyright <20> 2005, 2006 Philippe Decaudin.
|
||||
// For conditions of distribution and use, see License.txt
|
||||
//
|
||||
// notes: Private header
|
||||
// TAB=4
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
#if !defined ANT_TW_MGR_INCLUDED
|
||||
#define ANT_TW_MGR_INCLUDED
|
||||
|
||||
#include <AntTweakBar.h>
|
||||
#define ANT_CALL TW_CALL
|
||||
|
||||
#include "TwColors.h"
|
||||
#include "TwFonts.h"
|
||||
#include "TwGraph.h"
|
||||
#include "AntPerfTimer.h"
|
||||
|
||||
|
||||
//#define BENCH // uncomment to activate bench
|
||||
|
||||
#ifdef BENCH
|
||||
# define PERF(cmd) cmd
|
||||
#else // BENCH
|
||||
# define PERF(cmd)
|
||||
#endif // BENCH
|
||||
|
||||
const int NB_ROTO_CURSORS = 12;
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// API unexposed by AntTweakBar.h
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// bar states -> use TwDefine instead
|
||||
typedef enum ETwState
|
||||
{
|
||||
TW_STATE_SHOWN = 1,
|
||||
TW_STATE_ICONIFIED = 2,
|
||||
TW_STATE_HIDDEN = 3,
|
||||
TW_STATE_ERROR = 0
|
||||
} TwState;
|
||||
/*ANT_TWEAK_BAR_API*/ int ANT_CALL TwSetBarState(TwBar *bar, TwState state);
|
||||
/*ANT_TWEAK_BAR_API*/ TwState ANT_CALL TwGetBarState(const TwBar *bar);
|
||||
// var states -> use TwDefine instead: show/hide/iconify implemented only as string commands
|
||||
//ANT_TWEAK_BAR_API int ANT_CALL TwSetVarState(TwBar *bar, const char *name, TwState state);
|
||||
//ANT_TWEAK_BAR_API TwState ANT_CALL TwGetVarState(const TwBar *bar, const char *name);
|
||||
|
||||
typedef void (ANT_CALL *TwStructExtInitCallback)(void *structExtValue, void *clientData);
|
||||
typedef void (ANT_CALL *TwCopyVarFromExtCallback)(void *structValue, const void *structExtValue, unsigned int structExtMemberIndex, void *clientData);
|
||||
typedef void (ANT_CALL *TwCopyVarToExtCallback)(const void *structValue, void *structExtValue, unsigned int structExtMemberIndex, void *clientData);
|
||||
/*ANT_TWEAK_BAR_API*/ TwType ANT_CALL TwDefineStructExt(const char *name, const TwStructMember *structExtMembers, unsigned int nbExtMembers, size_t structSize, size_t structExtSize, TwStructExtInitCallback structExtInitCallback, TwCopyVarFromExtCallback copyVarFromExtCallback, TwCopyVarToExtCallback copyVarToExtCallback, TwSummaryCallback summaryCallback, void *clientData);
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// AntTweakBar Manager
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
struct CTwMgr
|
||||
{
|
||||
ETwGraphAPI m_GraphAPI;
|
||||
void * m_Device;
|
||||
class ITwGraph * m_Graph;
|
||||
int m_WndWidth;
|
||||
int m_WndHeight;
|
||||
const CTexFont * m_CurrentFont;
|
||||
|
||||
std::vector<TwBar*> m_Bars;
|
||||
std::vector<int> m_Order;
|
||||
|
||||
std::vector<bool> m_MinOccupied;
|
||||
void Minimize(TwBar *_Bar);
|
||||
void Maximize(TwBar *_Bar);
|
||||
void Hide(TwBar *_Bar);
|
||||
void Unhide(TwBar *_Bar);
|
||||
void SetFont(const CTexFont *_Font, bool _ResizeBars);
|
||||
int m_LastMouseX;
|
||||
int m_LastMouseY;
|
||||
int m_LastMouseWheelPos;
|
||||
|
||||
std::string m_Help;
|
||||
TwBar * m_HelpBar;
|
||||
float m_LastHelpUpdateTime;
|
||||
void UpdateHelpBar();
|
||||
bool m_HelpBarNotUpToDate;
|
||||
bool m_HelpBarUpdateNow;
|
||||
void * m_KeyPressedTextObj;
|
||||
bool m_KeyPressedBuildText;
|
||||
std::string m_KeyPressedStr;
|
||||
float m_KeyPressedTime;
|
||||
void * m_InfoTextObj;
|
||||
bool m_InfoBuildText;
|
||||
int m_BarInitColorHue;
|
||||
int FindBar(const char *_Name) const;
|
||||
int HasAttrib(const char *_Attrib, bool *_HasValue) const;
|
||||
int SetAttrib(int _AttribID, const char *_Value);
|
||||
void SetLastError(const char *_StaticErrorMesssage); // _StaticErrorMesssage must be a static string
|
||||
const char * GetLastError(); // returns a static string describing the error, and set LastError to NULL
|
||||
const char * CheckLastError() const; // returns the LastError, but does not set it to NULL
|
||||
void SetCurrentDbgParams(const char *file, int line);
|
||||
TwBar * m_PopupBar;
|
||||
CTwMgr(ETwGraphAPI _GraphAPI, void *_Device);
|
||||
~CTwMgr();
|
||||
|
||||
struct CStructMember
|
||||
{
|
||||
std::string m_Name;
|
||||
std::string m_Label;
|
||||
TwType m_Type;
|
||||
size_t m_Offset;
|
||||
std::string m_DefString;
|
||||
size_t m_Size;
|
||||
std::string m_Help;
|
||||
};
|
||||
struct CStruct
|
||||
{
|
||||
std::string m_Name;
|
||||
std::vector<CStructMember> m_Members;
|
||||
size_t m_Size;
|
||||
TwSummaryCallback m_SummaryCallback;
|
||||
void * m_SummaryClientData;
|
||||
std::string m_Help;
|
||||
bool m_IsExt;
|
||||
size_t m_ClientStructSize;
|
||||
TwStructExtInitCallback m_StructExtInitCallback;
|
||||
TwCopyVarFromExtCallback m_CopyVarFromExtCallback;
|
||||
TwCopyVarToExtCallback m_CopyVarToExtCallback;
|
||||
void * m_ExtClientData;
|
||||
CStruct() : m_IsExt(false), m_StructExtInitCallback(NULL), m_CopyVarFromExtCallback(NULL), m_CopyVarToExtCallback(NULL), m_ExtClientData(NULL) {}
|
||||
static void ANT_CALL DefaultSummary(char *_SummaryString, size_t _SummaryMaxLength, const void *_Value, void *_ClientData);
|
||||
static void * s_PassProxyAsClientData;
|
||||
};
|
||||
std::vector<CStruct> m_Structs;
|
||||
|
||||
// followings are used for TwAddVarCB( ... StructType ... )
|
||||
struct CStructProxy
|
||||
{
|
||||
TwType m_Type;
|
||||
void * m_StructData;
|
||||
bool m_DeleteStructData;
|
||||
void * m_StructExtData;
|
||||
TwSetVarCallback m_StructSetCallback;
|
||||
TwGetVarCallback m_StructGetCallback;
|
||||
void * m_StructClientData;
|
||||
CStructProxy();
|
||||
~CStructProxy();
|
||||
};
|
||||
struct CMemberProxy
|
||||
{
|
||||
CStructProxy * m_StructProxy;
|
||||
int m_MemberIndex;
|
||||
struct CTwVar * m_Var;
|
||||
struct CTwVarGroup * m_VarParent;
|
||||
CTwBar * m_Bar;
|
||||
CMemberProxy();
|
||||
~CMemberProxy();
|
||||
static void ANT_CALL SetCB(const void *_Value, void *_ClientData);
|
||||
static void ANT_CALL GetCB(void *_Value, void *_ClientData);
|
||||
};
|
||||
std::list<CStructProxy> m_StructProxies; // elements should not move
|
||||
std::list<CMemberProxy> m_MemberProxies; // elements should not move
|
||||
|
||||
struct CEnum
|
||||
{
|
||||
std::string m_Name;
|
||||
typedef std::map<unsigned int, std::string> CEntries;
|
||||
CEntries m_Entries;
|
||||
};
|
||||
std::vector<CEnum> m_Enums;
|
||||
|
||||
TwType m_TypeColor32;
|
||||
TwType m_TypeColor3F;
|
||||
TwType m_TypeColor4F;
|
||||
|
||||
PerfTimer m_Timer;
|
||||
double m_LastMousePressedTime;
|
||||
TwMouseButtonID m_LastMousePressedButtonID;
|
||||
int m_LastMousePressedPosition[2];
|
||||
double m_RepeatMousePressedDelay;
|
||||
double m_RepeatMousePressedPeriod;
|
||||
bool m_CanRepeatMousePressed;
|
||||
bool m_IsRepeatingMousePressed;
|
||||
|
||||
#if defined(ANT_WINDOWS)
|
||||
typedef HCURSOR CCursor;
|
||||
#elif defined(ANT_UNIX)
|
||||
typedef Cursor CCursor;
|
||||
CCursor PixmapCursor(int _CurIdx);
|
||||
Display * m_CurrentXDisplay;
|
||||
Window m_CurrentXWindow;
|
||||
#endif // defined(ANT_UNIX)
|
||||
bool m_CursorsCreated;
|
||||
void CreateCursors();
|
||||
void FreeCursors();
|
||||
void SetCursor(CCursor _Cursor);
|
||||
CCursor m_CursorArrow;
|
||||
CCursor m_CursorMove;
|
||||
CCursor m_CursorWE;
|
||||
CCursor m_CursorNS;
|
||||
CCursor m_CursorTopLeft;
|
||||
CCursor m_CursorTopRight;
|
||||
CCursor m_CursorBottomLeft;
|
||||
CCursor m_CursorBottomRight;
|
||||
CCursor m_CursorHelp;
|
||||
CCursor m_CursorHand;
|
||||
CCursor m_CursorCross;
|
||||
CCursor m_CursorUpArrow;
|
||||
CCursor m_CursorNo;
|
||||
CCursor m_RotoCursors[NB_ROTO_CURSORS];
|
||||
CCursor m_CursorCenter;
|
||||
CCursor m_CursorPoint;
|
||||
|
||||
protected:
|
||||
int m_NbMinimizedBars;
|
||||
const char * m_LastError;
|
||||
const char * m_CurrentDbgFile;
|
||||
int m_CurrentDbgLine;
|
||||
};
|
||||
|
||||
extern CTwMgr *g_TwMgr;
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Extra functions and twtypes
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
bool TwGetKeyCode(int *_Code, int *_Modif, const char *_String);
|
||||
bool TwGetKeyString(std::string *_String, int _Code, int _Modif);
|
||||
|
||||
const ETwType TW_TYPE_SHORTCUT = ETwType(0xfff1);
|
||||
const ETwType TW_TYPE_HELP_GRP = ETwType(0xfff2);
|
||||
const ETwType TW_TYPE_HELP_ATOM = ETwType(0xfff3);
|
||||
const ETwType TW_TYPE_HELP_HEADER = ETwType(0xfff4);
|
||||
const ETwType TW_TYPE_HELP_STRUCT = ETwType(0xfff5);
|
||||
const ETwType TW_TYPE_BUTTON = ETwType(0xfff6);
|
||||
const ETwType TW_TYPE_STRUCT_BASE = ETwType(0x10000000);
|
||||
const ETwType TW_TYPE_ENUM_BASE = ETwType(0x20000000);
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Color struct ext
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
struct CColorExt
|
||||
{
|
||||
int R, G, B;
|
||||
int H, L, S;
|
||||
int A;
|
||||
bool m_HLS, m_HasAlpha, m_OGL;
|
||||
bool m_CanHaveAlpha;
|
||||
bool m_IsColorF;
|
||||
unsigned int m_PrevConvertedColor;
|
||||
CTwMgr::CStructProxy*m_StructProxy;
|
||||
void RGB2HLS();
|
||||
void HLS2RGB();
|
||||
static void ANT_CALL InitColor32CB(void *_ExtValue, void *_ClientData);
|
||||
static void ANT_CALL InitColor3FCB(void *_ExtValue, void *_ClientData);
|
||||
static void ANT_CALL InitColor4FCB(void *_ExtValue, void *_ClientData);
|
||||
static void ANT_CALL CopyVarFromExtCB(void *_VarValue, const void *_ExtValue, unsigned int _ExtMemberIndex, void *_ClientData);
|
||||
static void ANT_CALL CopyVarToExtCB(const void *_VarValue, void *_ExtValue, unsigned int _ExtMemberIndex, void *_ClientData);
|
||||
static void ANT_CALL SummaryCB(char *_SummaryString, size_t _SummaryMaxLength, const void *_ExtValue, void *_ClientData);
|
||||
static void CreateTypes();
|
||||
};
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// CTwFPU objects set and restore the fpu precision if needed.
|
||||
// (could be usefull because DirectX changes it and AntTweakBar requires default double precision)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
struct CTwFPU
|
||||
{
|
||||
CTwFPU()
|
||||
{
|
||||
#ifdef ANT_WINDOWS
|
||||
state0 = _controlfp(0, 0);
|
||||
if( (state0&MCW_PC)==_PC_24 ) // we need at least _PC_53
|
||||
_controlfp(_PC_53, MCW_PC);
|
||||
#else
|
||||
state0 = 0;
|
||||
#endif
|
||||
}
|
||||
~CTwFPU()
|
||||
{
|
||||
#ifdef ANT_WINDOWS
|
||||
if( (state0&MCW_PC)==_PC_24 )
|
||||
_controlfp(_PC_24, MCW_PC);
|
||||
#else
|
||||
state0 = 0;
|
||||
#endif
|
||||
}
|
||||
private:
|
||||
unsigned int state0;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
#endif // !defined ANT_TW_MGR_INCLUDED
|
||||
Reference in New Issue
Block a user