271 lines
15 KiB
C++
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);
|
|
}
|
|
}
|