diff options
Diffstat (limited to 'sword2/driver')
| -rw-r--r-- | sword2/driver/_mouse.cpp | 92 | ||||
| -rw-r--r-- | sword2/driver/d_draw.cpp | 50 | ||||
| -rw-r--r-- | sword2/driver/d_draw.h | 7 | ||||
| -rw-r--r-- | sword2/driver/d_sound.cpp | 2 | ||||
| -rw-r--r-- | sword2/driver/driver96.h | 54 | ||||
| -rw-r--r-- | sword2/driver/keyboard.cpp | 39 | ||||
| -rw-r--r-- | sword2/driver/menu.cpp | 12 | ||||
| -rw-r--r-- | sword2/driver/palette.cpp | 20 | ||||
| -rw-r--r-- | sword2/driver/rdwin.cpp | 30 | ||||
| -rw-r--r-- | sword2/driver/render.cpp | 31 | ||||
| -rw-r--r-- | sword2/driver/sprite.cpp | 20 | 
11 files changed, 180 insertions, 177 deletions
diff --git a/sword2/driver/_mouse.cpp b/sword2/driver/_mouse.cpp index 8216c5fa07..bce554a3f3 100644 --- a/sword2/driver/_mouse.cpp +++ b/sword2/driver/_mouse.cpp @@ -26,43 +26,59 @@  namespace Sword2 { -#define MAX_MOUSE_EVENTS 16  #define MOUSEFLASHFRAME 6 -static uint8 mouseBacklog = 0; -static uint8 mouseLogPos = 0; -static _mouseEvent mouseLog[MAX_MOUSE_EVENTS]; +/** + * Logs the mouse button event passed in buttons.  The button events are  + * defined as RD_LEFTBUTTONDOWN, RD_LEFTBUTTONUP, RD_RIGHTBUTTONDOWN and + * RD_RIGHTBUTTONUP. + */ -void Display::resetRenderEngine(void) { -	_parallaxScrollX = 0; -	_parallaxScrollY = 0; -	_scrollX = 0; -	_scrollY = 0; +void Input::logMouseEvent(uint16 buttons) { +	// We need to leave the one, which is the current event, alone! +	if (_mouseBacklog == MAX_MOUSE_EVENTS - 1) +		return; + +	_mouseLog[(_mouseBacklog + _mouseLogPos) % MAX_MOUSE_EVENTS].buttons = buttons; +	_mouseBacklog++; +} + +bool Input::checkForMouseEvents(void) { +	return _mouseBacklog != 0;  } -// -------------------------------------------------------------------------- -// Logs the mouse button event passed in buttons.  The button events are  -// defined as RD_LEFTBUTTONDOWN, RD_LEFTBUTTONUP, RD_RIGHTBUTTONDOWN and -// RD_RIGHTBUTTONUP. -// -------------------------------------------------------------------------- +/** + * Get the next pending mouse event. + * @return a pointer to the mouse event, or NULL of there is none + */ -void LogMouseEvent(uint16 buttons) { +_mouseEvent *Input::mouseEvent(void) {  	_mouseEvent *me; -	// We need to leave the one, which is the current event, alone! -	if (mouseBacklog == MAX_MOUSE_EVENTS - 1) -		return; +	if (_mouseBacklog) { +		me = &_mouseLog[_mouseLogPos]; +		if (++_mouseLogPos == MAX_MOUSE_EVENTS) +			_mouseLogPos = 0; -	me = &mouseLog[(mouseBacklog + mouseLogPos) % MAX_MOUSE_EVENTS]; -	me->buttons = buttons; -	mouseBacklog++; +		_mouseBacklog--; +		return me; +	} + +	return NULL; +} + +void Graphics::resetRenderEngine(void) { +	_parallaxScrollX = 0; +	_parallaxScrollY = 0; +	_scrollX = 0; +	_scrollY = 0;  }  // FIXME: The original code used 0 for transparency, while our backend uses  // 0xFF. That means that parts of the mouse cursor that weren't meant to be  // transparent may be now. -void Display::decompressMouse(uint8 *decomp, uint8 *comp, int width, int height, int pitch, int xOff, int yOff) { +void Graphics::decompressMouse(uint8 *decomp, uint8 *comp, int width, int height, int pitch, int xOff, int yOff) {  	int32 size = width * height;  	int32 i = 0;  	int x = 0; @@ -87,7 +103,7 @@ void Display::decompressMouse(uint8 *decomp, uint8 *comp, int width, int height,  	}  } -void Display::drawMouse(void) { +void Graphics::drawMouse(void) {  	if (!_mouseAnim && !_luggageAnim)  		return; @@ -159,34 +175,10 @@ void Display::drawMouse(void) {  }  /** - * Get the next pending mouse event. - * @return a pointer to the mouse event, or NULL of there is none - */ - -_mouseEvent *MouseEvent(void) { -	_mouseEvent *me; - -	if (mouseBacklog) { -		me = &mouseLog[mouseLogPos]; -		if (++mouseLogPos == MAX_MOUSE_EVENTS) -			mouseLogPos = 0; - -		mouseBacklog--; -		return me; -	} - -	return NULL; -} - -uint8 CheckForMouseEvents(void) { -	return mouseBacklog;	// return the number of mouse events waiting -} - -/**   * Animates the current mouse pointer   */ -int32 Display::animateMouse(void) { +int32 Graphics::animateMouse(void) {  	uint8 prevMouseFrame = _mouseFrame;  	if (!_mouseAnim) @@ -211,7 +203,7 @@ int32 Display::animateMouse(void) {   * or not there is a lead-in animation   */ -int32 Display::setMouseAnim(uint8 *ma, int32 size, int32 mouseFlash) { +int32 Graphics::setMouseAnim(uint8 *ma, int32 size, int32 mouseFlash) {  	if (_mouseAnim) {  		free(_mouseAnim);  		_mouseAnim = NULL; @@ -251,7 +243,7 @@ int32 Display::setMouseAnim(uint8 *ma, int32 size, int32 mouseFlash) {   * @param size the size of the animation data   */ -int32 Display::setLuggageAnim(uint8 *ma, int32 size) { +int32 Graphics::setLuggageAnim(uint8 *ma, int32 size) {  	if (_luggageAnim) {  		free(_luggageAnim);  		_luggageAnim = NULL; diff --git a/sword2/driver/d_draw.cpp b/sword2/driver/d_draw.cpp index 8ccb28ab56..1db17dd974 100644 --- a/sword2/driver/d_draw.cpp +++ b/sword2/driver/d_draw.cpp @@ -28,7 +28,7 @@  namespace Sword2 { -Display::Display(int16 width, int16 height)  +Graphics::Graphics(int16 width, int16 height)   	: _iconCount(0), _needFullRedraw(false), _fadeStatus(RDFADE_NONE),  	  _mouseSprite(NULL), _mouseAnim(NULL), _luggageAnim(NULL),  	  _layer(0), _renderAverageTime(60), _lightMask(NULL), @@ -59,11 +59,11 @@ Display::Display(int16 width, int16 height)   * @return the graphics detail setting   */ -int8 Display::getRenderLevel(void) { +int8 Graphics::getRenderLevel(void) {  	return _renderLevel;  } -void Display::setRenderLevel(int8 level) { +void Graphics::setRenderLevel(int8 level) {  	_renderLevel = level;  	switch (_renderLevel) { @@ -92,25 +92,25 @@ void Display::setRenderLevel(int8 level) {   * touch the menu areas of the screen.   */ -void Display::clearScene(void) { +void Graphics::clearScene(void) {  	memset(_buffer + MENUDEEP * _screenWide, 0, _screenWide * RENDERDEEP);  }  void MoviePlayer::openTextObject(_movieTextObject *obj) {  	if (obj->textSprite) -		g_display->createSurface(obj->textSprite, &_textSurface); +		g_graphics->createSurface(obj->textSprite, &_textSurface);  }  void MoviePlayer::closeTextObject(_movieTextObject *obj) {  	if (_textSurface) { -		g_display->deleteSurface(_textSurface); +		g_graphics->deleteSurface(_textSurface);  		_textSurface = NULL;  	}  }  void MoviePlayer::drawTextObject(_movieTextObject *obj) {  	if (obj->textSprite && _textSurface) -		g_display->drawSurface(obj->textSprite, _textSurface); +		g_graphics->drawSurface(obj->textSprite, _textSurface);  }  /** @@ -130,14 +130,14 @@ int32 MoviePlayer::play(char *filename, _movieTextObject *text[], uint8 *musicOu  		uint8 oldPal[1024];  		uint8 tmpPal[1024]; -		g_display->clearScene(); +		g_graphics->clearScene();  		// HACK: Draw instructions  		//  		// I'm using the the menu area, because that's unlikely to be  		// touched by anything else during the cutscene. -		memset(g_display->_buffer, 0, g_display->_screenWide * MENUDEEP); +		memset(g_graphics->_buffer, 0, g_graphics->_screenWide * MENUDEEP);  		uint8 msg[] = "Cutscene - Press ESC to exit";  		mem *data = fontRenderer->makeTextSprite(msg, 640, 255, g_sword2->_speechFontId); @@ -145,16 +145,16 @@ int32 MoviePlayer::play(char *filename, _movieTextObject *text[], uint8 *musicOu  		_spriteInfo msgSprite;  		uint8 *msgSurface; -		msgSprite.x = g_display->_screenWide / 2 - frame->width / 2; +		msgSprite.x = g_graphics->_screenWide / 2 - frame->width / 2;  		msgSprite.y = RDMENU_MENUDEEP / 2 - frame->height / 2;  		msgSprite.w = frame->width;  		msgSprite.h = frame->height;  		msgSprite.type = RDSPR_DISPLAYALIGN | RDSPR_NOCOMPRESSION | RDSPR_TRANS;  		msgSprite.data = data->ad + sizeof(_frameHeader); -		g_display->createSurface(&msgSprite, &msgSurface); -		g_display->drawSurface(&msgSprite, msgSurface); -		g_display->deleteSurface(msgSurface); +		g_graphics->createSurface(&msgSprite, &msgSurface); +		g_graphics->drawSurface(&msgSprite, msgSurface); +		g_graphics->deleteSurface(msgSurface);  		memory->freeMemory(data);  		// In case the cutscene has a long lead-in, start just before @@ -170,12 +170,12 @@ int32 MoviePlayer::play(char *filename, _movieTextObject *text[], uint8 *musicOu  		// The text should probably be colored the same as the rest of  		// the in-game text. -		memcpy(oldPal, g_display->_palCopy, 1024); +		memcpy(oldPal, g_graphics->_palCopy, 1024);  		memset(tmpPal, 0, 1024);  		tmpPal[255 * 4 + 0] = 255;  		tmpPal[255 * 4 + 1] = 255;  		tmpPal[255 * 4 + 2] = 255; -		g_display->setPalette(0, 256, tmpPal, RDPAL_INSTANT); +		g_graphics->setPalette(0, 256, tmpPal, RDPAL_INSTANT);  		PlayingSoundHandle handle = 0; @@ -186,7 +186,7 @@ int32 MoviePlayer::play(char *filename, _movieTextObject *text[], uint8 *musicOu  				break;  			if (frameCounter == text[textCounter]->startFrame) { -				g_display->clearScene(); +				g_graphics->clearScene();  				openTextObject(text[textCounter]);  				drawTextObject(text[textCounter]);  				if (text[textCounter]->speech) { @@ -196,17 +196,17 @@ int32 MoviePlayer::play(char *filename, _movieTextObject *text[], uint8 *musicOu  			if (frameCounter == text[textCounter]->endFrame) {  				closeTextObject(text[textCounter]); -				g_display->clearScene(); +				g_graphics->clearScene();  				textCounter++;  			}  			frameCounter++; -			g_display->updateDisplay(); +			g_graphics->updateDisplay();  			_keyboardEvent ke; -			if (ReadKey(&ke) == RD_OK && ke.keycode == 27) { +			if (g_input->readKey(&ke) == RD_OK && ke.keycode == 27) {  				g_sword2->_mixer->stopHandle(handle);  				skipCutscene = true;  				break; @@ -221,17 +221,17 @@ int32 MoviePlayer::play(char *filename, _movieTextObject *text[], uint8 *musicOu  		closeTextObject(text[textCounter]); -		g_display->clearScene(); -		g_display->setNeedFullRedraw(); +		g_graphics->clearScene(); +		g_graphics->setNeedFullRedraw();  		// HACK: Remove the instructions created above  		Common::Rect r; -		memset(g_display->_buffer, 0, g_display->_screenWide * MENUDEEP); +		memset(g_graphics->_buffer, 0, g_graphics->_screenWide * MENUDEEP);  		r.left = r.top = 0; -		r.right = g_display->_screenWide; +		r.right = g_graphics->_screenWide;  		r.bottom = MENUDEEP; -		g_display->updateRect(&r); +		g_graphics->updateRect(&r);  		// FIXME: For now, only play the lead-out music for cutscenes  		// that have subtitles. @@ -239,7 +239,7 @@ int32 MoviePlayer::play(char *filename, _movieTextObject *text[], uint8 *musicOu  		if (!skipCutscene)  			g_sound->playLeadOut(musicOut); -		g_display->setPalette(0, 256, oldPal, RDPAL_INSTANT); +		g_graphics->setPalette(0, 256, oldPal, RDPAL_INSTANT);  	}  	// Lead-in and lead-out music are, as far as I can tell, only used for diff --git a/sword2/driver/d_draw.h b/sword2/driver/d_draw.h index cea1941ad6..f3c0a055ee 100644 --- a/sword2/driver/d_draw.h +++ b/sword2/driver/d_draw.h @@ -76,7 +76,7 @@ typedef struct {  	bool transparent;  } BlockSurface; -class Display { +class Graphics {  	friend class MoviePlayer;  private: @@ -174,15 +174,12 @@ private:  	int32 decompressRLE16(uint8 *dest, uint8 *source, int32 decompSize, uint8 *colTable);  public: -	Display(int16 width, int16 height); +	Graphics(int16 width, int16 height);  	// Game screen metrics  	int16 _screenWide;  	int16 _screenDeep; -	int16 _mouseX; -	int16 _mouseY; -  	uint8 _palCopy[256][4];  	int8 getRenderLevel(void); diff --git a/sword2/driver/d_sound.cpp b/sword2/driver/d_sound.cpp index c86a14193a..8235d25934 100644 --- a/sword2/driver/d_sound.cpp +++ b/sword2/driver/d_sound.cpp @@ -248,7 +248,7 @@ void Sound::playLeadOut(uint8 *leadOut) {  	}  	while (_fx[i]._handle) { -		g_display->updateDisplay(); +		g_graphics->updateDisplay();  		g_system->delay_msecs(30);  	}  } diff --git a/sword2/driver/driver96.h b/sword2/driver/driver96.h index fde513ba77..4ecf614da9 100644 --- a/sword2/driver/driver96.h +++ b/sword2/driver/driver96.h @@ -274,20 +274,6 @@ extern int32 SetLanguageVersion(uint8 version);  //-----------------------------------------------------------------------------  //----------------------------------------------------------------------------- -//	Mouse functions - from mouse.c -//----------------------------------------------------------------------------- -extern _mouseEvent *MouseEvent(void); -uint8 CheckForMouseEvents(void); -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -//	Keyboard functions - from keyboard.c -//----------------------------------------------------------------------------- -extern bool KeyWaiting(void); -extern int32 ReadKey(_keyboardEvent *ke); -//----------------------------------------------------------------------------- - -//-----------------------------------------------------------------------------  //	Misc functions - from misc.cpp  //-----------------------------------------------------------------------------  extern uint32 SVM_timeGetTime(void); @@ -295,6 +281,46 @@ extern void SVM_SetFileAttributes(char *file, uint32 atrib);  extern void SVM_DeleteFile(char *file);  extern int32 SVM_GetVolumeInformation(char *cdPath, char *sCDName, uint32 maxPath, uint8 *, uint32 *dwMaxCompLength, uint32 *dwFSFlags, uint8 *, uint32 a); +#define MAX_MOUSE_EVENTS 16 + +// Key buffer size +#define MAX_KEY_BUFFER 32 + +class Input { +	uint8 _mouseBacklog; +	uint8 _mouseLogPos; +	_mouseEvent _mouseLog[MAX_MOUSE_EVENTS]; + +	void logMouseEvent(uint16 buttons); + +	// The number of key presses waiting to be processed. +	uint8 _keyBacklog; + +	// Index of the next key to read from the buffer. +	uint8 _keyLogPos; + +	// The keyboard buffer +	_keyboardEvent _keyBuffer[MAX_KEY_BUFFER]; + +	void writeKey(uint16 ascii, int keycode, int modifiers); + +public: +	int16 _mouseX; +	int16 _mouseY; + +	Input() : +		_mouseBacklog(0), _mouseLogPos(0), _keyBacklog(0), +		_keyLogPos(0) {}; + +	void parseEvents(void); + +	_mouseEvent *mouseEvent(void); +	bool checkForMouseEvents(void); + +	bool keyWaiting(void); +	int32 readKey(_keyboardEvent *ev); +}; +   } // End of namespace Sword2  #endif diff --git a/sword2/driver/keyboard.cpp b/sword2/driver/keyboard.cpp index d5f5e90f0c..8645f5b10d 100644 --- a/sword2/driver/keyboard.cpp +++ b/sword2/driver/keyboard.cpp @@ -22,22 +22,14 @@  namespace Sword2 { -// Key buffer size -#define MAX_KEY_BUFFER 32 - -uint8 keyBacklog = 0;	// The number of key presses waiting to be processed. -uint8 keyPointer = 0;	// Index of the next key to read from the buffer. - -_keyboardEvent keyBuffer[MAX_KEY_BUFFER];		// The keyboard buffer - -void WriteKey(uint16 ascii, int keycode, int modifiers) { -	if (keyBuffer && keyBacklog < MAX_KEY_BUFFER) { -		_keyboardEvent *slot = &keyBuffer[(keyPointer + keyBacklog) % MAX_KEY_BUFFER]; +void Input::writeKey(uint16 ascii, int keycode, int modifiers) { +	if (_keyBuffer && _keyBacklog < MAX_KEY_BUFFER) { +		_keyboardEvent *slot = &_keyBuffer[(_keyLogPos + _keyBacklog) % MAX_KEY_BUFFER];  		slot->ascii = ascii;  		slot->keycode = keycode;  		slot->modifiers = modifiers; -		keyBacklog++; +		_keyBacklog++;  	}  } @@ -45,8 +37,8 @@ void WriteKey(uint16 ascii, int keycode, int modifiers) {   * @return true if there is an unprocessed key waiting in the queue   */ -bool KeyWaiting(void) { -	return keyBacklog != 0; +bool Input::keyWaiting(void) { +	return _keyBacklog != 0;  }  /** @@ -54,24 +46,23 @@ bool KeyWaiting(void) {   * @return RD_OK, or an error code to indicate there is no key waiting.   */ -int32 ReadKey(_keyboardEvent *ev) { -	if (!keyBacklog) +int32 Input::readKey(_keyboardEvent *ev) { +	if (!_keyBacklog)  		return RDERR_NOKEYWAITING;  	if (ev == NULL)  		return RDERR_INVALIDPOINTER; -	ev->ascii = keyBuffer[keyPointer].ascii; -	ev->keycode = keyBuffer[keyPointer].keycode; -	ev->modifiers = keyBuffer[keyPointer].modifiers; - -	keyPointer++; +	ev->ascii = _keyBuffer[_keyLogPos].ascii; +	ev->keycode = _keyBuffer[_keyLogPos].keycode; +	ev->modifiers = _keyBuffer[_keyLogPos].modifiers; -	if (keyPointer == MAX_KEY_BUFFER) -		keyPointer = 0; +	_keyLogPos++; -	keyBacklog--; +	if (_keyLogPos == MAX_KEY_BUFFER) +		_keyLogPos = 0; +	_keyBacklog--;  	return RD_OK;  } diff --git a/sword2/driver/menu.cpp b/sword2/driver/menu.cpp index 54a87c20ac..341fb85de9 100644 --- a/sword2/driver/menu.cpp +++ b/sword2/driver/menu.cpp @@ -29,7 +29,7 @@ namespace Sword2 {  #define MENUDEEP 40  #define MAXMENUANIMS 8 -void Display::clearIconArea(int menu, int pocket, Common::Rect *r) { +void Graphics::clearIconArea(int menu, int pocket, Common::Rect *r) {  	byte *dst;  	int i; @@ -52,7 +52,7 @@ void Display::clearIconArea(int menu, int pocket, Common::Rect *r) {   * system is.   */ -void Display::processMenu(void) { +void Graphics::processMenu(void) {  	byte *src, *dst;  	uint8 menu;  	uint8 i, j; @@ -199,7 +199,7 @@ void Display::processMenu(void) {   * @return RD_OK, or an error code   */ -int32 Display::showMenu(uint8 menu) { +int32 Graphics::showMenu(uint8 menu) {  	// Check for invalid menu parameter  	if (menu > RDMENU_BOTTOM)  		return RDERR_INVALIDMENU; @@ -219,7 +219,7 @@ int32 Display::showMenu(uint8 menu) {   * @return RD_OK, or an error code   */ -int32 Display::hideMenu(uint8 menu) { +int32 Graphics::hideMenu(uint8 menu) {  	// Check for invalid menu parameter  	if (menu > RDMENU_BOTTOM)  		return RDERR_INVALIDMENU; @@ -237,7 +237,7 @@ int32 Display::hideMenu(uint8 menu) {   * This function hides both menus immediately.   */ -void Display::closeMenuImmediately(void) { +void Graphics::closeMenuImmediately(void) {  	Common::Rect r;  	int i; @@ -266,7 +266,7 @@ void Display::closeMenuImmediately(void) {   * @return RD_OK, or an error code   */ -int32 Display::setMenuIcon(uint8 menu, uint8 pocket, uint8 *icon) { +int32 Graphics::setMenuIcon(uint8 menu, uint8 pocket, uint8 *icon) {  	Common::Rect r;  	// Check for invalid menu parameter. diff --git a/sword2/driver/palette.cpp b/sword2/driver/palette.cpp index aa0f860a62..a4098426b3 100644 --- a/sword2/driver/palette.cpp +++ b/sword2/driver/palette.cpp @@ -26,7 +26,7 @@  namespace Sword2 { -uint8 Display::getMatch(uint8 r, uint8 g, uint8 b) { +uint8 Graphics::getMatch(uint8 r, uint8 g, uint8 b) {  	int32 diff;  	int32 min;  	int16 diffred, diffgreen, diffblue; @@ -67,7 +67,7 @@ uint8 Display::getMatch(uint8 r, uint8 g, uint8 b) {   * from the current palCopy   */ -void Display::updatePaletteMatchTable(uint8 *data) { +void Graphics::updatePaletteMatchTable(uint8 *data) {  	if (!data) {  		int16 red, green, blue;  		uint8 *p; @@ -101,7 +101,7 @@ void Display::updatePaletteMatchTable(uint8 *data) {  // FIXME: This used to be inlined - probably a good idea - but the  // linker complained when I tried to use it in sprite.cpp. -uint8 Display::quickMatch(uint8 r, uint8 g, uint8 b) { +uint8 Graphics::quickMatch(uint8 r, uint8 g, uint8 b) {  	return _paletteMatch[((int32) (r >> 2) << 12) + ((int32) (g >> 2) << 6) + (b >> 2)];  } @@ -112,7 +112,7 @@ uint8 Display::quickMatch(uint8 r, uint8 g, uint8 b) {   * @param colourTable the new colour entries   */ -void Display::setPalette(int16 startEntry, int16 noEntries, uint8 *colourTable, uint8 fadeNow) { +void Graphics::setPalette(int16 startEntry, int16 noEntries, uint8 *colourTable, uint8 fadeNow) {  	if (noEntries) {  		memcpy(&_palCopy[startEntry][0], colourTable, noEntries * 4);  		if (fadeNow == RDPAL_INSTANT) @@ -121,7 +121,7 @@ void Display::setPalette(int16 startEntry, int16 noEntries, uint8 *colourTable,  		g_system->set_palette((const byte *) _palCopy, 0, 256);  } -void Display::dimPalette(void) { +void Graphics::dimPalette(void) {  	byte *p = (byte *) _palCopy;  	for (int i = 0; i < 256 * 4; i++) @@ -135,7 +135,7 @@ void Display::dimPalette(void) {   * @param time the time it will take the palette to fade up   */ -int32 Display::fadeUp(float time) { +int32 Graphics::fadeUp(float time) {  	if (getFadeStatus() != RDFADE_BLACK && getFadeStatus() != RDFADE_NONE)  		return RDERR_FADEINCOMPLETE; @@ -151,7 +151,7 @@ int32 Display::fadeUp(float time) {   * @param time the time it will take the palette to fade down   */ -int32 Display::fadeDown(float time) { +int32 Graphics::fadeDown(float time) {  	if (getFadeStatus() != RDFADE_BLACK && getFadeStatus() != RDFADE_NONE)  		return RDERR_FADEINCOMPLETE; @@ -168,18 +168,18 @@ int32 Display::fadeDown(float time) {   * (not faded), or RDFADE_BLACK (completely faded down)   */ -uint8 Display::getFadeStatus(void) { +uint8 Graphics::getFadeStatus(void) {  	return _fadeStatus;  } -void Display::waitForFade(void) { +void Graphics::waitForFade(void) {  	while (getFadeStatus() != RDFADE_NONE && getFadeStatus() != RDFADE_BLACK) {  		updateDisplay();  		g_system->delay_msecs(20);  	}  } -void Display::fadeServer(void) { +void Graphics::fadeServer(void) {  	static int32 previousTime = 0;  	const byte *newPalette = (const byte *) _fadePalette;  	int32 currentTime; diff --git a/sword2/driver/rdwin.cpp b/sword2/driver/rdwin.cpp index 911bc1b646..050e8b3021 100644 --- a/sword2/driver/rdwin.cpp +++ b/sword2/driver/rdwin.cpp @@ -20,8 +20,6 @@  #include "common/stdafx.h"  #include "sword2/sword2.h"  #include "sword2/driver/driver96.h" -#include "sword2/driver/_mouse.h" -#include "sword2/driver/keyboard.h"  #include "sword2/driver/d_draw.h"  #include "sword2/driver/render.h"  #include "sword2/driver/menu.h" @@ -33,29 +31,29 @@ namespace Sword2 {  // OSystem Event Handler. Full of cross platform goodness and 99% fat free!  // --------------------------------------------------------------------------- -void Sword2Engine::parseEvents() { +void Input::parseEvents(void) {  	OSystem::Event event; -	while (_system->poll_event(&event)) { -		switch(event.event_code) { +	while (g_system->poll_event(&event)) { +		switch (event.event_code) {  		case OSystem::EVENT_KEYDOWN: -			WriteKey(event.kbd.ascii, event.kbd.keycode, event.kbd.flags); +			writeKey(event.kbd.ascii, event.kbd.keycode, event.kbd.flags);  			break;  		case OSystem::EVENT_MOUSEMOVE: -			g_display->_mouseX = event.mouse.x; -			g_display->_mouseY = event.mouse.y - MENUDEEP; +			_mouseX = event.mouse.x; +			_mouseY = event.mouse.y - MENUDEEP;  			break;  		case OSystem::EVENT_LBUTTONDOWN: -			LogMouseEvent(RD_LEFTBUTTONDOWN); +			logMouseEvent(RD_LEFTBUTTONDOWN);  			break;  		case OSystem::EVENT_RBUTTONDOWN: -			LogMouseEvent(RD_RIGHTBUTTONDOWN); +			logMouseEvent(RD_RIGHTBUTTONDOWN);  			break;  		case OSystem::EVENT_LBUTTONUP: -			LogMouseEvent(RD_LEFTBUTTONUP); +			logMouseEvent(RD_LEFTBUTTONUP);  			break;  		case OSystem::EVENT_RBUTTONUP: -			LogMouseEvent(RD_RIGHTBUTTONUP); +			logMouseEvent(RD_RIGHTBUTTONUP);  			break;  		case OSystem::EVENT_QUIT:  			g_sword2->closeGame(); @@ -66,7 +64,7 @@ void Sword2Engine::parseEvents() {  	}  } -void Display::setNeedFullRedraw() { +void Graphics::setNeedFullRedraw() {  	_needFullRedraw = true;  } @@ -75,8 +73,8 @@ void Display::setNeedFullRedraw() {   * windows and the interface it provides.   */ -void Display::updateDisplay(void) { -	g_sword2->parseEvents(); +void Graphics::updateDisplay(void) { +	g_input->parseEvents();  	fadeServer();  	// FIXME: We re-render the entire picture area of the screen for each @@ -95,7 +93,7 @@ void Display::updateDisplay(void) {   * Set the window title   */ -void Display::setWindowName(const char *windowName) { +void Graphics::setWindowName(const char *windowName) {  	OSystem::Property prop;  	prop.caption = windowName; diff --git a/sword2/driver/render.cpp b/sword2/driver/render.cpp index eb58c9b96d..71f01befea 100644 --- a/sword2/driver/render.cpp +++ b/sword2/driver/render.cpp @@ -20,7 +20,6 @@  #include "stdafx.h"  #include "sword2/driver/driver96.h"  #include "sword2/driver/d_draw.h" -#include "sword2/driver/_mouse.h"  #include "sword2/driver/render.h"  #include "sword2/driver/menu.h"  #include "sword2/sword2.h" @@ -32,13 +31,13 @@ namespace Sword2 {  #define BLOCKWBITS		6  #define BLOCKHBITS		6 -void Display::updateRect(Common::Rect *r) { +void Graphics::updateRect(Common::Rect *r) {  	g_system->copy_rect(_buffer + r->top * _screenWide + r->left,  		_screenWide, r->left, r->top, r->right - r->left,  		r->bottom - r->top);  } -void Display::blitBlockSurface(BlockSurface *s, Common::Rect *r, Common::Rect *clip_rect) { +void Graphics::blitBlockSurface(BlockSurface *s, Common::Rect *r, Common::Rect *clip_rect) {  	if (r->top > clip_rect->bottom || r->left > clip_rect->right || r->bottom <= clip_rect->top || r->right <= clip_rect->left)  		return; @@ -78,7 +77,7 @@ void Display::blitBlockSurface(BlockSurface *s, Common::Rect *r, Common::Rect *c  	}  	// UploadRect(r); -	g_display->setNeedFullRedraw(); +	setNeedFullRedraw();  }  // I've made the scaling two separate functions because there were cases from @@ -94,7 +93,7 @@ void Display::blitBlockSurface(BlockSurface *s, Common::Rect *r, Common::Rect *c  // be drawn. This is only used at the highest graphics detail setting (and not  // always even then) and is used to help anti-alias the image. -void Display::squashImage(byte *dst, uint16 dstPitch, uint16 dstWidth, uint16 dstHeight, byte *src, uint16 srcPitch, uint16 srcWidth, uint16 srcHeight, byte *backbuf) { +void Graphics::squashImage(byte *dst, uint16 dstPitch, uint16 dstWidth, uint16 dstHeight, byte *src, uint16 srcPitch, uint16 srcWidth, uint16 srcHeight, byte *backbuf) {  	int32 ince, incne, d;  	int16 x, y; @@ -189,7 +188,7 @@ void Display::squashImage(byte *dst, uint16 dstPitch, uint16 dstWidth, uint16 ds  	}  } -void Display::stretchImage(byte *dst, uint16 dstPitch, uint16 dstWidth, uint16 dstHeight, byte *src, uint16 srcPitch, uint16 srcWidth, uint16 srcHeight, byte *backbuf) { +void Graphics::stretchImage(byte *dst, uint16 dstPitch, uint16 dstWidth, uint16 dstHeight, byte *src, uint16 srcPitch, uint16 srcWidth, uint16 srcHeight, byte *backbuf) {  	byte *origDst = dst;  	int32 ince, incne, d;  	int16 x, y, i, j, k; @@ -335,7 +334,7 @@ void Display::stretchImage(byte *dst, uint16 dstPitch, uint16 dstWidth, uint16 d   * @param colour colour of the point   */ -void Display::plotPoint(uint16 x, uint16 y, uint8 colour) { +void Graphics::plotPoint(uint16 x, uint16 y, uint8 colour) {  	uint8 *buf = _buffer + 40 * RENDERWIDE;  	int16 newx, newy; @@ -356,7 +355,7 @@ void Display::plotPoint(uint16 x, uint16 y, uint8 colour) {   */  // Uses Bressnham's incremental algorithm! -void Display::drawLine(int16 x0, int16 y0, int16 x1, int16 y1, uint8 colour) { +void Graphics::drawLine(int16 x0, int16 y0, int16 x1, int16 y1, uint8 colour) {  	uint8 *buf = _buffer + 40 * RENDERWIDE;  	int dx, dy;  	int dxmod, dymod; @@ -519,7 +518,7 @@ void Display::drawLine(int16 x0, int16 y0, int16 x1, int16 y1, uint8 colour) {   * @param h height of the current location   */ -void Display::setLocationMetrics(uint16 w, uint16 h) { +void Graphics::setLocationMetrics(uint16 w, uint16 h) {  	_locationWide = w;  	_locationDeep = h;  } @@ -529,7 +528,7 @@ void Display::setLocationMetrics(uint16 w, uint16 h) {   * parallax can be either foreground, background or the main screen.   */ -void Display::renderParallax(_parallax *p, int16 l) { +void Graphics::renderParallax(_parallax *p, int16 l) {  	int16 x, y;  	Common::Rect r; @@ -575,7 +574,7 @@ void Display::renderParallax(_parallax *p, int16 l) {   * Initialises the timers before the render loop is entered.   */ -void Display::initialiseRenderCycle(void) { +void Graphics::initialiseRenderCycle(void) {  	_initialTime = SVM_timeGetTime();  	_totalTime = _initialTime + MILLISECSPERCYCLE;  } @@ -585,7 +584,7 @@ void Display::initialiseRenderCycle(void) {   * render cycle.   */ -void Display::startRenderCycle(void) { +void Graphics::startRenderCycle(void) {  	_scrollXOld = _scrollX;  	_scrollYOld = _scrollY; @@ -610,7 +609,7 @@ void Display::startRenderCycle(void) {   * terminated, or false if it should continue   */ -bool Display::endRenderCycle(void) { +bool Graphics::endRenderCycle(void) {  	static int32 renderTimeLog[4] = { 60, 60, 60, 60 };  	static int32 renderCountIndex = 0;  	int32 time; @@ -668,7 +667,7 @@ bool Display::endRenderCycle(void) {   * position in the allotted time.   */ -void Display::setScrollTarget(int16 sx, int16 sy) { +void Graphics::setScrollTarget(int16 sx, int16 sy) {  	_scrollXTarget = sx;  	_scrollYTarget = sy;  } @@ -678,7 +677,7 @@ void Display::setScrollTarget(int16 sx, int16 sy) {   * or a NULL pointer in order of background parallax to foreground parallax.   */ -int32 Display::initialiseBackgroundLayer(_parallax *p) { +int32 Graphics::initialiseBackgroundLayer(_parallax *p) {  	uint8 *memchunk;  	uint8 zeros;  	uint16 count; @@ -804,7 +803,7 @@ int32 Display::initialiseBackgroundLayer(_parallax *p) {   * Should be called once after leaving the room to free up memory.   */ -void Display::closeBackgroundLayer(void) { +void Graphics::closeBackgroundLayer(void) {  	debug(2, "CloseBackgroundLayer");  	for (int j = 0; j < MAXLAYERS; j++) { diff --git a/sword2/driver/sprite.cpp b/sword2/driver/sprite.cpp index c7bf74177f..c9e21f6639 100644 --- a/sword2/driver/sprite.cpp +++ b/sword2/driver/sprite.cpp @@ -32,7 +32,7 @@ namespace Sword2 {   * @param h height of the sprite   */ -void Display::mirrorSprite(uint8 *dst, uint8 *src, int16 w, int16 h) { +void Graphics::mirrorSprite(uint8 *dst, uint8 *src, int16 w, int16 h) {  	for (int y = 0; y < h; y++) {  		for (int x = 0; x < w; x++) {  			*dst++ = *(src + w - x - 1); @@ -49,7 +49,7 @@ void Display::mirrorSprite(uint8 *dst, uint8 *src, int16 w, int16 h) {   * @param decompSize the expected size of the decompressed sprite   */ -int32 Display::decompressRLE256(uint8 *dest, uint8 *source, int32 decompSize) { +int32 Graphics::decompressRLE256(uint8 *dest, uint8 *source, int32 decompSize) {  	// PARAMETERS:  	// source	points to the start of the sprite data for input  	// decompSize	gives size of decompressed data in bytes @@ -129,7 +129,7 @@ int32 Display::decompressRLE256(uint8 *dest, uint8 *source, int32 decompSize) {   * Unwinds a run of 16-colour data into 256-colour palette data.   */ -void Display::unwindRaw16(uint8 *dest, uint8 *source, uint8 blockSize, uint8 *colTable) { +void Graphics::unwindRaw16(uint8 *dest, uint8 *source, uint8 blockSize, uint8 *colTable) {  	// for each pair of pixels  	while (blockSize > 1) {  		// 1st colour = number in table at position given by upper @@ -164,7 +164,7 @@ void Display::unwindRaw16(uint8 *dest, uint8 *source, uint8 blockSize, uint8 *co   * @param colTable mapping from the 16 encoded colours to the current palette   */ -int32 Display::decompressRLE16(uint8 *dest, uint8 *source, int32 decompSize, uint8 *colTable) { +int32 Graphics::decompressRLE16(uint8 *dest, uint8 *source, int32 decompSize, uint8 *colTable) {  	uint8 headerByte;			// block header byte  	uint8 *endDest = dest + decompSize;	// pointer to byte after end of decomp buffer  	int32 rv; @@ -244,7 +244,7 @@ int32 Display::decompressRLE16(uint8 *dest, uint8 *source, int32 decompSize, uin   * @return RD_OK, or an error code   */ -int32 Display::createSurface(_spriteInfo *s, uint8 **sprite) { +int32 Graphics::createSurface(_spriteInfo *s, uint8 **sprite) {  	uint8 *newSprite;  	*sprite = (uint8 *) malloc(s->w * s->h); @@ -288,7 +288,7 @@ int32 Display::createSurface(_spriteInfo *s, uint8 **sprite) {   * @param clipRect the clipping rectangle   */ -void Display::drawSurface(_spriteInfo *s, uint8 *surface, Common::Rect *clipRect) { +void Graphics::drawSurface(_spriteInfo *s, uint8 *surface, Common::Rect *clipRect) {  	Common::Rect rd, rs;  	uint16 x, y, srcPitch;  	uint8 *src, *dst; @@ -356,7 +356,7 @@ void Display::drawSurface(_spriteInfo *s, uint8 *surface, Common::Rect *clipRect   * Destroys a surface.   */ -void Display::deleteSurface(uint8 *surface) { +void Graphics::deleteSurface(uint8 *surface) {  	free(surface);  } @@ -381,7 +381,7 @@ void Display::deleteSurface(uint8 *surface) {  // FIXME: I'm sure this could be optimized. There's plenty of data copying and  // mallocing here. -int32 Display::drawSprite(_spriteInfo *s) { +int32 Graphics::drawSprite(_spriteInfo *s) {  	uint8 *src, *dst;  	uint8 *sprite, *newSprite;  	uint8 *backbuf = NULL; @@ -676,7 +676,7 @@ int32 Display::drawSprite(_spriteInfo *s) {   * Opens the light masking sprite for a room.   */ -int32 Display::openLightMask(_spriteInfo *s) { +int32 Graphics::openLightMask(_spriteInfo *s) {  	// FIXME: The light mask is only needed on higher graphics detail  	// settings, so to save memory we could simply ignore it on lower  	// settings. But then we need to figure out how to ensure that it @@ -699,7 +699,7 @@ int32 Display::openLightMask(_spriteInfo *s) {   * Closes the light masking sprite for a room.   */ -int32 Display::closeLightMask(void) { +int32 Graphics::closeLightMask(void) {  	if (!_lightMask)  		return RDERR_NOTOPEN;  | 
