This commit is contained in:
parent
fcaef22819
commit
4876c7760b
8 changed files with 357 additions and 54 deletions
|
@ -46,3 +46,15 @@ eng=This is another test string with more text.
|
|||
[STR__PAULS_TEST_STRING_3]
|
||||
eng=Finally, another example containing wordage of increased length.
|
||||
|
||||
[STR__PAULS_TEST__CONTROL_TYPE]
|
||||
eng=CONTROL TYPE
|
||||
[STR__PAULS_TEST__MUSIC]
|
||||
eng=MUSIC
|
||||
[STR__PAULS_TEST__SFX]
|
||||
eng=SFX
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
16
makefile.gfx
16
makefile.gfx
|
@ -89,18 +89,12 @@ UI_GFX_OUT_DIR := $(DATA_OUT)/ui
|
|||
UI_GFX_FONT_IN := $(GRAF_DIR)/ui/font/font.anm
|
||||
|
||||
UI_GFX_NONTRANS :=
|
||||
UI_GFX_NONTRANS_IN := $(foreach FILE,$(UI_GFX_NONTRANS),$(UI_NONTRANS_DIR)/$(FILE))
|
||||
UI_GFX_NONTRANS_IN := $(foreach FILE,$(UI_GFX_NONTRANS),$(UI_GFX_DIR)/$(FILE))
|
||||
|
||||
UI_GFX_TRANS :=
|
||||
UI_GFX_TRANS_IN := $(foreach FILE,$(UI_GFX_TRANS),$(UI_TRANS_DIR)/$(FILE).bmp)
|
||||
UI_GFX_TRANS := +cross.bmp +tick.bmp
|
||||
UI_GFX_TRANS_IN := $(foreach FILE,$(UI_GFX_TRANS),$(UI_GFX_DIR)/$(FILE))
|
||||
|
||||
UI_GFX_TRANS2 :=
|
||||
UI_GFX_TRANS2_IN := $(foreach FILE,$(UI_GFX_TRANS2),$(UI_NONTRANS_DIR)/$(FILE))
|
||||
|
||||
UI_GFX_NO_ROT :=
|
||||
UI_GFX_NO_ROT_IN :=
|
||||
|
||||
UI_GFX_TEX_IN := $(UI_GFX_FONT_IN) ${UI_GFX_NONTRANS_IN} ${UI_GFX_TRANS_IN} ${UI_GFX_TRANS2_IN} ${UI_GFX_NO_ROT_IN}
|
||||
UI_GFX_TEX_IN := $(UI_GFX_FONT_IN) ${UI_GFX_NONTRANS_IN} ${UI_GFX_TRANS_IN}
|
||||
UI_GFX_TEX_OUT := $(UI_GFX_OUT_DIR)/UIGfx.Spr
|
||||
UI_GFX_REP_FILE := $(REPORT_DIR)/UIGfx.rep
|
||||
UI_GFX_HDR_FILE := $(INC_DIR)/UIGfx.h
|
||||
|
@ -111,7 +105,7 @@ cleanuigfx :
|
|||
uigfx: $(UI_GFX_TEX_IN)
|
||||
|
||||
$(UI_GFX_TEX_OUT) : $(UI_GFX_TEX_IN)
|
||||
@parkgrab -c+ -z+ $(UI_GFX_FONT_IN) ${UI_GFX_TRANS_IN} -c+ -z- ${UI_GFX_NONTRANS_IN} -c- -z- ${UI_GFX_TRANS2_IN} -r- ${UI_GFX_NO_ROT_IN} -b+ -t:31,1,1 -l:$(REPORT_DIR)/ui.lbm -o:$(UI_GFX_TEX_OUT) -k:$(UI_GFX_REP_FILE)
|
||||
@parkgrab -c+ -z+ $(UI_GFX_FONT_IN) ${UI_GFX_TRANS_IN} -c+ -z- ${UI_GFX_NONTRANS_IN} -b+ -t:31,1,1 -l:$(REPORT_DIR)/ui.lbm -o:$(UI_GFX_TEX_OUT) -k:$(UI_GFX_REP_FILE)
|
||||
@$(MV) -f $(UI_GFX_OUT_DIR)/uigfx.h $(UI_GFX_HDR_FILE)
|
||||
|
||||
GFX_DATA_OUT += $(UI_GFX_TEX_OUT)
|
||||
|
|
|
@ -80,6 +80,7 @@ void CGUIButton::think(int _frames)
|
|||
ASSERT(m_target);
|
||||
ASSERT(m_data);
|
||||
|
||||
CGUIObject::think(_frames);
|
||||
if(isSelected())
|
||||
{
|
||||
int pad;
|
||||
|
@ -89,7 +90,7 @@ void CGUIButton::think(int _frames)
|
|||
{
|
||||
int *data;
|
||||
int tmp;
|
||||
GUI_DBGMSG("*C*L*I*C*K");
|
||||
|
||||
data=m_data;
|
||||
tmp=*data;
|
||||
do
|
||||
|
|
|
@ -107,7 +107,6 @@ int CGUIGroupFrame::isSelectable()
|
|||
pGUI=pGUI->getNext();
|
||||
}
|
||||
|
||||
GUI_DBGMSG("frame is %s",selectable?"SELECTABLE":"NOT SELECTABLE");
|
||||
return selectable;
|
||||
}
|
||||
|
||||
|
@ -143,18 +142,55 @@ void CGUIControlFrame::think(int _frames)
|
|||
pGUI=pGUI->getNext();
|
||||
}
|
||||
pGUI->unselect();
|
||||
GUI_DBGMSG("unselected %d",pGUI->getId());
|
||||
|
||||
// Find next selectbale object and select it
|
||||
while(!pGUI->isSelectable())
|
||||
// Find next selectable object and select it
|
||||
do
|
||||
{
|
||||
pGUI=pGUI->getNext();
|
||||
if(!pGUI)pGUI=getChild();
|
||||
}
|
||||
while(!pGUI->isSelectable());
|
||||
pGUI->select();
|
||||
GUI_DBGMSG("selected %d",pGUI->getId());
|
||||
}
|
||||
}
|
||||
else if(pad&PAD_UP)
|
||||
{
|
||||
/////////////////////
|
||||
CGUIObject *pGUI,*prevGUI;
|
||||
|
||||
pGUI=getChild();
|
||||
prevGUI=0;
|
||||
if(pGUI)
|
||||
{
|
||||
// Get current selection and deselect it
|
||||
while(!pGUI->isSelected())
|
||||
{
|
||||
ASSERT(pGUI);
|
||||
if(pGUI->isSelectable())
|
||||
{
|
||||
prevGUI=pGUI;
|
||||
}
|
||||
pGUI=pGUI->getNext();
|
||||
}
|
||||
pGUI->unselect();
|
||||
|
||||
// Find previous selectable object and select it
|
||||
if(!prevGUI)
|
||||
{
|
||||
do
|
||||
{
|
||||
if(pGUI->isSelectable())
|
||||
{
|
||||
prevGUI=pGUI;
|
||||
}
|
||||
pGUI=pGUI->getNext();
|
||||
}
|
||||
while(pGUI);
|
||||
}
|
||||
prevGUI->select();
|
||||
}
|
||||
/////////////////////
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -26,6 +26,10 @@
|
|||
#include "locale\textdbase.h"
|
||||
#endif
|
||||
|
||||
#ifndef __GFX_SPRBANK_H__
|
||||
#include "gfx\sprbank.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* Std Lib
|
||||
------- */
|
||||
|
@ -33,6 +37,11 @@
|
|||
/* Data
|
||||
---- */
|
||||
|
||||
#ifndef __FILE_EQUATES_H__
|
||||
#include <biglump.h>
|
||||
#endif
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Tyepdefs && Defines
|
||||
------------------- */
|
||||
|
@ -60,7 +69,9 @@ void CGUITextReadout::init(CGUIObject *_parent,GUIId _id)
|
|||
CGUIObjectWithFont::init(_parent,_id);
|
||||
m_target=0;
|
||||
m_data=0;
|
||||
m_lastValue=-1;
|
||||
m_textId=TranslationDatabase::NO_STRING;
|
||||
m_textY=0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -142,10 +153,7 @@ void CGUITextReadout::recalc()
|
|||
int tmp;
|
||||
|
||||
m_lastValue=*m_target;
|
||||
m_textId=4;
|
||||
|
||||
fb=getFontBank();
|
||||
|
||||
m_textId=STR__DUMMY;
|
||||
data=m_data;
|
||||
do
|
||||
|
@ -174,5 +182,149 @@ void CGUITextReadout::recalc()
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CGUISpriteReadout::init(CGUIObject *_parent,GUIId _id)
|
||||
{
|
||||
CGUIObject::init(_parent,_id);
|
||||
m_target=0;
|
||||
m_data=0;
|
||||
m_sprites=new ("SpriteReadout:sprites") SpriteBank();
|
||||
m_sprites->load(UI_UIGFX_SPR);
|
||||
m_lastValue=-1;
|
||||
m_frame=0;
|
||||
m_x=m_y=0;
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CGUISpriteReadout::shutdown()
|
||||
{
|
||||
CGUIObject::shutdown();
|
||||
m_sprites->dump(); delete m_sprites; m_sprites=0;
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CGUISpriteReadout::setReadoutTarget(int *_target)
|
||||
{
|
||||
m_target=_target;
|
||||
recalc();
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CGUISpriteReadout::setReadoutData(SpriteReadoutData *_data)
|
||||
{
|
||||
m_data=_data;
|
||||
recalc();
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CGUISpriteReadout::render()
|
||||
{
|
||||
FontBank *fb;
|
||||
|
||||
if(!isHidden())
|
||||
{
|
||||
m_sprites->printFT4(m_frame,getParentX()+m_x,getParentY()+m_y,0,0,getOt());
|
||||
}
|
||||
CGUIObject::render();
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CGUISpriteReadout::think(int _frames)
|
||||
{
|
||||
CGUIObject::think(_frames);
|
||||
if(*m_target!=m_lastValue)
|
||||
{
|
||||
recalc();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CGUISpriteReadout::recalc()
|
||||
{
|
||||
CGUIObject::recalc();
|
||||
|
||||
if(m_data)
|
||||
{
|
||||
char *string;
|
||||
SpriteReadoutData *data;
|
||||
int tmp;
|
||||
sFrameHdr *fh;
|
||||
int x,y;
|
||||
|
||||
m_lastValue=*m_target;
|
||||
m_frame=0;
|
||||
data=m_data;
|
||||
do
|
||||
{
|
||||
if(m_lastValue==data->m_value)
|
||||
{
|
||||
m_frame=data->m_frame;
|
||||
break;
|
||||
}
|
||||
tmp=data->m_value;
|
||||
data++;
|
||||
}
|
||||
while(tmp<data->m_value);
|
||||
fh=m_sprites->getFrameHeader(m_frame);
|
||||
|
||||
#ifdef __VERSION_DEBUG__
|
||||
if(fh->W>getW()-(BORDERWIDTH*2)||
|
||||
fh->H>getH()-(BORDERHEIGHT*2))
|
||||
{
|
||||
GUI_DBGMSG("Sprite overflow in CGUISpriteReadout!");
|
||||
}
|
||||
#endif
|
||||
|
||||
m_x=getX()+(getW()-fh->W)/2;
|
||||
m_y=getY()+(getH()-fh->H)/2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*===========================================================================
|
||||
end */
|
|
@ -67,6 +67,41 @@ private:
|
|||
};
|
||||
|
||||
|
||||
class CGUISpriteReadout : public CGUIObject
|
||||
{
|
||||
public:
|
||||
typedef struct
|
||||
{
|
||||
int m_value;
|
||||
int m_frame;
|
||||
} SpriteReadoutData;
|
||||
|
||||
|
||||
virtual void init(CGUIObject *_parent,GUIId _id);
|
||||
virtual void shutdown();
|
||||
|
||||
virtual void setReadoutTarget(int *_target);
|
||||
virtual void setReadoutData(SpriteReadoutData *_data);
|
||||
|
||||
virtual void render();
|
||||
virtual void think(int _frames);
|
||||
|
||||
|
||||
protected:
|
||||
void recalc();
|
||||
|
||||
|
||||
private:
|
||||
int *m_target;
|
||||
SpriteReadoutData *m_data;
|
||||
class SpriteBank *m_sprites;
|
||||
int m_lastValue;
|
||||
int m_frame;
|
||||
int m_x,m_y;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -92,8 +92,7 @@ void CGUIObject::init(CGUIObject *_parent,GUIId _id)
|
|||
}
|
||||
else
|
||||
{
|
||||
// PKG - Need to add some code to check that only one bastard ( that is, parentless :) object
|
||||
// is ever in existance.
|
||||
// This object is a bastard :)
|
||||
GUI_DBGMSG("INFO: GUI object without parent created!");
|
||||
setOt(INITIAL_OT);
|
||||
}
|
||||
|
@ -114,22 +113,19 @@ void CGUIObject::shutdown()
|
|||
if(m_next)m_next->shutdown(); m_next=NULL;
|
||||
m_parent=NULL;
|
||||
|
||||
// Is this actually safe? Not really.. (PKG)
|
||||
// Is this actually safe? Not *really* (PKG)
|
||||
delete this;
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose: NB: The chain of render functions needs to be reversed so
|
||||
that the draworder is correct! Look at any subclasses
|
||||
render() function to see what I mean by this.. (PKG)
|
||||
um.. or does it?
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
#ifdef __USER_paul__
|
||||
int forceBorderDraw=true;
|
||||
int forceBorderDraw=false;
|
||||
#endif
|
||||
void CGUIObject::render()
|
||||
{
|
||||
|
|
|
@ -77,6 +77,11 @@
|
|||
/* Data
|
||||
---- */
|
||||
|
||||
#ifndef __SPR_UIGFX_H__
|
||||
#include <uigfx.h>
|
||||
#endif
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Tyepdefs && Defines
|
||||
------------------- */
|
||||
|
@ -105,36 +110,104 @@ unsigned int str=STR__PAULS_TEST_STRING_1;
|
|||
int w=150;
|
||||
int h=40;
|
||||
|
||||
int testValue=0;
|
||||
CGUITextReadout::TextReadoutData testReadoutData[]=
|
||||
CGUITextReadout::TextReadoutData onOffTextReadouts[]=
|
||||
{
|
||||
{ 1, STR__PAULS_TEST_STRING_1, },
|
||||
{ 2, STR__PAULS_TEST_STRING_2, },
|
||||
{ 3, STR__PAULS_TEST_STRING_3, },
|
||||
{ 0, STR__ON, },
|
||||
{ 1, STR__OFF, },
|
||||
{ 0, 0, },
|
||||
};
|
||||
int testButtonData[]=
|
||||
CGUISpriteReadout::SpriteReadoutData onOffSpriteReadouts[]=
|
||||
{
|
||||
1,2,3,
|
||||
{ 0, FRM__CROSS, },
|
||||
{ 1, FRM__TICK, },
|
||||
{ 0, 0, },
|
||||
};
|
||||
int onOffValues[]=
|
||||
{
|
||||
0,1,
|
||||
0,
|
||||
};
|
||||
int musicStatus=0;
|
||||
int sfxStatus=0;
|
||||
|
||||
|
||||
|
||||
CGUIControlFrame *baseGUIObject;
|
||||
|
||||
|
||||
void CPaulScene::init()
|
||||
{
|
||||
CGUITextBox *tb;
|
||||
CGUITextReadout *tr;
|
||||
CGUIGroupFrame *fr;
|
||||
CGUITextBox *tb;
|
||||
CGUIButton *bu;
|
||||
CGUITextReadout *tr;
|
||||
CGUISpriteReadout *sr;
|
||||
|
||||
s_fontBank.initialise(&standardFont);
|
||||
|
||||
baseGUIObject=new ("Uber GUI object") CGUIControlFrame();
|
||||
baseGUIObject->init(NULL,0);
|
||||
baseGUIObject->setObjectXYWH(32,100,512-64,120);
|
||||
baseGUIObject->init(NULL,1);
|
||||
baseGUIObject->setObjectXYWH(32,32,512-64,256-64);
|
||||
|
||||
fr=new ("frame") CGUIGroupFrame();
|
||||
fr->init(baseGUIObject,2);
|
||||
fr->setObjectXYWH(10,10,448-20,30);
|
||||
tb=new ("textbox") CGUITextBox();
|
||||
tb->init(fr,20);
|
||||
tb->setObjectXYWH(0,0,300,30);
|
||||
tb->setText(STR__PAULS_TEST__MUSIC);
|
||||
bu=new ("button") CGUIButton();
|
||||
bu->init(fr,21);
|
||||
// bu->setObjectXYWH(0,0,0,0);
|
||||
bu->setButtonTarget(&musicStatus);
|
||||
bu->setButtonData(onOffValues);
|
||||
tr=new ("textreadout") CGUITextReadout();
|
||||
tr->init(fr,22);
|
||||
tr->setObjectXYWH(300,0,128,30);
|
||||
tr->setReadoutTarget(&musicStatus);
|
||||
tr->setReadoutData(onOffTextReadouts);
|
||||
|
||||
fr=new ("frame") CGUIGroupFrame();
|
||||
fr->init(baseGUIObject,3);
|
||||
fr->setObjectXYWH(10,50,448-20,30);
|
||||
tb=new ("textbox") CGUITextBox();
|
||||
tb->init(fr,30);
|
||||
tb->setObjectXYWH(0,0,300,30);
|
||||
tb->setText(STR__PAULS_TEST__SFX);
|
||||
bu=new ("button") CGUIButton();
|
||||
bu->init(fr,31);
|
||||
// bu->setObjectXYWH(0,0,0,0);
|
||||
bu->setButtonTarget(&sfxStatus);
|
||||
bu->setButtonData(onOffValues);
|
||||
sr=new ("spritereadout") CGUISpriteReadout();
|
||||
sr->init(fr,32);
|
||||
sr->setObjectXYWH(300,0,128,30);
|
||||
sr->setReadoutTarget(&sfxStatus);
|
||||
sr->setReadoutData(onOffSpriteReadouts);
|
||||
|
||||
|
||||
|
||||
fr=new ("frame") CGUIGroupFrame();
|
||||
fr->init(baseGUIObject,3);
|
||||
fr->setObjectXYWH(10,90,448-20,30);
|
||||
tb=new ("textbox") CGUITextBox();
|
||||
tb->init(fr,30);
|
||||
tb->setObjectXYWH(0,0,300,30);
|
||||
tb->setText(STR__PAULS_TEST__SFX);
|
||||
bu=new ("button") CGUIButton();
|
||||
bu->init(fr,31);
|
||||
// bu->setObjectXYWH(0,0,0,0);
|
||||
bu->setButtonTarget(&sfxStatus);
|
||||
bu->setButtonData(onOffValues);
|
||||
sr=new ("spritereadout") CGUISpriteReadout();
|
||||
sr->init(fr,32);
|
||||
sr->setObjectXYWH(300,0,128,30);
|
||||
sr->setReadoutTarget(&sfxStatus);
|
||||
sr->setReadoutData(onOffSpriteReadouts);
|
||||
|
||||
|
||||
|
||||
/*
|
||||
tb=new ("textbox") CGUITextBox();
|
||||
tb->init(baseGUIObject,1);
|
||||
tb->setObjectXYWH(10,10,400,25);
|
||||
|
@ -158,7 +231,7 @@ void CPaulScene::init()
|
|||
tr->setObjectXYWH(10,70,400,25);
|
||||
tr->setReadoutTarget(&testValue);
|
||||
tr->setReadoutData(testReadoutData);
|
||||
|
||||
*/
|
||||
// Heh.. this'll actually work =)
|
||||
// baseGUIObject->shutdown();
|
||||
|
||||
|
@ -185,11 +258,14 @@ void CPaulScene::shutdown()
|
|||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
int showDebugLog=false;
|
||||
void CPaulScene::render()
|
||||
{
|
||||
|
||||
if(showDebugLog)
|
||||
{
|
||||
int logCount;
|
||||
int i,y,charHeight;
|
||||
|
||||
logCount=getNumberOfDbgLinesInLog();
|
||||
y=20;
|
||||
charHeight=s_fontBank.getCharHeight();
|
||||
|
@ -198,6 +274,7 @@ void CPaulScene::render()
|
|||
s_fontBank.print(20,y,getDbgLineFromLog(i));
|
||||
y+=charHeight;
|
||||
}
|
||||
}
|
||||
|
||||
baseGUIObject->render();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue