/*
** Command & Conquer Generals(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 .
*/
////////////////////////////////////////////////////////////////////////////////
// //
// (c) 2001-2003 Electronic Arts Inc. //
// //
////////////////////////////////////////////////////////////////////////////////
// FILE: W3DComboBox.cpp ///////////////////////////////////////////////////////
//-----------------------------------------------------------------------------
//
// Westwood Studios Pacific.
//
// Confidential Information
// Copyright (C) 2001 - All Rights Reserved
//
//-----------------------------------------------------------------------------
//
// Project: RTS3
//
// File name: W3DComboBox.cpp
//
// Created: Colin Day, June 2001
//
// Desc: W3D implementation for the Combo box control
//
//-----------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////
// SYSTEM INCLUDES ////////////////////////////////////////////////////////////
#include
// USER INCLUDES //////////////////////////////////////////////////////////////
#include "GameClient/GameWindowGlobal.h"
#include "GameClient/GameWindowManager.h"
#include "GameClient/GadgetComboBox.h"
#include "GameClient/GadgetListBox.h"
#include "W3DDevice/GameClient/W3DGadget.h"
#include "W3DDevice/GameClient/W3DDisplay.h"
// DEFINES ////////////////////////////////////////////////////////////////////
// PRIVATE TYPES //////////////////////////////////////////////////////////////
// PRIVATE DATA ///////////////////////////////////////////////////////////////
// PUBLIC DATA ////////////////////////////////////////////////////////////////
// PRIVATE PROTOTYPES /////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// PRIVATE FUNCTIONS //////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// PUBLIC FUNCTIONS ///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// W3DGadgetComboBoxDraw =======================================================
/** Draw colored list box using standard graphics */
//=============================================================================
void W3DGadgetComboBoxDraw( GameWindow *window, WinInstanceData *instData )
{
Int width, height, fontHeight, x, y;
Color background, border, titleColor, titleBorder;
// ComboBoxData *combo = (ComboBoxData *)window->winGetUserData();
ICoord2D size;
DisplayString *title = instData->getTextDisplayString();
// get window position and size
window->winGetScreenPosition( &x, &y );
window->winGetSize( &size.x, &size.y );
// get font height
fontHeight = TheWindowManager->winFontHeight( instData->getFont() );
// alias width and height from size
width = size.x;
height = size.y;
// get the right colors
if( BitTest( window->winGetStatus(), WIN_STATUS_ENABLED ) == FALSE )
{
background = GadgetComboBoxGetDisabledColor( window );
border = GadgetComboBoxGetDisabledBorderColor( window );
titleColor = window->winGetDisabledTextColor();
titleBorder = window->winGetDisabledTextBorderColor();
} // end if, disabled
else if( BitTest( instData->getState(), WIN_STATE_HILITED ) )
{
background = GadgetComboBoxGetHiliteColor( window );
border = GadgetComboBoxGetHiliteBorderColor( window );
titleColor = window->winGetHiliteTextColor();
titleBorder = window->winGetHiliteTextBorderColor();
} // end else if, hilited
else
{
background = GadgetComboBoxGetEnabledColor( window );
border = GadgetComboBoxGetEnabledBorderColor( window );
titleColor = window->winGetEnabledTextColor();
titleBorder = window->winGetEnabledTextBorderColor();
} // end else, enabled
// Draw the title
if( title && title->getTextLength() )
{
// set the font of this text to that of the window if not already
if( title->getFont() != window->winGetFont() )
title->setFont( window->winGetFont() );
// draw the text
title->draw( x + 1, y, titleColor, titleBorder );
y += fontHeight + 1;
height -= fontHeight + 1;
} // end if
// draw the back border
if( border != WIN_COLOR_UNDEFINED )
TheWindowManager->winOpenRect( border, WIN_DRAW_LINE_WIDTH,
x, y, x + width, y + height );
// draw background
if( background != WIN_COLOR_UNDEFINED )
TheWindowManager->winFillRect( background, WIN_DRAW_LINE_WIDTH,
x + 1, y + 1,
x + width - 1, y + height - 1 );
} // end W3DGadgetComboBoxDraw
// W3DGadgetComboBoxImageDraw ==================================================
/** Draw combo box with user supplied images */
//=============================================================================
void W3DGadgetComboBoxImageDraw( GameWindow *window, WinInstanceData *instData )
{
Int width, height, x, y;
const Image *image;
// ComboBoxData *combo = (ComboBoxData *)window->winGetUserData();
ICoord2D size;
Color titleColor, titleBorder;
DisplayString *title = instData->getTextDisplayString();
// get window position and size
window->winGetScreenPosition( &x, &y );
window->winGetSize( &size.x, &size.y );
// save off width and height so we can change them
width = size.x;
height = size.y;
// get the image
if( BitTest( window->winGetStatus(), WIN_STATUS_ENABLED ) == FALSE )
{
image = GadgetComboBoxGetDisabledImage( window );
titleColor = window->winGetDisabledTextColor();
titleBorder = window->winGetDisabledTextBorderColor();
}
else if( BitTest( instData->getState(), WIN_STATE_HILITED ) )
{
image = GadgetComboBoxGetHiliteImage( window );
titleColor = window->winGetHiliteTextColor();
titleBorder = window->winGetHiliteTextBorderColor();
}
else
{
image = GadgetComboBoxGetEnabledImage( window );
titleColor = window->winGetEnabledTextColor();
titleBorder = window->winGetEnabledTextBorderColor();
}
// draw the back image
if( image )
{
ICoord2D start, end;
start.x = x + instData->m_imageOffset.x;
start.y = y + instData->m_imageOffset.y;
end.x = start.x + width;
end.y = start.y + height;
TheWindowManager->winDrawImage( image,
start.x, start.y,
end.x, end.y );
} // end if
// Draw the title
if( title && title->getTextLength() )
{
// set font to font of the window if not already
if( title->getFont() != window->winGetFont() )
title->setFont( window->winGetFont() );
// draw the text
title->draw( x + 1, y, titleColor, titleBorder );
y += TheWindowManager->winFontHeight( instData->getFont() );
height -= TheWindowManager->winFontHeight( instData->getFont() ) + 1;
} // end if
} // end W3DGadgetComboBoxImageDraw