Added the widget manager the ability to change the font's color.

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@1730 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
cosmosninja 2008-04-24 07:06:09 +00:00
parent 5ac7f44802
commit cb09ff873e
23 changed files with 108 additions and 61 deletions

View File

@ -37,7 +37,7 @@ ChallengesMenu::ChallengesMenu()
const bool SHOW_TEXT = true;
widget_manager->setInitialActivationState(false);
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED, WGT_FONT_GUI );
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED, WGT_FONT_GUI, WGT_WHITE );
widget_manager->addWgt( WTOK_TITLE, 60, 10);
widget_manager->showWgtRect( WTOK_TITLE );

View File

@ -45,7 +45,7 @@ ConfigControls::ConfigControls()
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->insertColumn();
widget_manager->addWgt( WTOK_TITLE, 60, 7 );

View File

@ -86,7 +86,7 @@ ConfigDisplay::ConfigDisplay()
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->insertColumn();
widget_manager->addWgt( WTOK_TITLE, 40, 7);

View File

@ -42,7 +42,7 @@ ConfigSound::ConfigSound()
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->insertColumn();
widget_manager->addWgt(WTOK_TITLE, 40, 7);

View File

@ -70,7 +70,7 @@ CreditsMenu::CreditsMenu()
widget_manager->setInitialActivationState( true );
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", TEXT_SIZE,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->addWgt( WTOK_CREDITS, 100, 93);
widget_manager->setWgtText( WTOK_CREDITS, credits_text );

View File

@ -40,7 +40,7 @@ Difficulty::Difficulty()
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->insertColumn();
widget_manager->addWgt(WTOK_TITLE, 60, 7);

View File

@ -53,7 +53,7 @@ DisplayResConfirm::DisplayResConfirm( const bool FROM_WINDOW_ ) :
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->insertColumn();
widget_manager->addWgt( WTOK_TITLE, 70, 7);

View File

@ -36,7 +36,7 @@ FeatureUnlocked::FeatureUnlocked()
const bool SHOW_TEXT = true;
widget_manager->setInitialActivationState(false);
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED, WGT_FONT_GUI );
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED, WGT_FONT_GUI, WGT_WHITE );
widget_manager->addWgt( WTOK_TITLE, 60, 10);
widget_manager->showWgtRect( WTOK_TITLE );

View File

@ -59,7 +59,7 @@ Font::~Font()
void Font::Print(const char *text, int size,
int x, int y,
int red, int green, int blue,
const GLfloat* color,
float scale_x, float scale_y,
int left, int right, int top, int bottom, bool doShadow)
{
@ -95,11 +95,19 @@ void Font::Print(const char *text, int size,
if(doShadow)
{
m_text_out->start2f((GLfloat)x-2, (GLfloat)y-2);
glColor3ub(0, 0, 0);
glColor4ub(0, 0, 0, 100);
m_text_out->puts(text);
}
m_text_out->start2f((GLfloat)x, (GLfloat)y);
glColor3ub(red, green, blue);
if( color == NULL )
{
glColor4f(1.0f,1.0f,1.0f,1.0f);
}
else
{
glColor4fv(color);
}
m_text_out->puts(text);
m_text_out->end();

View File

@ -47,30 +47,30 @@ public:
// ----------------------------------------------
void Print( const char *text, int size,
int x, int y,
int red=255, int green=255, int blue=255,
const GLfloat* color = NULL,
float scale_x=1.0f, float scale_y=1.0f,
int left=-1, int right=-1, int top=-1, int bottom=-1,
bool doShadow=false);
void Print( std::string const &text, int size,
int x, int y,
int red=255, int green=255, int blue=255,
const GLfloat* color = NULL,
float scale_x=1.0f, float scale_y=1.0f,
int left=-1, int right=-1, int top=-1, int bottom=-1,
bool doShadow=false)
{
Print(text.c_str(), size, x, y,
red, green, blue, scale_x, scale_y, left, right, top, bottom,
color, scale_x, scale_y, left, right, top, bottom,
doShadow);
}
void PrintShadow(const char *text, int size,
int x, int y,
int red=255, int green=255, int blue=255,
const GLfloat* color = NULL,
float scale_x=1.0f, float scale_y=1.0f,
int left=-1, int right=-1, int top=-1, int bottom=-1)
{
Print(text, size, x, y,
red, green, blue, scale_x, scale_y,
color, scale_x, scale_y,
left, right, top, bottom, true);
}
};

View File

@ -42,7 +42,7 @@ GameMode::GameMode()
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->insertColumn();
widget_manager->addWgt(WTOK_TITLE, 50, 7);

View File

@ -48,7 +48,7 @@ GrandPrixSelect::GrandPrixSelect()
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->insertColumn();
widget_manager->addWgt(WTOK_TITLE, 40, 7);

View File

@ -67,7 +67,7 @@ HelpPageOne::HelpPageOne()
widget_manager->setInitialRectState( SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK );
widget_manager->setInitialTextState( SHOW_TEXT, "", TEXT_SIZE,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
/*Help header*/
widget_manager->addWgt(WTOK_MSG1, 50, 7);

View File

@ -50,7 +50,7 @@ HelpPageTwo::HelpPageTwo()
const WidgetFontSize TEXT_SIZE = WGT_FNT_SML;
widget_manager->setInitialRectState( SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK );
widget_manager->setInitialTextState( false, "", TEXT_SIZE,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->addWgt(WTOK_MSG6, 100, 8);
widget_manager->setWgtText(WTOK_MSG6,

View File

@ -71,7 +71,7 @@ PlayerControls::PlayerControls(int whichPlayer):
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->addWgt( WTOK_TITLE, 60, 7);
sprintf(m_heading, _("Choose your controls, %s"),

View File

@ -113,7 +113,7 @@ RaceGUI::RaceGUI()
#ifdef USE_WIDGET_MANAGER
const bool HIDE_TEXT = false;
widget_manager->setInitialTextState(HIDE_TEXT, "", WGT_FNT_LRG,
WGT_FONT_RACE );
WGT_FONT_RACE, WGT_WHITE );
widget_manager->addWgt( WTOK_FPS, 30, 10 );
widget_manager->addWgt( WTOK_EMPTY1, 40, 10 );
@ -367,15 +367,16 @@ void RaceGUI::drawPlayerIcons ()
y = user_config->m_height*3/4-20 - ((position-1)*(ICON_PLAYER_WIDHT+2));
// draw text
int red=255, green=255, blue=255;
GLfloat COLORS[] = {1.0f, 1.0f, 1.0f, 1.0f};
int numLaps = race_manager->getNumLaps();
if(lap>=numLaps)
{ // kart is finished, display in green
red=0; blue=0;
COLORS[1] = COLORS[2] = 0;
}
else if(lap>=0 && numLaps>1)
{
green = blue = 255-(int)((float)lap/((float)numLaps-1.0f)*255.0f);
COLORS[1] = COLORS[2] = 1.0f-(float)lap/((float)numLaps-1.0f);
}
glDisable(GL_CULL_FACE);
@ -399,12 +400,13 @@ void RaceGUI::drawPlayerIcons ()
TimeToString(timeBehind, str+1);
}
font_race->PrintShadow(str, 30, ICON_PLAYER_WIDHT+x, y+5,
red, green, blue);
COLORS);
}
if(race_manager->getRaceMode()==RaceManager::RM_FOLLOW_LEADER && i==0)
{
GLfloat const RED[] = { 1.0f, 0, 0, 1.0f};
font_race->PrintShadow(_("Leader"), 30, ICON_PLAYER_WIDHT+x, y+5,
255, 0, 0);
RED );
}
glEnable(GL_CULL_FACE);
@ -820,9 +822,11 @@ void RaceGUI::drawAllMessages(Kart* player_kart, int offset_x, int offset_y,
// Display only messages for all karts, or messages for this kart
if( msg.m_kart && msg.m_kart!=player_kart) continue;
//FIXME: instead of the next line, in msg there should be a GLfloat that acts as the colors.
GLfloat const COLORS[] = {msg.m_red/255.0f, msg.m_green/255.0f, msg.m_blue/255.0f, 255.0f};
font_race->Print( msg.m_message.c_str(), msg.m_font_size,
Font::CENTER_OF_SCREEN, y,
msg.m_red, msg.m_green, msg.m_blue,
COLORS,
ratio_x, ratio_y,
offset_x, offset_x+(int)(user_config->m_width*ratio_x));
// Add 20% of font size as space between the lines
@ -855,14 +859,12 @@ void RaceGUI::drawMusicDescription()
{
std::string s="by "+mi->getComposer();
font_race->Print( s.c_str(), 25,
Font::CENTER_OF_SCREEN, y,
255, 255, 255);
Font::CENTER_OF_SCREEN, y );
y+=20;
}
std::string s="\""+mi->getTitle()+"\"";
font_race->Print( s.c_str(), 25,
Font::CENTER_OF_SCREEN, y,
255, 255, 255);
Font::CENTER_OF_SCREEN, y );
} // drawMusicDescription
//-----------------------------------------------------------------------------
@ -890,21 +892,33 @@ void RaceGUI::drawStatusText(const float dt)
glOrtho ( 0, user_config->m_width, 0, user_config->m_height, 0, 100 ) ;
switch (world->getPhase())
{
case World::READY_PHASE: font_race->PrintShadow(_("Ready!"), 90,
Font::CENTER_OF_SCREEN,
Font::CENTER_OF_SCREEN,
230, 170, 160);
break;
case World::SET_PHASE: font_race->PrintShadow(_("Set!"), 90,
Font::CENTER_OF_SCREEN,
Font::CENTER_OF_SCREEN,
230, 230, 160);
break;
case World::GO_PHASE: font_race->PrintShadow(_("Go!"), 90,
Font::CENTER_OF_SCREEN,
Font::CENTER_OF_SCREEN,
100, 210, 100);
break;
case World::READY_PHASE:
{
GLfloat const COLORS[] = { 0.9f, 0.66f, 0.62f, 1.0f };
font_race->PrintShadow( _("Ready!"), 90,
Font::CENTER_OF_SCREEN,
Font::CENTER_OF_SCREEN,
COLORS );
}
break;
case World::SET_PHASE:
{
GLfloat const COLORS[] = { 0.9f, 0.9f, 0.62f, 1.0f };
font_race->PrintShadow( _("Set!"), 90,
Font::CENTER_OF_SCREEN,
Font::CENTER_OF_SCREEN,
COLORS );
}
break;
case World::GO_PHASE:
{
GLfloat const COLORS[] = { 0.39f, 0.82f, 0.39f, 1.0f };
font_race->PrintShadow( _("Go!"), 90,
Font::CENTER_OF_SCREEN,
Font::CENTER_OF_SCREEN,
COLORS );
}
break;
default:
break;
} // switch
@ -912,8 +926,11 @@ void RaceGUI::drawStatusText(const float dt)
for(int i = 0; i < 10; ++i)
{
if(world->m_debug_text[i] != "")
font_race->Print(world->m_debug_text[i].c_str(),
20, 20, 200 -i*20, 100, 210, 100);
{
GLfloat const COLORS[] = { 0.39f, 0.82f, 0.39f, 1.0f };
font_race->Print( world->m_debug_text[i].c_str(),
20, 20, 200 -i*20, COLORS );
}
}
if(world->isStartPhase())
{
@ -921,9 +938,10 @@ void RaceGUI::drawStatusText(const float dt)
{
if(world->getPlayerKart(i)->earlyStartPenalty())
{
font_race->PrintShadow(_("Penalty time!!"), 80,
GLfloat const COLORS[] = { 0.78f, 0.025f, 0.025f, 1.0f };
font_race->PrintShadow( _("Penalty time!!"), 80,
Font::CENTER_OF_SCREEN, 200,
200, 10, 10);
COLORS );
} // if penalty
} // for i < getNumPlayers
} // if not RACE_PHASE

View File

@ -46,7 +46,7 @@ RaceMenu::RaceMenu()
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->addWgt(WTOK_PAUSE, 30, 7);
widget_manager->setWgtText(WTOK_PAUSE, _("Paused"));

View File

@ -51,7 +51,7 @@ RaceResultsGUI::RaceResultsGUI()
const bool SHOW_TEXT = true;
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_MED,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
widget_manager->addWgt(WTOK_TITLE, 60, 7);
widget_manager->setWgtText(WTOK_TITLE, _("Result"));

View File

@ -59,7 +59,7 @@ TrackSel::TrackSel()
widget_manager->setInitialActivationState(true);
widget_manager->setInitialRectState(SHOW_RECT, WGT_AREA_ALL, WGT_TRANS_BLACK);
widget_manager->setInitialTextState(SHOW_TEXT, "", WGT_FNT_SML,
WGT_FONT_GUI );
WGT_FONT_GUI, WGT_WHITE );
for (unsigned int i = 0; i != track_manager->getTrackCount(); ++i)
{

View File

@ -383,7 +383,7 @@ void Widget::update(const float DELTA)
glScalef(m_text_scale, m_text_scale, 1.0f);
m_font->Print(m_text.substr(line_start, line_end - line_start).c_str(), m_text_size,
x_pos, y_pos - m_text_size / 2,
255, 255, 255, 1.0f, 1.0f);
m_text_color, 1.0f, 1.0f);
glScalef(1.0f/m_text_scale, 1.0f/m_text_scale, 1.0f);
}

View File

@ -149,10 +149,11 @@ class Widget
bool m_enable_texture;
GLuint m_texture;
Font *m_font;
bool m_enable_text;
std::string m_text;
WidgetFontSize m_text_size;
Font *m_font;
const GLfloat *m_text_color;
//TODO: This variable exists only to go around a bug; should be removed
//after better restructuration.

View File

@ -93,6 +93,7 @@ bool WidgetManager::addWgt
new_id.widget->m_text.assign(m_default_text);
new_id.widget->m_text_size = m_default_text_size;
new_id.widget->setFont( m_default_font );
new_id.widget->m_text_color = m_default_text_color;
new_id.widget->m_enable_scroll = m_default_enable_scroll;
new_id.widget->m_scroll_pos_x = (float)m_default_scroll_preset_x;
@ -875,13 +876,15 @@ void WidgetManager::setInitialTextState
const bool SHOW,
const std::string TEXT,
const WidgetFontSize SIZE,
const WidgetFont FONT
const WidgetFont FONT,
const GLfloat* const COLOR
)
{
m_default_show_text = SHOW;
m_default_text = TEXT;
m_default_text_size = SIZE;
m_default_font = FONT;
m_default_text_color = COLOR;
}
//-----------------------------------------------------------------------------
@ -939,9 +942,10 @@ void WidgetManager::restoreDefaultStates()
m_default_show_texture = false;
m_default_texture = 0;
m_default_show_text = false;
m_default_font = WGT_FONT_GUI;
m_default_text = "";
m_default_text_size = WGT_FNT_MED;
m_default_font = WGT_FONT_GUI;
m_default_text_color = WGT_WHITE;
m_default_enable_scroll = false;
m_default_scroll_preset_x = WGT_SCROLL_CENTER;
m_default_scroll_preset_y = WGT_SCROLL_CENTER;
@ -1174,6 +1178,18 @@ void WidgetManager::setWgtFont( const int TOKEN, const WidgetFont FONT )
}
}
//-----------------------------------------------------------------------------
void WidgetManager::setWgtTextColor( const int TOKEN, const GLfloat* const COLOR)
{
const int ID = findId(TOKEN);
if( ID != WGT_NONE ) m_widgets[ID].widget->m_text_color = COLOR;
else
{
std::cerr << "WARNING: tried to set the text color of an unnamed " <<
"widget with token " << TOKEN << '\n';
}
}
//-----------------------------------------------------------------------------
void WidgetManager::showWgtText( const int TOKEN )
{

View File

@ -107,6 +107,7 @@ class WidgetManager
std::string m_default_text;
WidgetFontSize m_default_text_size;
WidgetFont m_default_font;
const GLfloat* m_default_text_color;
bool m_default_enable_scroll;
WidgetScrollPos m_default_scroll_preset_x;
@ -253,7 +254,8 @@ public:
const bool SHOW,
const std::string TEXT,
const WidgetFontSize SIZE,
const WidgetFont FONT
const WidgetFont FONT,
const GLfloat* const COLOR
);
void setInitialScrollState
@ -294,6 +296,7 @@ public:
void setWgtBorderPercentage(const int TOKEN, const int PERCENTAGE);
void showWgtBorder(const int TOKEN);
void hideWgtBorder(const int TOKEN);
//TODO: add initial border colors, if I don't erase those functions.
void setWgtTexture(const int TOKEN, const int TEXTURE);
void showWgtTexture(const int TOKEN);
@ -301,8 +304,9 @@ public:
void setWgtText( const int TOKEN, const char* TEXT );
void setWgtText( const int TOKEN, const std::string TEXT );
void setWgtTextSize( const int TOKEN, const WidgetFontSize SIZE);
void setWgtFont( const int TOKEN, const WidgetFont FONT);
void setWgtTextSize( const int TOKEN, const WidgetFontSize SIZE );
void setWgtFont( const int TOKEN, const WidgetFont FONT );
void setWgtTextColor( const int TOKEN, const GLfloat* const COLOR );
void showWgtText( const int TOKEN );
void hideWgtText( const int TOKEN );
void reloadFonts();