/*
**	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) 2001-2003 Electronic Arts Inc.																				//
//																																						//
////////////////////////////////////////////////////////////////////////////////

// FILE: GUIEditDisplay.h /////////////////////////////////////////////////////
//-----------------------------------------------------------------------------
//                                                                          
//                       Westwood Studios Pacific.                          
//                                                                          
//                       Confidential Information					         
//                Copyright (C) 2001 - All Rights Reserved                  
//                                                                          
//-----------------------------------------------------------------------------
//
// Project:    RTS3
//
// File name:  GUIEditDisplay.h
//
// Created:    Colin Day, July 2001
//
// Desc:       Display implementation for the GUI edit tool
//
//-----------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////

#pragma once

#ifndef __GUIEDITDISPLAY_H_
#define __GUIEDITDISPLAY_H_

// SYSTEM INCLUDES ////////////////////////////////////////////////////////////

// USER INCLUDES //////////////////////////////////////////////////////////////
#include "GameClient/Display.h"

// FORWARD REFERENCES /////////////////////////////////////////////////////////
class VideoBuffer;

// TYPE DEFINES ///////////////////////////////////////////////////////////////

// GUIEditDisplay -------------------------------------------------------------
/** Stripped down display for the GUI tool editor */
//-----------------------------------------------------------------------------
class GUIEditDisplay : public Display
{

public:

	GUIEditDisplay( void );
	virtual ~GUIEditDisplay( void );

	virtual void draw( void ) { };

	/// draw a line on the display in pixel coordinates with the specified color
	virtual void drawLine( Int startX, Int startY, Int endX, Int endY, 
												 Real lineWidth, UnsignedInt lineColor );
	virtual void drawLine( Int startX, Int startY, Int endX, Int endY, 
												 Real lineWidth, UnsignedInt lineColor1, UnsignedInt lineColor2 ) { }
	/// draw a rect border on the display in pixel coordinates with the specified color
	virtual void drawOpenRect( Int startX, Int startY, Int width, Int height,
														 Real lineWidth, UnsignedInt lineColor );
	/// draw a filled rect on the display in pixel coords with the specified color
	virtual void drawFillRect( Int startX, Int startY, Int width, Int height,
														 UnsignedInt color );

	/// Draw a percentage of a rectange, much like a clock
	virtual void drawRectClock(Int startX, Int startY, Int width, Int height, Int percent, UnsignedInt color) { }
	virtual void drawRemainingRectClock(Int startX, Int startY, Int width, Int height, Int percent, UnsignedInt color) { }

	/// draw an image fit within the screen coordinates
	virtual void drawImage( const Image *image, Int startX, Int startY, 
													Int endX, Int endY, Color color = 0xFFFFFFFF, DrawImageMode mode=DRAW_IMAGE_ALPHA);
	/// image clipping support
	virtual void setClipRegion( IRegion2D *region );
	virtual Bool isClippingEnabled( void );
	virtual void enableClipping( Bool onoff );

	// These are stub functions to allow compilation:

	/// Create a video buffer that can be used for this display
	virtual VideoBuffer*	createVideoBuffer( void ) { return NULL; }

	/// draw a video buffer fit within the screen coordinates
	virtual void drawVideoBuffer( VideoBuffer *buffer, Int startX, Int startY, 
																Int endX, Int endY ) { }
	virtual void takeScreenShot(void){ }
	virtual void toggleMovieCapture(void) {}

	// methods that we need to stub
	virtual void setTimeOfDay( TimeOfDay tod ) {}
	virtual void createLightPulse( const Coord3D *pos, const RGBColor *color, Real innerRadius, Real attenuationWidth, 
																 UnsignedInt increaseFrameTime, UnsignedInt decayFrameTime ) {}
	virtual void setShroudLevel(Int x, Int y, CellShroudStatus setting) {}
	void setBorderShroudLevel(UnsignedByte level){}
	virtual void clearShroud() {}
	virtual void preloadModelAssets( AsciiString model ) {}
	virtual void preloadTextureAssets( AsciiString texture ) {}
	virtual void toggleLetterBox(void) {}
	virtual void enableLetterBox(Bool enable) {}
#if defined(_DEBUG) || defined(_INTERNAL)
	virtual void dumpModelAssets(const char *path) {}
#endif
	virtual void doSmartAssetPurgeAndPreload(const char* usageFileName) {}
#if defined(_DEBUG) || defined(_INTERNAL)
	virtual void dumpAssetUsage(const char* mapname) {}
#endif

	virtual Real getAverageFPS(void) { return 0; }
	virtual Int getLastFrameDrawCalls( void ) { return 0; }

protected:

};  // end GUIEditDisplay

// INLINING ///////////////////////////////////////////////////////////////////

// EXTERNALS //////////////////////////////////////////////////////////////////

#endif // __GUIEDITDISPLAY_H_