diff options
Diffstat (limited to 'archive/hgehelp/hgegui.cpp')
-rw-r--r-- | archive/hgehelp/hgegui.cpp | 397 |
1 files changed, 0 insertions, 397 deletions
diff --git a/archive/hgehelp/hgegui.cpp b/archive/hgehelp/hgegui.cpp deleted file mode 100644 index 2faf24c..0000000 --- a/archive/hgehelp/hgegui.cpp +++ /dev/null @@ -1,397 +0,0 @@ -/* -** Haaf's Game Engine 1.7 -** Copyright (C) 2003-2007, Relish Games -** hge.relishgames.com -** -** hgeGUI helper class implementation -*/ - - -#include "hgegui.h" - - -HGE *hgeGUI::hge=0; -HGE *hgeGUIObject::hge=0; - - -hgeGUI::hgeGUI() -{ - hge=hgeCreate(HGE_VERSION); - - ctrls=0; - ctrlLock=0; - ctrlFocus=0; - ctrlOver=0; - navmode=HGEGUI_NONAVKEYS; - bLPressed=bLReleased=false; - bRPressed=bRReleased=false; - nWheel=0; - mx=my=0.0f; - nEnterLeave=0; - sprCursor=0; -} - -hgeGUI::~hgeGUI() -{ - hgeGUIObject *ctrl=ctrls, *nextctrl; - - while(ctrl) - { - nextctrl=ctrl->next; - delete ctrl; - ctrl=nextctrl; - } - - hge->Release(); -} - -void hgeGUI::AddCtrl(hgeGUIObject *ctrl) -{ - hgeGUIObject *last=ctrls; - - ctrl->gui=this; - - if(!ctrls) - { - ctrls=ctrl; - ctrl->prev=0; - ctrl->next=0; - } - else - { - while(last->next) last=last->next; - last->next=ctrl; - ctrl->prev=last; - ctrl->next=0; - } -} - -void hgeGUI::DelCtrl(int id) -{ - hgeGUIObject *ctrl=ctrls; - - while(ctrl) - { - if(ctrl->id == id) - { - if(ctrl->prev) ctrl->prev->next = ctrl->next; - else ctrls = ctrl->next; - if(ctrl->next) ctrl->next->prev = ctrl->prev; - delete ctrl; - return; - } - ctrl=ctrl->next; - } -} - -hgeGUIObject* hgeGUI::GetCtrl(int id) const -{ - hgeGUIObject *ctrl=ctrls; - - while(ctrl) - { - if(ctrl->id == id) return ctrl; - ctrl=ctrl->next; - } - - return NULL; -} - -void hgeGUI::MoveCtrl(int id, float x, float y) -{ - hgeGUIObject *ctrl=GetCtrl(id); - ctrl->rect.x2=x + (ctrl->rect.x2 - ctrl->rect.x1); - ctrl->rect.y2=y + (ctrl->rect.y2 - ctrl->rect.y1); - ctrl->rect.x1=x; - ctrl->rect.y1=y; -} - -void hgeGUI::ShowCtrl(int id, bool bVisible) -{ - GetCtrl(id)->bVisible=bVisible; -} - -void hgeGUI::EnableCtrl(int id, bool bEnabled) -{ - GetCtrl(id)->bEnabled=bEnabled; -} - -void hgeGUI::SetNavMode(int mode) -{ - navmode=mode; -} - -void hgeGUI::SetCursor(hgeSprite *spr) -{ - sprCursor=spr; -} - - -void hgeGUI::SetColor(DWORD color) -{ - hgeGUIObject *ctrl=ctrls; - - while(ctrl) - { - ctrl->SetColor(color); - ctrl=ctrl->next; - } -} - - -void hgeGUI::Reset() -{ - hgeGUIObject *ctrl=ctrls; - - while(ctrl) - { - ctrl->Reset(); - ctrl=ctrl->next; - } - - ctrlLock=0; - ctrlOver=0; - ctrlFocus=0; -} - - -void hgeGUI::Move(float dx, float dy) -{ - hgeGUIObject *ctrl=ctrls; - - while(ctrl) - { - ctrl->rect.x1 += dx; - ctrl->rect.y1 += dy; - ctrl->rect.x2 += dx; - ctrl->rect.y2 += dy; - - ctrl=ctrl->next; - } -} - - -void hgeGUI::SetFocus(int id) -{ - hgeGUIObject *ctrlNewFocus=GetCtrl(id); - - if(ctrlNewFocus==ctrlFocus) return; - if(!ctrlNewFocus) - { - if(ctrlFocus) ctrlFocus->Focus(false); - ctrlFocus=0; - } - else if(!ctrlNewFocus->bStatic && ctrlNewFocus->bVisible && ctrlNewFocus->bEnabled) - { - if(ctrlFocus) ctrlFocus->Focus(false); - if(ctrlNewFocus) ctrlNewFocus->Focus(true); - ctrlFocus=ctrlNewFocus; - } -} - -int hgeGUI::GetFocus() const -{ - if(ctrlFocus) return ctrlFocus->id; - else return 0; -} - -void hgeGUI::Enter() -{ - hgeGUIObject *ctrl=ctrls; - - while(ctrl) - { - ctrl->Enter(); - ctrl=ctrl->next; - } - - nEnterLeave=2; -} - -void hgeGUI::Leave() -{ - hgeGUIObject *ctrl=ctrls; - - while(ctrl) - { - ctrl->Leave(); - ctrl=ctrl->next; - } - - ctrlFocus=0; - ctrlOver=0; - ctrlLock=0; - nEnterLeave=1; -} - -void hgeGUI::Render() -{ - hgeGUIObject *ctrl=ctrls; - - while(ctrl) - { - if(ctrl->bVisible) ctrl->Render(); - ctrl=ctrl->next; - } - - if(hge->Input_IsMouseOver() && sprCursor) sprCursor->Render(mx,my); -} - -int hgeGUI::Update(float dt) -{ - bool bDone; - int key; - hgeGUIObject *ctrl; - -// Update the mouse variables - - hge->Input_GetMousePos(&mx, &my); - bLPressed = hge->Input_KeyDown(HGEK_LBUTTON); - bLReleased = hge->Input_KeyUp(HGEK_LBUTTON); - bRPressed = hge->Input_KeyDown(HGEK_RBUTTON); - bRReleased = hge->Input_KeyUp(HGEK_RBUTTON); - nWheel=hge->Input_GetMouseWheel(); - -// Update all controls - - ctrl=ctrls; - while(ctrl) - { - ctrl->Update(dt); - ctrl=ctrl->next; - } - -// Handle Enter/Leave - - if(nEnterLeave) - { - ctrl=ctrls; bDone=true; - while(ctrl) - { - if(!ctrl->IsDone()) { bDone=false; break; } - ctrl=ctrl->next; - } - if(!bDone) return 0; - else - { - if(nEnterLeave==1) return -1; - else nEnterLeave=0; - } - } - -// Handle keys - - key=hge->Input_GetKey(); - if(((navmode & HGEGUI_LEFTRIGHT) && key==HGEK_LEFT) || - ((navmode & HGEGUI_UPDOWN) && key==HGEK_UP)) - { - ctrl=ctrlFocus; - if(!ctrl) - { - ctrl=ctrls; - if(!ctrl) return 0; - } - do { - ctrl=ctrl->prev; - if(!ctrl && ((navmode & HGEGUI_CYCLED) || !ctrlFocus)) - { - ctrl=ctrls; - while(ctrl->next) ctrl=ctrl->next; - } - if(!ctrl || ctrl==ctrlFocus) break; - } while(ctrl->bStatic==true || ctrl->bVisible==false || ctrl->bEnabled==false); - - if(ctrl && ctrl!=ctrlFocus) - { - if(ctrlFocus) ctrlFocus->Focus(false); - if(ctrl) ctrl->Focus(true); - ctrlFocus=ctrl; - } - } - else if(((navmode & HGEGUI_LEFTRIGHT) && key==HGEK_RIGHT) || - ((navmode & HGEGUI_UPDOWN) && key==HGEK_DOWN)) - { - ctrl=ctrlFocus; - if(!ctrl) - { - ctrl=ctrls; - if(!ctrl) return 0; - while(ctrl->next) ctrl=ctrl->next; - } - do { - ctrl=ctrl->next; - if(!ctrl && ((navmode & HGEGUI_CYCLED) || !ctrlFocus)) ctrl=ctrls; - if(!ctrl || ctrl==ctrlFocus) break; - } while(ctrl->bStatic==true || ctrl->bVisible==false || ctrl->bEnabled==false); - - if(ctrl && ctrl!=ctrlFocus) - { - if(ctrlFocus) ctrlFocus->Focus(false); - if(ctrl) ctrl->Focus(true); - ctrlFocus=ctrl; - } - } - else if(ctrlFocus && key && key!=HGEK_LBUTTON && key!=HGEK_RBUTTON) - { - if(ctrlFocus->KeyClick(key, hge->Input_GetChar())) return ctrlFocus->id; - } - -// Handle mouse - - bool bLDown = hge->Input_GetKeyState(HGEK_LBUTTON); - bool bRDown = hge->Input_GetKeyState(HGEK_RBUTTON); - - if(ctrlLock) - { - ctrl=ctrlLock; - if(!bLDown && !bRDown) ctrlLock=0; - if(ProcessCtrl(ctrl)) return ctrl->id; - } - else - { - // Find last (topmost) control - - ctrl=ctrls; - if(ctrl) - while(ctrl->next) ctrl=ctrl->next; - - while(ctrl) - { - if(ctrl->rect.TestPoint(mx,my) && ctrl->bEnabled) - { - if(ctrlOver != ctrl) - { - if(ctrlOver) ctrlOver->MouseOver(false); - ctrl->MouseOver(true); - ctrlOver=ctrl; - } - - if(ProcessCtrl(ctrl)) return ctrl->id; - else return 0; - } - ctrl=ctrl->prev; - } - - if(ctrlOver) {ctrlOver->MouseOver(false); ctrlOver=0;} - - } - - return 0; -} - -bool hgeGUI::ProcessCtrl(hgeGUIObject *ctrl) -{ - bool bResult=false; - - if(bLPressed) { ctrlLock=ctrl;SetFocus(ctrl->id);bResult=bResult || ctrl->MouseLButton(true); } - if(bRPressed) { ctrlLock=ctrl;SetFocus(ctrl->id);bResult=bResult || ctrl->MouseRButton(true); } - if(bLReleased) { bResult=bResult || ctrl->MouseLButton(false); } - if(bRReleased) { bResult=bResult || ctrl->MouseRButton(false); } - if(nWheel) { bResult=bResult || ctrl->MouseWheel(nWheel); } - bResult=bResult || ctrl->MouseMove(mx-ctrl->rect.x1,my-ctrl->rect.y1); - - return bResult; -} - - - |