游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1734|回复: 3

高手都来帮忙看看,这样的GUI接口,能不能通用?

[复制链接]

6

主题

48

帖子

48

积分

注册会员

Rank: 2

积分
48
发表于 2007-3-9 18:34:00 | 显示全部楼层 |阅读模式
typedef UINT GUIPARAM;
typedef INT GUIRESULT;



//        Input interface~~

//#define USE_RENDER_TARGET


class IGuiTexture
{
public:
        virtual ~IGuiTexture(){} = 0;
        virtual int GetWidth() = 0;
        virtual int GetHeight() = 0;
};
#ifdef USE_RENDER_TARGET
class IGuiTarget
{
public:
        virtual ~IGuiTarget(){} = 0;
        virtual int GetWidth() = 0;
        virtual int GetHeight() = 0;
        IGuiTexture * GetTexture() = 0;
};
#endif
class IGuiFont
{
public:
        virtual ~IGuiFont(){} = 0;
        virtual int GetTextLength( const char * pszText, int nLength = 0 ) = 0;
        virtual int GetTextHeight( const char * pszText, int nLength = 0 ) = 0;
        virtual void GetTextSize( const char * pszText, int nLength, LPSIZE * lpSize ) = 0;
};

class IGuiRenderer
{
public:
        virtual ~IGuiRenderer(){} = 0;
        virtual void RenderTexture( IGuiTexture * pTexture, int x, int y, DWORD dwColor = 0xffffffff ) = 0;
        virtual void RenderText( int x, int y, const char * pszText, int nLength = 0, DWORD dwColor = 0xffffffff, IGuiFont * pFont = NULL ) = 0;
        virtual IGuiFont * GetDefaultFont() = 0;
#ifdef USE_RENDER_TARGET
        virtual IGuiTarget * CreateTarget( int nWidth, int nHeight, bool bzbuffer ) = 0;
        virtual void ReleaseTarget( IGuiTarget * pTarget ) = 0;
        virtual void SetRenderTarget( IGuiTarget * pTarget ) = 0;
#endif
};

class IGuiInputDevice
{
public:
        virtual ~IGuiInputDevice(){} = 0;
        virtual void GetMousePos( POINT * pPtMouse ) = 0;
        virtual bool IsKeyDown( UINT nKey ) = 0;
};

class IGuiResourceManager
{
public:
        virtual IGuiFont * GetFont( const char * pszName ) = 0;
        virtual IGuiTexture * GetTexture( const char * pszName ) = 0;
};

//        output interface~~~~


enum gui_event
{
        GE_MOUSEMOVE,
        GE_MOUSEWHEEL,
        GE_KEYDOWN,
        GE_KEYUP,
};

enum gui_keyvalue
{

};

class IGuiObject;

typedef VOID (*XGUI_EVENT)( IGuiObject * pObject, GUIPARAM nParam1, GUIPARAM nParam2 );
typedef GUIRESULT (*XGUI_CALLBACK)( IGuiObject * pObject, GUIPARAM nParam1, GUIPARAM nParam2 );

class IGuiPropertys
{
public:
        virtual int GetInteger( const char * pszName, int Def = 0 ) = 0;
        virtual float GetFloat( const char * pszName, float Def = 0.0f ) = 0;
        virtual const char * GetString( const char * pszName, const char * Def = "" ) = 0;
        virtual XGUI_EVENT GetEvent( const char * pszName ) = 0;
        virtual XGUI_CALLBACK GetCallBack( const char * pszName ) = 0;
};

class IGuiObject
{
public:
        virtual ~IGuiObject(){} = 0;
        virtual BOOL Create( IGuiPropertys * pProperty ) = 0;
        virtual VOID Release() = 0;
        virtual void Render() = 0;
        virtual void Update() = 0;
        virtual void OnInputEvent( UINT nEvent, GUIPARAM nParam1, GUIPARAM nParam2 ) = 0;
        virtual BOOL AddChild( IGuiObject * pChild ) = 0;
        virtual VOID RemoveChild( IGuiObject * pChild ) = 0;

        virtual const char * GetName() = 0;
};


class IGuiObjectFactory
{
public:
        virtual IGuiObject * NewGuiObject() = 0;
        virtual void DeleteGuiObject( IGuiObject * pObject ) = 0;
};

class IGuiRoot
{
public:
        virtual ~IGuiRoot(){} = 0;
        virtual void Render() = 0;
        virtual void Update() = 0;
        virtual void OnInputEvent( UINT nEvent, GUIPARAM nParam1, GUIPARAM nParam2 ) = 0;

        virtual IGuiObject * GetGuiObject( const char * pszPath ) = 0;
        virtual void AddGuiObject( const char * pszPath, IGuiObject * pObject ) = 0;
        virtual void RemoveGuiObject( const char * pszPath ) = 0;

        virtual IGuiRenderer * GetRenderer() = 0;
        virtual IGuiInputDevice * GetInputDevice() = 0;
        virtual IGuiResourceManager * GetResourceManager() = 0;

        //virtual IGuiObject * NewGuiObject( const char * pszName ) = 0;
        //virtual VOID DeleteGuiObject( IGuiObject * pObject ) = 0;
};


//typedef IGame * (*FN_QueryInterface)();
typedef IGuiRoot * (*FN_QueryRoot)( IGuiRenderer * pRenderer, IGuiInputDevice * pInputDevice, IGuiResourceManager * pResourceManager );
typedef void        (*FN_ReleaseRoot)( IGuiRoot * pRoot );
typedef IGuiObjectFactory * (*FN_QueryFactory)( const char * pszName, IGuiRoot * pRoot );
typedef void        (*FN_ReleaseFactory)( IGuiObjectFactory * pFactory );

#define XGUI_API extern "C" __declspec(dllexport)


38

主题

275

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2007-3-10 09:07:00 | 显示全部楼层

Re:高手都来帮忙看看,这样的GUI接口,能不能通用?

纹理,字体,渲染器,输入器,资源管理器都有了,应该可以吧?(是不是少了对于鼠标按键事件的捕捉?)貌似对于事件的传递LZ采用的是函数回调的方式,其实个人觉得采用Qt的signal and slot或者java gui里的listener机制会更好。

38

主题

275

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2007-3-10 09:09:00 | 显示全部楼层

Re:高手都来帮忙看看,这样的GUI接口,能不能通用?

by the way,我也正在考虑写个通用点的独立于引擎的GUI库,不过时间不够。期待LZ的GUI库。能放出来被大家用最好

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-3-13 11:28:00 | 显示全部楼层

Re:高手都来帮忙看看,这样的GUI接口,能不能通用?

接口初步都有了
但是实际操作起来
我不觉得api有什么值得跨的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 16:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表