| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- /*
- ** Command & Conquer Red Alert(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 : Westwood 32 bit Library *
- * *
- * File Name : VBUFFER.CPP *
- * *
- * Programmer : Phil W. Gorrow *
- * *
- * Start Date : January 9, 1995 *
- * *
- * Last Update : January 9, 1995 [PWG] *
- * *
- * This module contains the C++ class definitions for the video buffer *
- * class. This include routines for class creation and modification *
- *-------------------------------------------------------------------------*
- * Functions: *
- * VVPC::VideoViewPortClass -- Constructor for basic view port class *
- * VVPC::VideoViewPortClass -- Default constructor for view port class *
- * VVPC::~VideoViewPortClass -- Destructor for GraphicViewPortClass *
- * VVPC::Attach -- Attaches a viewport to a buffer class *
- * VVPC::Change -- Changes position and size of a Video View Port *
- * VBC::VideoBufferClass -- Default constuctor for video buffers *
- * VBC::VideoBufferClass -- Lowlevel constructor for video buffer class *
- * VBC::~VideoBufferClass -- Destructor for the video buffer class *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #include "vbuffer.h"
- /*=========================================================================*/
- /* The following PRIVATE functions are in this file: */
- /*=========================================================================*/
- /*= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/
- /***************************************************************************
- * VVPC::VIDEOVIEWPORTCLASS -- Constructor for basic view port class *
- * *
- * INPUT: VideoBufferClass * vbuffer - buffer to attach to *
- * WORD x - x offset into buffer *
- * WORD y - y offset into buffer *
- * WORD w - view port width in pixels *
- * WORD h - view port height in pixels *
- * *
- * OUTPUT: Constructors may not have a return value *
- * *
- * HISTORY: *
- * 05/09/1994 PWG : Created. *
- *=========================================================================*/
- VideoViewPortClass::VideoViewPortClass(VideoBufferClass *vbuffer, int x, int y, int w, int h)
- {
- Attach(vbuffer, x, y, w, h);
- }
- /***************************************************************************
- * VVPC::VIDEOVIEWPORTCLASS -- Default constructor for view port class *
- * *
- * INPUT: none *
- * *
- * OUTPUT: none *
- * *
- * HISTORY: *
- * 05/09/1994 PWG : Created. *
- *=========================================================================*/
- VideoViewPortClass::VideoViewPortClass(void)
- {
- }
- /***************************************************************************
- * VVPC::~VIDEOVIEWPORTCLASS -- Destructor for GraphicViewPortClass *
- * *
- * INPUT: none *
- * *
- * OUTPUT: A destructor may not return a value. *
- * *
- * HISTORY: *
- * 05/10/1994 PWG : Created. *
- *=========================================================================*/
- VideoViewPortClass::~VideoViewPortClass(void)
- {
- }
- /***************************************************************************
- * VVPC::ATTACH -- Attaches a viewport to a buffer class *
- * *
- * INPUT: GraphicBufferClass *g_buff - pointer to gbuff to attach to *
- * WORD x - x position to attach to *
- * WORD y - y position to attach to *
- * WORD w - width of the view port *
- * WORD h - height of the view port *
- * *
- * OUTPUT: none *
- * *
- * HISTORY: *
- * 05/10/1994 PWG : Created. *
- *=========================================================================*/
- void VideoViewPortClass::Attach(VideoBufferClass *vbuffer, int x, int y, int w, int h)
- {
- /*======================================================================*/
- /* Verify that the x and y coordinates are valid and placed within the */
- /* physical buffer. */
- /*======================================================================*/
- if (x < 0) // you cannot place view port off
- x = 0; // the left edge of physical buf
- if (x >= vbuffer->Get_Width()) // you cannot place left edge off
- x = vbuffer->Get_Width() - 1; // the right edge of physical buf
- if (y < 0) // you cannot place view port off
- y = 0; // the top edge of physical buf
- if (y >= vbuffer->Get_Height()) // you cannot place view port off
- y = vbuffer->Get_Height() - 1; // bottom edge of physical buf
- /*======================================================================*/
- /* Adjust the width and height of necessary */
- /*======================================================================*/
- if (x + w > vbuffer->Get_Width()) // if the x plus width is larger
- w = vbuffer->Get_Width() - x; // than physical, fix width
- if (y + h > vbuffer->Get_Height()) // if the y plus height is larger
- h = vbuffer->Get_Height() - y; // than physical, fix height
- /*======================================================================*/
- /* Get a pointer to the top left edge of the buffer. */
- /*======================================================================*/
- Offset = vbuffer->Get_Offset() + (vbuffer->Get_Width() * y) + x;
- /*======================================================================*/
- /* Copy over all of the variables that we need to store. */
- /*======================================================================*/
- XPos = x;
- YPos = y;
- XAdd = vbuffer->Get_Width() - w;
- Width = w;
- Height = h;
- VideoBuff = vbuffer;
- }
- /***************************************************************************
- * VVPC::CHANGE -- Changes position and size of a Video View Port *
- * *
- * INPUT: WORD the new x pixel position of the Video view port *
- * WORD the new y pixel position of the Video view port *
- * WORD the new width of the viewport in pixels *
- * WORD the new height of the viewport in pixels *
- * *
- * OUTPUT: BOOL whether the Video View Port could be sucessfully *
- * resized. *
- * *
- * WARNINGS: You may not resize a Video View Port which is derived *
- * from a Video View Port Buffer, *
- * *
- * HISTORY: *
- * 09/14/1994 SKB : Created. *
- *=========================================================================*/
- BOOL VideoViewPortClass::Change(int x, int y, int w, int h)
- {
- /*======================================================================*/
- /* Can not change a Video View Port if it is actually the physical */
- /* representation of a Video Buffer. */
- /*======================================================================*/
- if (this == Get_Video_Buffer()) {
- return(FALSE);
- }
- /*======================================================================*/
- /* Since there is no allocated information, just re-attach it to the */
- /* existing Video buffer as if we were creating the */
- /* VideoViewPort. */
- /*======================================================================*/
- Attach(Get_Video_Buffer(), x, y, w, h);
- return(TRUE);
- }
- /***************************************************************************
- * VBC::VIDEOBUFFERCLASS -- Default constuctor for video buffers *
- * *
- * INPUT: WORD w - width of buffer in pixels (default = 320) *
- * WORD h - height of buffer in pixels (default = 200) *
- * *
- * OUTPUT: none *
- * *
- * HISTORY: *
- * 05/13/1994 PWG : Created. *
- *=========================================================================*/
- VideoBufferClass::VideoBufferClass(int w, int h)
- {
- Offset = 0xa0000; // Get offset to the buffer
- Width = w; // Record width of Buffer
- Height = h; // Record height of Buffer
- XAdd = 0; // Record XAdd of Buffer
- XPos = 0; // Record XPos of Buffer
- YPos = 0; // Record YPos of Buffer
- VideoBuff = this; // Get a pointer to our self
- }
- /***************************************************************************
- * VBC::VIDEOBUFFERCLASS -- Lowlevel constructor for video buffer class *
- * *
- * INPUT: UWORD the selector of the memory reference *
- * long the offset of the memory reference *
- * WORD the width of the video buffer *
- * WORD the height of the video buffer *
- * *
- * OUTPUT: none *
- * *
- * HISTORY: *
- * 06/07/1994 PWG : Created. *
- *=========================================================================*/
- VideoBufferClass::VideoBufferClass(unsigned short selector, long offset, int w, int h)
- {
- Offset = offset; // Get offset to the buffer
- Width = w; // Record width of Buffer
- Height = h; // Record height of Buffer
- XAdd = 0; // Record XAdd of Buffer
- XPos = 0; // Record XPos of Buffer
- YPos = 0; // Record YPos of Buffer
- VideoBuff = this; // Get a pointer to our self
- }
- /*=========================================================================*
- * VBC::~VIDEOBUFFERCLASS -- Destructor for the video buffer class *
- * *
- * INPUT: none *
- * *
- * OUTPUT: none *
- * *
- * HISTORY: *
- * 05/03/1994 PWG : Created. *
- *=========================================================================*/
- VideoBufferClass::~VideoBufferClass()
- {
- }
|