418 lines
13 KiB
C++
418 lines
13 KiB
C++
![]() |
/*
|
||
|
** Command & Conquer Generals Zero Hour(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 : Autorun *
|
||
|
* *
|
||
|
* File Name : AUTORUN.CPP *
|
||
|
* *
|
||
|
* Programmers: Maria del Mar McCready Legg *
|
||
|
* *
|
||
|
* Start Date : September 5, 1997 *
|
||
|
* *
|
||
|
* Last Update : October 2, 2000 [MML] *
|
||
|
* *
|
||
|
*----------------------------------------------------------------------------*
|
||
|
* Functions: *
|
||
|
* DrawButton::DrawButton *
|
||
|
* DrawButton::Is_Mouse_In_Region *
|
||
|
* DrawButton::Return_Bitmap *
|
||
|
* DrawButton::Return_Area *
|
||
|
* DrawButton::Set_Stretched_Width *
|
||
|
* DrawButton::Set_Stretched_Height *
|
||
|
*----------------------------------------------------------------------------*/
|
||
|
|
||
|
|
||
|
#define STRICT
|
||
|
#include <windows.h>
|
||
|
#include <windowsx.h>
|
||
|
#include "autorun.h"
|
||
|
#include "drawbutton.h"
|
||
|
#include "locale_api.h"
|
||
|
#include "wnd_file.h"
|
||
|
|
||
|
|
||
|
|
||
|
#include "leanAndMeanAutorun.h"
|
||
|
|
||
|
#ifndef LEAN_AND_MEAN
|
||
|
///////GAMEENGINE HEADERS////////////
|
||
|
#include "Common/UnicodeString.h"
|
||
|
#include "Common/SubsystemInterface.h"
|
||
|
#include "GameClient/GameText.h"
|
||
|
#endif
|
||
|
|
||
|
|
||
|
//*****************************************************************************
|
||
|
// DrawButton::DrawButton -- Constructor for custom "Button" type.
|
||
|
//
|
||
|
// This custom button is drawn by the dialog, and uses the WM_MOUSEMOVE,
|
||
|
// WM_LBUTTONUP, and WM_LBUTTONDOWN to trigger actions.
|
||
|
//
|
||
|
// INPUT: int id -- button id handle
|
||
|
// int x -- x position
|
||
|
// int y -- y position
|
||
|
// int w -- width of button
|
||
|
// int h -- height of button
|
||
|
// char *normal -- name of normal button bitmap
|
||
|
// char *pressed -- name of pressed button bitmap
|
||
|
// char *focus -- name of focus button bitmap
|
||
|
//
|
||
|
// OUTPUT: none.
|
||
|
//
|
||
|
// WARNINGS: No keyboard/mouse/paint handling built in. Do manually.
|
||
|
//
|
||
|
// HISTORY:
|
||
|
// 07/15/1996 MML : Created.
|
||
|
//=============================================================================
|
||
|
|
||
|
DrawButton::DrawButton ( int id, RECT button_rect, char *normal, char *focus, char *pressed, const char * string, TTFontClass *fontptr )
|
||
|
{
|
||
|
Id = id;
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Set default rectangle settings.
|
||
|
//--------------------------------------------------------------------------
|
||
|
rect.left = button_rect.left;
|
||
|
rect.top = button_rect.top;
|
||
|
rect.right = button_rect.left + button_rect.right;
|
||
|
rect.bottom = button_rect.top + button_rect.bottom;
|
||
|
|
||
|
MyRect.X = button_rect.left;
|
||
|
MyRect.Y = button_rect.top;
|
||
|
MyRect.Width = rect.right - rect.left;
|
||
|
MyRect.Height = rect.bottom - rect.top;
|
||
|
|
||
|
TextRect.X = button_rect.left;
|
||
|
TextRect.Y = button_rect.top;
|
||
|
TextRect.Width = rect.right - rect.left;
|
||
|
TextRect.Height = rect.bottom - rect.top;
|
||
|
|
||
|
StretchedWidth = rect.right - rect.left;
|
||
|
StretchedHeight = rect.bottom - rect.top;
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Set the string variables.
|
||
|
//--------------------------------------------------------------------------
|
||
|
memset( String, '\0', MAX_PATH );
|
||
|
// if ( string != NULL ) {
|
||
|
// wcscpy( String, Locale_GetString( string_num, String ));
|
||
|
|
||
|
|
||
|
#ifdef LEAN_AND_MEAN
|
||
|
#else
|
||
|
UnicodeString tempString = TheGameText->fetch(string);
|
||
|
wcscpy(String, tempString.str());
|
||
|
#endif
|
||
|
// }
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Set the font pointer.
|
||
|
//--------------------------------------------------------------------------
|
||
|
MyFontPtr = NULL;
|
||
|
|
||
|
if ( fontptr != NULL ) {
|
||
|
MyFontPtr = fontptr;
|
||
|
}
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Set Button Backgrounds.
|
||
|
//--------------------------------------------------------------------------
|
||
|
_tcscpy( NormalBitmap, normal );
|
||
|
_tcscpy( PressedBitmap, pressed );
|
||
|
_tcscpy( FocusBitmap, focus );
|
||
|
|
||
|
if( NormalBitmap[0] != '\0' ) {
|
||
|
UseBitmaps = true; // determines how to draw button.
|
||
|
}
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Start in normal mode.
|
||
|
//--------------------------------------------------------------------------
|
||
|
ButtonState = NORMAL_STATE;
|
||
|
|
||
|
Msg( __LINE__, TEXT(__FILE__), TEXT(" rect = [%d,%d,%d,%d]"), rect.left, rect.top, rect.right, rect.bottom );
|
||
|
Msg( __LINE__, TEXT(__FILE__), TEXT(" MyRect = [%d,%d,%d,%d]"), MyRect.X, MyRect.Y, MyRect.Width, MyRect.Height );
|
||
|
}
|
||
|
|
||
|
DrawButton::DrawButton ( int id, RECT button_rect, char *normal, char *focus, char *pressed, const wchar_t *string, TTFontClass *fontptr )
|
||
|
{
|
||
|
Id = id;
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Set default rectangle settings.
|
||
|
//--------------------------------------------------------------------------
|
||
|
rect.left = button_rect.left;
|
||
|
rect.top = button_rect.top;
|
||
|
rect.right = button_rect.left + button_rect.right;
|
||
|
rect.bottom = button_rect.top + button_rect.bottom;
|
||
|
|
||
|
MyRect.X = button_rect.left;
|
||
|
MyRect.Y = button_rect.top;
|
||
|
MyRect.Width = rect.right - rect.left;
|
||
|
MyRect.Height = rect.bottom - rect.top;
|
||
|
|
||
|
TextRect.X = button_rect.left;
|
||
|
TextRect.Y = button_rect.top;
|
||
|
TextRect.Width = rect.right - rect.left;
|
||
|
TextRect.Height = rect.bottom - rect.top;
|
||
|
|
||
|
StretchedWidth = rect.right - rect.left;
|
||
|
StretchedHeight = rect.bottom - rect.top;
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Set the string variables.
|
||
|
//--------------------------------------------------------------------------
|
||
|
memset( String, '\0', MAX_PATH );
|
||
|
if ( string != NULL ) {
|
||
|
wcscpy( String, string );
|
||
|
}
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Set the font pointer.
|
||
|
//--------------------------------------------------------------------------
|
||
|
MyFontPtr = NULL;
|
||
|
|
||
|
if ( fontptr != NULL ) {
|
||
|
MyFontPtr = fontptr;
|
||
|
}
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Set Button Backgrounds.
|
||
|
//--------------------------------------------------------------------------
|
||
|
_tcscpy( NormalBitmap, normal );
|
||
|
_tcscpy( PressedBitmap, pressed );
|
||
|
_tcscpy( FocusBitmap, focus );
|
||
|
|
||
|
if( NormalBitmap[0] != '\0' ) {
|
||
|
UseBitmaps = true; // determines how to draw button.
|
||
|
}
|
||
|
|
||
|
//--------------------------------------------------------------------------
|
||
|
// Start in normal mode.
|
||
|
//--------------------------------------------------------------------------
|
||
|
ButtonState = NORMAL_STATE;
|
||
|
|
||
|
Msg( __LINE__, TEXT(__FILE__), TEXT(" rect = [%d,%d,%d,%d]"), rect.left, rect.top, rect.right, rect.bottom );
|
||
|
Msg( __LINE__, TEXT(__FILE__), TEXT(" MyRect = [%d,%d,%d,%d]"), MyRect.X, MyRect.Y, MyRect.Width, MyRect.Height );
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
// DrawButton::Draw_Text -- Check if mouse values are in button area.
|
||
|
//
|
||
|
// INPUT: HDC hDC -- DC to paint to.
|
||
|
//
|
||
|
// OUTPUT: none.
|
||
|
//
|
||
|
// WARNINGS:
|
||
|
//
|
||
|
// HISTORY:
|
||
|
// 01/18/2002 MML : Created.
|
||
|
//=============================================================================
|
||
|
|
||
|
void DrawButton::Draw_Text ( HDC hDC )
|
||
|
{
|
||
|
RECT outline_rect;
|
||
|
Rect rect;
|
||
|
|
||
|
if( hDC == NULL ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Return_Area( &outline_rect );
|
||
|
Return_Text_Area( &rect );
|
||
|
|
||
|
/*
|
||
|
** This function was combining the pixel color with the background,
|
||
|
** so it never looked correct.
|
||
|
*/
|
||
|
// SetTextColor( hDC, RGB( 0, 240, 0 ));
|
||
|
// DrawFocusRect( hDC, &dst_rect );
|
||
|
|
||
|
if ( Get_State() == DrawButton::PRESSED_STATE ) {
|
||
|
MyFontPtr->Print(
|
||
|
hDC,
|
||
|
String,
|
||
|
rect,
|
||
|
TEXT_PRESSED_COLOR,
|
||
|
TEXT_PRESSED_SHADOW_COLOR,
|
||
|
TPF_BUTTON,
|
||
|
TPF_SHADOW );
|
||
|
|
||
|
} else if ( Get_State() == DrawButton::FOCUS_STATE ) {
|
||
|
MyFontPtr->Print(
|
||
|
hDC,
|
||
|
String,
|
||
|
rect,
|
||
|
TEXT_FOCUSED_COLOR,
|
||
|
TEXT_FOCUSED_SHADOW_COLOR,
|
||
|
TPF_BUTTON,
|
||
|
TPF_SHADOW );
|
||
|
|
||
|
} else {
|
||
|
MyFontPtr->Print(
|
||
|
hDC,
|
||
|
String,
|
||
|
rect,
|
||
|
TEXT_NORMAL_COLOR,
|
||
|
TEXT_NORMAL_SHADOW_COLOR,
|
||
|
TPF_BUTTON,
|
||
|
TPF_SHADOW );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//*****************************************************************************
|
||
|
// DrawButton::Is_Mouse_In_Region -- Check if mouse values are in button area.
|
||
|
//
|
||
|
// INPUT: int mouse_x -- mouse x position
|
||
|
// int mouse_y -- mouse y position
|
||
|
//
|
||
|
// OUTPUT: bool -- true of false.
|
||
|
//
|
||
|
// WARNINGS: No keyboard/mouse/paint handling built in. Do manually.
|
||
|
// Note: width is shortened below to accomodate actual bitmap area.
|
||
|
//
|
||
|
// HISTORY:
|
||
|
// 07/15/1996 MML : Created.
|
||
|
//=============================================================================
|
||
|
|
||
|
bool DrawButton::Is_Mouse_In_Region ( int mouse_x, int mouse_y )
|
||
|
{
|
||
|
if ( mouse_x < 0 || mouse_y < 0 ) {
|
||
|
return( false );
|
||
|
}
|
||
|
|
||
|
if (( mouse_x >= rect.left ) &&
|
||
|
( mouse_y >= rect.top ) &&
|
||
|
( mouse_x <= rect.left + StretchedWidth ) &&
|
||
|
( mouse_y <= rect.top + StretchedHeight )) {
|
||
|
return ( TRUE );
|
||
|
}
|
||
|
return ( FALSE );
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
// DrawButton::Return_Bitmap
|
||
|
//
|
||
|
// Return name of correct bitmap based on state of button.
|
||
|
//
|
||
|
// INPUT: none.
|
||
|
//
|
||
|
// OUTPUT: char *bitmap -- name of bitmap file.
|
||
|
//
|
||
|
// WARNINGS: No keyboard/mouse/paint handling built in. Do manually.
|
||
|
//
|
||
|
// HISTORY:
|
||
|
// 07/15/1996 MML : Created.
|
||
|
//=============================================================================
|
||
|
|
||
|
char *DrawButton::Return_Bitmap ( void )
|
||
|
{
|
||
|
if ( ButtonState == PRESSED_STATE ) {
|
||
|
return ( PressedBitmap );
|
||
|
} else if ( ButtonState == FOCUS_STATE ) {
|
||
|
return ( FocusBitmap );
|
||
|
} else {
|
||
|
return ( NormalBitmap );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
// DrawButton::Return_Area -- Return x, y and width and height of button.
|
||
|
//
|
||
|
// INPUT: RECT area -- holds the x,y,width,height information.
|
||
|
//
|
||
|
// OUTPUT: none.
|
||
|
//
|
||
|
// WARNINGS: No keyboard/mouse/paint handling built in. Do manually.
|
||
|
//
|
||
|
// HISTORY:
|
||
|
// 07/15/1996 MML : Created.
|
||
|
//=============================================================================
|
||
|
|
||
|
void DrawButton::Return_Area ( RECT *area )
|
||
|
{
|
||
|
area->left = rect.left;
|
||
|
area->top = rect.top;
|
||
|
area->right = rect.left + StretchedWidth;
|
||
|
area->bottom = rect.top + StretchedHeight;
|
||
|
}
|
||
|
|
||
|
void DrawButton::Return_Area ( Rect *area )
|
||
|
{
|
||
|
area->X = MyRect.X;
|
||
|
area->Y = MyRect.Y;
|
||
|
area->Width = MyRect.Width;
|
||
|
area->Height = MyRect.Height;
|
||
|
}
|
||
|
|
||
|
void DrawButton::Return_Text_Area ( Rect *area )
|
||
|
{
|
||
|
area->X = TextRect.X;
|
||
|
area->Y = TextRect.Y;
|
||
|
area->Width = TextRect.Width;
|
||
|
area->Height = TextRect.Height;
|
||
|
}
|
||
|
|
||
|
|
||
|
//*****************************************************************************
|
||
|
// DrawButton::Set_Stretched_Width -- Set draw width of button.
|
||
|
//
|
||
|
// INPUT: int value -- destination width size.
|
||
|
//
|
||
|
//OUTPUT: none.
|
||
|
//
|
||
|
// WARNINGS: none.
|
||
|
//
|
||
|
// HISTORY: 08/12/1996 MML : Created.
|
||
|
//=============================================================================
|
||
|
|
||
|
int DrawButton::Set_Stretched_Width ( int value )
|
||
|
{
|
||
|
int nWidth = StretchedWidth;
|
||
|
|
||
|
StretchedWidth = value;
|
||
|
return ( nWidth );
|
||
|
}
|
||
|
|
||
|
//*****************************************************************************
|
||
|
// DrawButton::Set_Stretched_Height -- Set draw height of button.
|
||
|
//
|
||
|
// INPUT: int value -- destination height size.
|
||
|
//
|
||
|
// OUTPUT: none.
|
||
|
//
|
||
|
// WARNINGS: none.
|
||
|
//
|
||
|
// HISTORY: 08/12/1996 MML : Created.
|
||
|
//=============================================================================
|
||
|
|
||
|
int DrawButton::Set_Stretched_Height ( int value )
|
||
|
{
|
||
|
int nHeight = StretchedHeight;
|
||
|
|
||
|
StretchedHeight = value;
|
||
|
return( nHeight );
|
||
|
}
|
||
|
|
||
|
|