257 lines
7.3 KiB
C++
257 lines
7.3 KiB
C++
|
/*
|
||
|
** Command & Conquer Renegade(tm)
|
||
|
** Copyright 2025 Electronic Arts Inc.
|
||
|
**
|
||
|
** This program is free software: you can redistribute it and/or modify
|
||
|
** it under the terms of the GNU General Public License as published by
|
||
|
** the Free Software Foundation, either version 3 of the License, or
|
||
|
** (at your option) any later version.
|
||
|
**
|
||
|
** This program is distributed in the hope that it will be useful,
|
||
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
** GNU General Public License for more details.
|
||
|
**
|
||
|
** You should have received a copy of the GNU General Public License
|
||
|
** along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
/***********************************************************************************************
|
||
|
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
|
||
|
***********************************************************************************************
|
||
|
* *
|
||
|
* Project Name : Combat *
|
||
|
* *
|
||
|
* $Archive:: /Commando/Code/wwui/dialogtext.cpp $*
|
||
|
* *
|
||
|
* Author:: Patrick Smith *
|
||
|
* *
|
||
|
* $Modtime:: 11/08/01 12:14a $*
|
||
|
* *
|
||
|
* $Revision:: 19 $*
|
||
|
* *
|
||
|
*---------------------------------------------------------------------------------------------*
|
||
|
* Functions: *
|
||
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
|
||
|
#include "dialogtext.h"
|
||
|
#include "stylemgr.h"
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// DialogButtonClass
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
DialogTextClass::DialogTextClass (void) :
|
||
|
IsTitle (false)
|
||
|
{
|
||
|
Set_Wants_Focus (false);
|
||
|
|
||
|
//
|
||
|
// Set the font for the text renderer
|
||
|
//
|
||
|
StyleMgrClass::Assign_Font (&TextRenderer, StyleMgrClass::FONT_CONTROLS);
|
||
|
StyleMgrClass::Configure_Renderer (&ControlRenderer);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Render
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
void
|
||
|
DialogTextClass::Render (void)
|
||
|
{
|
||
|
if (Style & WS_VISIBLE) {
|
||
|
|
||
|
//
|
||
|
// Update the text renderer (if necessary)
|
||
|
//
|
||
|
if (IsDirty) {
|
||
|
Create_Text_Renderer ();
|
||
|
}
|
||
|
|
||
|
if (IsTitle) {
|
||
|
GlowRenderer.Render ();
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Render the control
|
||
|
//
|
||
|
TextRenderer.Render ();
|
||
|
ControlRenderer.Render ();
|
||
|
|
||
|
DialogControlClass::Render ();
|
||
|
}
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Create_Text_Renderer
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
void
|
||
|
DialogTextClass::Create_Text_Renderer (void)
|
||
|
{
|
||
|
TextRenderer.Reset ();
|
||
|
ControlRenderer.Reset ();
|
||
|
|
||
|
if ((Style & SS_TYPEMASK) == SS_ETCHEDHORZ) {
|
||
|
|
||
|
//
|
||
|
// Determine which color to draw the outline in
|
||
|
//
|
||
|
int color = StyleMgrClass::Get_Line_Color ();
|
||
|
if (IsEnabled == false) {
|
||
|
color = StyleMgrClass::Get_Disabled_Line_Color ();
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Draw the line
|
||
|
//
|
||
|
ControlRenderer.Add_Line (Rect.Upper_Left (), Rect.Upper_Right (), 1.0F, color);
|
||
|
|
||
|
} else if ((Style & SS_TYPEMASK) == SS_BLACKFRAME) {
|
||
|
|
||
|
//
|
||
|
// Determine which color to draw the outline in
|
||
|
//
|
||
|
int color = StyleMgrClass::Get_Line_Color ();
|
||
|
if (IsEnabled == false) {
|
||
|
color = StyleMgrClass::Get_Disabled_Line_Color ();
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Draw the outline
|
||
|
//
|
||
|
ControlRenderer.Add_Outline (Rect, 1.0F, color);
|
||
|
|
||
|
} else {
|
||
|
|
||
|
//
|
||
|
// Determine how to justify the text
|
||
|
//
|
||
|
StyleMgrClass::JUSTIFICATION justification = StyleMgrClass::LEFT_JUSTIFY;
|
||
|
if ((Style & 0xF) == SS_RIGHT) {
|
||
|
justification = StyleMgrClass::RIGHT_JUSTIFY;
|
||
|
} else if ((Style & 0xF) == SS_CENTER) {
|
||
|
justification = StyleMgrClass::CENTER_JUSTIFY;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Determine if the text should be centered vertically
|
||
|
//
|
||
|
bool is_vcentered = ((Style & SS_CENTERIMAGE) == SS_CENTERIMAGE);
|
||
|
|
||
|
//
|
||
|
// Draw the text
|
||
|
//
|
||
|
if (IsTitle) {
|
||
|
|
||
|
//
|
||
|
// Render the title text using a glow
|
||
|
//
|
||
|
GlowRenderer.Reset_Polys ();
|
||
|
StyleMgrClass::Render_Glow (Title, &GlowRenderer, Rect, 5, 5, RGB_TO_INT32 (14, 0, 0), StyleMgrClass::CENTER_JUSTIFY);
|
||
|
StyleMgrClass::Render_Text (Title, &TextRenderer, RGB_TO_INT32 (255, 255, 36), 0, Rect, false, false, StyleMgrClass::CENTER_JUSTIFY, true);
|
||
|
|
||
|
} else if ((Style & 0x0F) == SS_LEFTNOWORDWRAP) {
|
||
|
|
||
|
//
|
||
|
// Render the text using the default color scheme or the overriden
|
||
|
// color scheme
|
||
|
//
|
||
|
if (IsTextColorOverridden == false) {
|
||
|
StyleMgrClass::Render_Text (Title, &TextRenderer, Rect, true, true,
|
||
|
justification, IsEnabled, is_vcentered);
|
||
|
} else {
|
||
|
StyleMgrClass::Render_Text (Title, &TextRenderer, VRGB_TO_INT32 (TextColor),
|
||
|
RGB_TO_INT32 (0, 0, 0), Rect, true, true, justification, is_vcentered);
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
|
||
|
//
|
||
|
// Render the text using the default color scheme or the overriden
|
||
|
// color scheme
|
||
|
//
|
||
|
if (IsTextColorOverridden == false) {
|
||
|
StyleMgrClass::Render_Wrapped_Text_Ex (Title, &TextRenderer, Rect, true, is_vcentered, IsEnabled, justification);
|
||
|
} else {
|
||
|
StyleMgrClass::Render_Wrapped_Text_Ex (Title, &TextRenderer, VRGB_TO_INT32 (TextColor),
|
||
|
RGB_TO_INT32 (0, 0, 0), Rect, true, is_vcentered, justification);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// On_Create
|
||
|
//
|
||
|
////////////////////////////////////////////////////////////////
|
||
|
void
|
||
|
DialogTextClass::On_Create (void)
|
||
|
{
|
||
|
if (Title.Get_Length () >= 2) {
|
||
|
|
||
|
//
|
||
|
// Does this string have special formatting?
|
||
|
//
|
||
|
if (Title[0] == L'%' && Title[1] == L't') {
|
||
|
|
||
|
//
|
||
|
// Strip off the preceding format specifier
|
||
|
//
|
||
|
WideStringClass text = Title.Peek_Buffer () + 2;
|
||
|
Title = text;
|
||
|
|
||
|
//
|
||
|
// Keep in mind that this is a "Title"
|
||
|
//
|
||
|
IsTitle = true;
|
||
|
StyleMgrClass::Assign_Font (&TextRenderer, StyleMgrClass::FONT_TITLE);
|
||
|
StyleMgrClass::Assign_Font (&GlowRenderer, StyleMgrClass::FONT_TITLE);
|
||
|
|
||
|
GlowRenderer.Build_Sentence (Title);
|
||
|
|
||
|
} else if (Title[0] == L'%' && Title[1] == L'h') {
|
||
|
|
||
|
//
|
||
|
// Support a "header" style font
|
||
|
//
|
||
|
StyleMgrClass::Assign_Font (&TextRenderer, StyleMgrClass::FONT_LG_CONTROLS);
|
||
|
|
||
|
//
|
||
|
// Strip off the preceding format specifier
|
||
|
//
|
||
|
WideStringClass text = Title.Peek_Buffer () + 2;
|
||
|
Title = text;
|
||
|
|
||
|
} else if (Title[0] == L'%' && Title[1] == L's') {
|
||
|
|
||
|
//
|
||
|
// Support a "small" style font
|
||
|
//
|
||
|
StyleMgrClass::Assign_Font (&TextRenderer, StyleMgrClass::FONT_TOOLTIPS);
|
||
|
|
||
|
//
|
||
|
// Strip off the preceding format specifier
|
||
|
//
|
||
|
WideStringClass text = Title.Peek_Buffer () + 2;
|
||
|
Title = text;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return ;
|
||
|
}
|