CnC_Remastered_Collection/REDALERT/STATBTN.CPP

271 lines
15 KiB
C++

//
// Copyright 2020 Electronic Arts Inc.
//
// TiberianDawn.DLL and RedAlert.dll and corresponding source code 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.
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
// in the hope that it will be useful, but with permitted additional restrictions
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
// distributed with this program. You should have received a copy of the
// GNU General Public License along with permitted additional restrictions
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
/* $Header: /CounterStrike/STATBTN.CPP 1 3/03/97 10:25a Joe_bostic $ */
/***********************************************************************************************
*** 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 : Command & Conquer *
* *
* File Name : TEXTBTN.CPP *
* *
* Programmer : Joe L. Bostic *
* *
* Start Date : 01/15/95 *
* *
* Last Update : January 19, 1995 [JLB] *
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* StaticButtonClass::Draw_Background -- Draws the background to the text button. *
* StaticButtonClass::Draw_Me -- Draws the text buttons as indicated. *
* StaticButtonClass::Draw_Text -- This draws the text for the text button. *
* StaticButtonClass::Set_Text -- Assigns a new text string to this button. *
* StaticButtonClass::StaticButtonClass -- Normal constructor for a text button. *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#include "function.h"
#include "statbtn.h"
/***********************************************************************************************
* StaticButtonClass::StaticButtonClass -- Normal constructor for a text button. *
* *
* This is the constructor for text buttons if the text is provided as a string pointer. *
* *
* INPUT: id -- The ID number to assign to this button. *
* *
* text -- Pointer to the text string to display on top of the button. *
* *
* x,y -- Pixel coordinate of button's upper left corner. *
* *
* w,h -- Dimensions of the button. If these are not filled in (or with -1), then *
* the dimensions are adapted to fit the text assigned to the button. *
* *
* style -- The print style for the text in the button. These are the TPF_ flags *
* used by Fancy_Text_Print(). *
* *
* OUTPUT: none *
* *
* WARNINGS: Call Set_Text & Set_Style, & init X,Y,Width,Height,ID before using this button. *
* *
* HISTORY: 01/15/1995 JLB : Created. *
*=============================================================================================*/
StaticButtonClass::StaticButtonClass(unsigned , char const * text, TextPrintType style, int x, int y, int w, int h) :
GadgetClass(x, y, w, h, FlagEnum(0)),
String(NULL),
PrintFlags(style)
{
/*
** Make a duplicate of the string to display.
*/
Set_Text(text, false);
if (w == -1 || h == -1) {
//PG_TO_FIX
//Fancy_Text_Print(TXT_NONE, 0, 0, TBLACK, TBLACK, PrintFlags);
if (w == -1) {
Width = String_Pixel_Width(String);
}
if (h == -1) {
Height = FontHeight;
}
}
}
/***********************************************************************************************
* StaticButtonClass::StaticButtonClass -- Default constructor for a text button. *
* *
* INPUT: none *
* *
* OUTPUT: none *
* *
* WARNINGS: none *
* *
* HISTORY: 01/15/1995 JLB : Created. *
*=============================================================================================*/
StaticButtonClass::StaticButtonClass(void) :
GadgetClass(0, 0, 0, 0, FlagEnum(0)),
String(NULL),
PrintFlags(TPF_8POINT)
{
}
/***********************************************************************************************
* StaticButtonClass::Draw_Me -- Draws the text buttons as indicated. *
* *
* This routine will draw the text button. *
* *
* INPUT: forced -- If the button is to be redrawn regardless of the state of the redraw *
* flag, then this parameter will be true. *
* *
* OUTPUT: bool; Was the button redrawn? *
* *
* WARNINGS: none *
* *
* HISTORY: *
* 01/03/1995 MML : Created. *
* 01/16/1995 JLB : Modified *
*=============================================================================================*/
int StaticButtonClass::Draw_Me(int forced)
{
if (GadgetClass::Draw_Me(forced)) {
/*
** Hide the mouse.
*/
if (LogicPage == &SeenBuff) {
Conditional_Hide_Mouse(X, Y, X+Width-1, Y+Height-1);
}
/*
** Draw the background and overlaying text. These are virtual function
** calls so that they may be overridden.
*/
Draw_Background();
Draw_Text(String);
/*
** Display the mouse.
*/
if (LogicPage == &SeenBuff) {
Conditional_Show_Mouse();
}
return(true);
}
return(false);
}
/***********************************************************************************************
* StaticButtonClass::Set_Text -- Assigns a new text string to this button. *
* *
* Use this routine to assign a new text string to this button. By using this function it *
* is possible to dynamically change the button's text. An example of this would be an *
* on/off button that every time it is clicked, the text toggles between "on" and "off". *
* *
* INPUT: text -- Pointer to the text string to assign to this button. *
* *
* OUTPUT: none *
* *
* WARNINGS: The text is NOT copied to this button. You must make sure that the text *
* remains valid throughout the lifetime of this text button. *
* *
* HISTORY: *
* 01/16/1995 JLB : Created. *
*=============================================================================================*/
void StaticButtonClass::Set_Text(char const * text, bool resize)
{
if (String != NULL) {
delete [] String;
String = NULL;
}
if (text != NULL) {
String = new char[strlen(text)+1];
if (String != NULL) {
strcpy(String, text);
}
}
Flag_To_Redraw();
if (resize && String != NULL) {
Draw_Background();
//PG_TO_FIX
//Fancy_Text_Print(TXT_NONE, 0, 0, TBLACK, TBLACK, PrintFlags);
Width = String_Pixel_Width(String);
Height = FontHeight + FontYSpacing;
Background = Buffer();
}
}
/***********************************************************************************************
* StaticButtonClass::Draw_Background -- Draws the background to the text button. *
* *
* This localizes the drawing of the background for the text button. By overriding this *
* function you can give a different background to the button. The text is drawn using *
* a different routine. The mouse is hidden, if necessary, before this routine is called. *
* *
* INPUT: none *
* *
* OUTPUT: none *
* *
* WARNINGS: none *
* *
* HISTORY: *
* 01/19/1995 JLB : Created. *
*=============================================================================================*/
void StaticButtonClass::Draw_Background(void)
{
/*
** If the background hasn't been recorded from the buffer, then
** allocate and record the background image now.
*/
if (Background.Get_Buffer() == NULL && Width > 0 && Height > 0) {
new(&Background) Buffer(Width*Height);
if (Background.Get_Buffer() != NULL) {
LogicPage->To_Buffer(X, Y, Width, Height, Background, Background.Get_Size());
}
}
/*
** If there is a background image present, then restore it to the buffer now.
*/
if (Background.Get_Buffer() != NULL && LogicPage->Lock()) {
Buffer_To_Page(X, Y, Width, Height, Background, *LogicPage);
LogicPage->Unlock();
}
}
/***********************************************************************************************
* StaticButtonClass::Draw_Text -- This draws the text for the text button. *
* *
* This routine draws the text for the text button. You can override this routine if you *
* wish different text rendering styles or colors. The background has already been drawn *
* by the time this function is called. The mouse is hidden, if necessary, as well. *
* *
* INPUT: text -- Pointer to the text string to print over the button. *
* *
* OUTPUT: none *
* *
* WARNINGS: none *
* *
* HISTORY: *
* 01/19/1995 JLB : Created. *
*=============================================================================================*/
void StaticButtonClass::Draw_Text(char const * text)
{
/*
** Display the text.
*/
if (String != NULL) {
int x = X;
if (PrintFlags & TPF_CENTER) {
x += Width/2;
}
if (PrintFlags & TPF_RIGHT) {
x += Width-1;
}
Fancy_Text_Print(text, x, Y, GadgetClass::Get_Color_Scheme(), TBLACK, PrintFlags);
}
}