[Scummvm-cvs-logs] SF.net SVN: scummvm:[44696] scummvm/trunk/engines/sci/gui

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Tue Oct 6 16:37:25 CEST 2009


Revision: 44696
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44696&view=rev
Author:   thebluegr
Date:     2009-10-06 14:37:25 +0000 (Tue, 06 Oct 2009)

Log Message:
-----------
- Removed the SciGuiGfx parameter from SciGuiView
- Moved _sysPalette inside SciGuiScreen
- Made CreatePaletteFromData() a static helper function

Modified Paths:
--------------
    scummvm/trunk/engines/sci/gui/gui.cpp
    scummvm/trunk/engines/sci/gui/gui_gfx.cpp
    scummvm/trunk/engines/sci/gui/gui_gfx.h
    scummvm/trunk/engines/sci/gui/gui_helpers.h
    scummvm/trunk/engines/sci/gui/gui_picture.cpp
    scummvm/trunk/engines/sci/gui/gui_screen.h
    scummvm/trunk/engines/sci/gui/gui_view.cpp
    scummvm/trunk/engines/sci/gui/gui_view.h

Modified: scummvm/trunk/engines/sci/gui/gui.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui.cpp	2009-10-06 14:00:35 UTC (rev 44695)
+++ scummvm/trunk/engines/sci/gui/gui.cpp	2009-10-06 14:37:25 UTC (rev 44696)
@@ -261,7 +261,7 @@
 
 void SciGui::drawCel(GuiResourceId viewId, GuiViewLoopNo loopNo, GuiViewCelNo celNo, uint16 leftPos, uint16 topPos, int16 priority, uint16 paletteNo) {
 	_gfx->drawCel(viewId, loopNo, celNo, leftPos, topPos, priority, paletteNo);
-	_gfx->setScreenPalette(&_gfx->_sysPalette);
+	_gfx->setScreenPalette(&_screen->_sysPalette);
 	_screen->copyToScreen();
 }
 
@@ -333,13 +333,13 @@
 }
 
 int16 SciGui::paletteFind(int r, int g, int b) {
-	return _gfx->MatchColor(&_gfx->_sysPalette, r, g, b) & 0xFF;
+	return _gfx->MatchColor(&_screen->_sysPalette, r, g, b) & 0xFF;
 }
 
 void SciGui::paletteSetIntensity(int fromColor, int toColor, int intensity, bool setPalette) {
-	_gfx->PaletteSetIntensity(fromColor, toColor, intensity, &_gfx->_sysPalette);
+	_gfx->PaletteSetIntensity(fromColor, toColor, intensity, &_screen->_sysPalette);
 	if (setPalette) {
-		_gfx->setScreenPalette(&_gfx->_sysPalette);
+		_gfx->setScreenPalette(&_screen->_sysPalette);
 	}
 }
 

Modified: scummvm/trunk/engines/sci/gui/gui_gfx.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_gfx.cpp	2009-10-06 14:00:35 UTC (rev 44695)
+++ scummvm/trunk/engines/sci/gui/gui_gfx.cpp	2009-10-06 14:37:25 UTC (rev 44696)
@@ -76,18 +76,18 @@
 void SciGuiGfx::initPalette() {
 	int16 i;
 	for (i = 0; i < 256; i++) {
-		_sysPalette.colors[i].used = 0;
-		_sysPalette.colors[i].r = 0;
-		_sysPalette.colors[i].g = 0;
-		_sysPalette.colors[i].b = 0;
-		_sysPalette.intensity[i] = 100;
-		_sysPalette.mapping[i] = i;
+		_screen->_sysPalette.colors[i].used = 0;
+		_screen->_sysPalette.colors[i].r = 0;
+		_screen->_sysPalette.colors[i].g = 0;
+		_screen->_sysPalette.colors[i].b = 0;
+		_screen->_sysPalette.intensity[i] = 100;
+		_screen->_sysPalette.mapping[i] = i;
 	}
-	_sysPalette.colors[0].used = 1;
-	_sysPalette.colors[255].used = 1;
-	_sysPalette.colors[255].r = 255;
-	_sysPalette.colors[255].g = 255;
-	_sysPalette.colors[255].b = 255;
+	_screen->_sysPalette.colors[0].used = 1;
+	_screen->_sysPalette.colors[255].used = 1;
+	_screen->_sysPalette.colors[255].r = 255;
+	_screen->_sysPalette.colors[255].g = 255;
+	_screen->_sysPalette.colors[255].b = 255;
 
 	// Load default palette from resource 999
 	if (!SetResPalette(999, 2)) {
@@ -132,10 +132,10 @@
 			byte2 = file.readByte();
 			if ((byte1 == EOF) || (byte2 == EOF))
 				error("Amiga palette file ends prematurely");
-			_sysPalette.colors[curColor].used = 1;
-			_sysPalette.colors[curColor].r = (byte1 & 0x0F) * 0x11;
-			_sysPalette.colors[curColor].g = ((byte2 & 0xF0) >> 4) * 0x11;
-			_sysPalette.colors[curColor].b = (byte2 & 0x0F) * 0x11;
+			_screen->_sysPalette.colors[curColor].used = 1;
+			_screen->_sysPalette.colors[curColor].r = (byte1 & 0x0F) * 0x11;
+			_screen->_sysPalette.colors[curColor].g = ((byte2 & 0xF0) >> 4) * 0x11;
+			_screen->_sysPalette.colors[curColor].b = (byte2 & 0x0F) * 0x11;
 		}
 		file.close();
 		return true;
@@ -145,78 +145,31 @@
 
 void SciGuiGfx::SetEGApalette() {
 	int i;
-	_sysPalette.colors[1].r  = 0x000; _sysPalette.colors[1].g  = 0x000; _sysPalette.colors[1].b  = 0x0AA;
-	_sysPalette.colors[2].r  = 0x000; _sysPalette.colors[2].g  = 0x0AA; _sysPalette.colors[2].b  = 0x000;
-	_sysPalette.colors[3].r  = 0x000; _sysPalette.colors[3].g  = 0x0AA; _sysPalette.colors[3].b  = 0x0AA;
-	_sysPalette.colors[4].r  = 0x0AA; _sysPalette.colors[4].g  = 0x000; _sysPalette.colors[4].b  = 0x000;
-	_sysPalette.colors[5].r  = 0x0AA; _sysPalette.colors[5].g  = 0x000; _sysPalette.colors[5].b  = 0x0AA;
-	_sysPalette.colors[6].r  = 0x0AA; _sysPalette.colors[6].g  = 0x055; _sysPalette.colors[6].b  = 0x000;
-	_sysPalette.colors[7].r  = 0x0AA; _sysPalette.colors[7].g  = 0x0AA; _sysPalette.colors[7].b  = 0x0AA;
-	_sysPalette.colors[8].r  = 0x055; _sysPalette.colors[8].g  = 0x055; _sysPalette.colors[8].b  = 0x055;
-	_sysPalette.colors[9].r  = 0x055; _sysPalette.colors[9].g  = 0x055; _sysPalette.colors[9].b  = 0x0FF;
-	_sysPalette.colors[10].r = 0x055; _sysPalette.colors[10].g = 0x0FF; _sysPalette.colors[10].b = 0x055;
-	_sysPalette.colors[11].r = 0x055; _sysPalette.colors[11].g = 0x0FF; _sysPalette.colors[11].b = 0x0FF;
-	_sysPalette.colors[12].r = 0x0FF; _sysPalette.colors[12].g = 0x055; _sysPalette.colors[12].b = 0x055;
-	_sysPalette.colors[13].r = 0x0FF; _sysPalette.colors[13].g = 0x055; _sysPalette.colors[13].b = 0x0FF;
-	_sysPalette.colors[14].r = 0x0FF; _sysPalette.colors[14].g = 0x0FF; _sysPalette.colors[14].b = 0x055;
-	_sysPalette.colors[15].r = 0x0FF; _sysPalette.colors[15].g = 0x0FF; _sysPalette.colors[15].b = 0x0FF;
+	_screen->_sysPalette.colors[1].r  = 0x000; _screen->_sysPalette.colors[1].g  = 0x000; _screen->_sysPalette.colors[1].b  = 0x0AA;
+	_screen->_sysPalette.colors[2].r  = 0x000; _screen->_sysPalette.colors[2].g  = 0x0AA; _screen->_sysPalette.colors[2].b  = 0x000;
+	_screen->_sysPalette.colors[3].r  = 0x000; _screen->_sysPalette.colors[3].g  = 0x0AA; _screen->_sysPalette.colors[3].b  = 0x0AA;
+	_screen->_sysPalette.colors[4].r  = 0x0AA; _screen->_sysPalette.colors[4].g  = 0x000; _screen->_sysPalette.colors[4].b  = 0x000;
+	_screen->_sysPalette.colors[5].r  = 0x0AA; _screen->_sysPalette.colors[5].g  = 0x000; _screen->_sysPalette.colors[5].b  = 0x0AA;
+	_screen->_sysPalette.colors[6].r  = 0x0AA; _screen->_sysPalette.colors[6].g  = 0x055; _screen->_sysPalette.colors[6].b  = 0x000;
+	_screen->_sysPalette.colors[7].r  = 0x0AA; _screen->_sysPalette.colors[7].g  = 0x0AA; _screen->_sysPalette.colors[7].b  = 0x0AA;
+	_screen->_sysPalette.colors[8].r  = 0x055; _screen->_sysPalette.colors[8].g  = 0x055; _screen->_sysPalette.colors[8].b  = 0x055;
+	_screen->_sysPalette.colors[9].r  = 0x055; _screen->_sysPalette.colors[9].g  = 0x055; _screen->_sysPalette.colors[9].b  = 0x0FF;
+	_screen->_sysPalette.colors[10].r = 0x055; _screen->_sysPalette.colors[10].g = 0x0FF; _screen->_sysPalette.colors[10].b = 0x055;
+	_screen->_sysPalette.colors[11].r = 0x055; _screen->_sysPalette.colors[11].g = 0x0FF; _screen->_sysPalette.colors[11].b = 0x0FF;
+	_screen->_sysPalette.colors[12].r = 0x0FF; _screen->_sysPalette.colors[12].g = 0x055; _screen->_sysPalette.colors[12].b = 0x055;
+	_screen->_sysPalette.colors[13].r = 0x0FF; _screen->_sysPalette.colors[13].g = 0x055; _screen->_sysPalette.colors[13].b = 0x0FF;
+	_screen->_sysPalette.colors[14].r = 0x0FF; _screen->_sysPalette.colors[14].g = 0x0FF; _screen->_sysPalette.colors[14].b = 0x055;
+	_screen->_sysPalette.colors[15].r = 0x0FF; _screen->_sysPalette.colors[15].g = 0x0FF; _screen->_sysPalette.colors[15].b = 0x0FF;
 	for (i = 0; i <= 15; i++) {
-		_sysPalette.colors[i].used = 1;
+		_screen->_sysPalette.colors[i].used = 1;
 	}
 	for (i = 16; i <= 254; i++) {
-		_sysPalette.colors[i].r = 200;
-		_sysPalette.colors[i].used = 1;
+		_screen->_sysPalette.colors[i].r = 200;
+		_screen->_sysPalette.colors[i].used = 1;
 	}
-	setScreenPalette(&_sysPalette);
+	setScreenPalette(&_screen->_sysPalette);
 }
 
-#define SCI_PAL_FORMAT_CONSTANT 1
-#define SCI_PAL_FORMAT_VARIABLE 0
-
-void SciGuiGfx::CreatePaletteFromData(byte *data, GuiPalette *paletteOut) {
-	int palFormat = 0;
-	int palOffset = 0;
-	int palColorStart = 0;
-	int palColorCount = 0;
-	int colorNo = 0;
-
-	memset(paletteOut, 0, sizeof(GuiPalette));
-	// Setup default mapping
-	for (colorNo = 0; colorNo < 256; colorNo++) {
-		paletteOut->mapping[colorNo] = colorNo;
-	}
-	if (data[0] == 0 && data[1] == 1) {
-		// SCI0/SCI1 palette
-		palFormat = SCI_PAL_FORMAT_VARIABLE; // CONSTANT;
-		palOffset = 260;
-		palColorStart = 0; palColorCount = 256;
-		//memcpy(&paletteOut->mapping, data, 256);
-	} else {
-		// SCI1.1 palette
-		palFormat = data[32];
-		palOffset = 37;
-		palColorStart = READ_LE_UINT16(data + 25); palColorCount = READ_LE_UINT16(data + 29);
-	}
-	switch (palFormat) {
-		case SCI_PAL_FORMAT_CONSTANT:
-			for (colorNo = palColorStart; colorNo < palColorStart + palColorCount; colorNo++) {
-				paletteOut->colors[colorNo].used = 1;
-				paletteOut->colors[colorNo].r = data[palOffset++];
-				paletteOut->colors[colorNo].g = data[palOffset++];
-				paletteOut->colors[colorNo].b = data[palOffset++];
-			}
-			break;
-		case SCI_PAL_FORMAT_VARIABLE:
-			for (colorNo = palColorStart; colorNo < palColorStart + palColorCount; colorNo++) {
-				paletteOut->colors[colorNo].used = data[palOffset++];
-				paletteOut->colors[colorNo].r = data[palOffset++];
-				paletteOut->colors[colorNo].g = data[palOffset++];
-				paletteOut->colors[colorNo].b = data[palOffset++];
-			}
-			break;
-	}
-}
-
 bool SciGuiGfx::SetResPalette(int16 resourceNo, int16 flag) {
 	Resource *palResource = _s->resMan->findResource(ResourceId(kResourceTypePalette, resourceNo), 0);
 	GuiPalette palette;
@@ -230,12 +183,12 @@
 }
 
 void SciGuiGfx::SetPalette(GuiPalette *sciPal, int16 flag) {
-	uint32 systime = _sysPalette.timestamp;
+	uint32 systime = _screen->_sysPalette.timestamp;
 	if (flag == 2 || sciPal->timestamp != systime) {
-		MergePalettes(sciPal, &_sysPalette, flag);
-		sciPal->timestamp = _sysPalette.timestamp;
-		if (_picNotValid == 0 && systime != _sysPalette.timestamp)
-			setScreenPalette(&_sysPalette);
+		MergePalettes(sciPal, &_screen->_sysPalette, flag);
+		sciPal->timestamp = _screen->_sysPalette.timestamp;
+		if (_picNotValid == 0 && systime != _screen->_sysPalette.timestamp)
+			setScreenPalette(&_screen->_sysPalette);
 	}
 }
 
@@ -306,8 +259,8 @@
 }
 
 void SciGuiGfx::setScreenPalette(GuiPalette*pal) {
-	if (pal != &_sysPalette)
-		memcpy(&_sysPalette,pal,sizeof(GuiPalette));
+	if (pal != &_screen->_sysPalette)
+		memcpy(&_screen->_sysPalette,pal,sizeof(GuiPalette));
 	// just copy palette to system
 	byte bpal[4 * 256];
 	// Get current palette, update it and put back
@@ -324,8 +277,8 @@
 }
 
 void SciGuiGfx::getSysPalette(GuiPalette*pal) {
-	if (pal != &_sysPalette)
-		memcpy(pal, &_sysPalette,sizeof(GuiPalette));
+	if (pal != &_screen->_sysPalette)
+		memcpy(pal, &_screen->_sysPalette,sizeof(GuiPalette));
 }
 
 GuiPort *SciGuiGfx::SetPort(GuiPort *newPort) {
@@ -1267,7 +1220,7 @@
 }
 
 void SciGuiGfx::drawCel(GuiResourceId viewId, GuiViewLoopNo loopNo, GuiViewCelNo celNo, uint16 leftPos, uint16 topPos, byte priority, uint16 paletteNo) {
-	SciGuiView *view = new SciGuiView(_s->resMan, this, _screen, viewId);
+	SciGuiView *view = new SciGuiView(_s->resMan, _screen, viewId);
 	Common::Rect rect(0, 0);
 	Common::Rect clipRect(0, 0);
 	if (view) {
@@ -1279,7 +1232,16 @@
 		clipRect.clip(_curPort->rect);
 		if (clipRect.isEmpty()) // nothing to draw
 			return;
-		view->draw(rect, clipRect, loopNo, celNo, priority, paletteNo);
+
+		if (view->hasEmbeddedPal()) {
+			// Merge view palette in...
+			SetPalette(view->getPalette(), 1);
+		}
+
+		Common::Rect clipRectTranslated = clipRect;
+		OffsetRect(clipRectTranslated);
+		view->draw(rect, clipRect, clipRectTranslated, loopNo, celNo, priority, paletteNo);
+
 		//if (_picNotValid == 0)
 		//	_gfx->ShowBits(rect, 1);
 	}
@@ -1299,18 +1261,18 @@
 		if (_palSchedules[i].from == fromColor) {
 			if (_palSchedules[i].schedule < now) {
 				if (speed > 0) {
-					col = _sysPalette.colors[fromColor];
-					memmove(&_sysPalette.colors[fromColor], &_sysPalette.colors[fromColor + 1], len * sizeof(GuiColor));
-					_sysPalette.colors[toColor - 1] = col;
+					col = _screen->_sysPalette.colors[fromColor];
+					memmove(&_screen->_sysPalette.colors[fromColor], &_screen->_sysPalette.colors[fromColor + 1], len * sizeof(GuiColor));
+					_screen->_sysPalette.colors[toColor - 1] = col;
 				} else {
-					col = _sysPalette.colors[toColor - 1];
-					memmove(&_sysPalette.colors[fromColor+1], &_sysPalette.colors[fromColor], len * sizeof(GuiColor));
-					_sysPalette.colors[fromColor] = col;
+					col = _screen->_sysPalette.colors[toColor - 1];
+					memmove(&_screen->_sysPalette.colors[fromColor + 1], &_screen->_sysPalette.colors[fromColor], len * sizeof(GuiColor));
+					_screen->_sysPalette.colors[fromColor] = col;
 				}
 				// removing schedule
 				_palSchedules.remove_at(i);
 			}
-			setScreenPalette(&_sysPalette);
+			setScreenPalette(&_screen->_sysPalette);
 			return;
 		}
 	}
@@ -1410,7 +1372,7 @@
 	}
 
 	// now get cel rectangle
-	view = new SciGuiView(_s->resMan, this, _screen, viewId);
+	view = new SciGuiView(_s->resMan, _screen, viewId);
 	view->getCelRect(loopNo, celNo, x, y, z, &celRect);
 
 	// TODO: sometimes loop is negative. Check what it means

Modified: scummvm/trunk/engines/sci/gui/gui_gfx.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_gfx.h	2009-10-06 14:00:35 UTC (rev 44695)
+++ scummvm/trunk/engines/sci/gui/gui_gfx.h	2009-10-06 14:37:25 UTC (rev 44696)
@@ -53,7 +53,6 @@
 	void ResetScreen();
 	bool SetAmigaPalette();
 	void SetEGApalette();
-	void CreatePaletteFromData(byte *paletteData, GuiPalette *paletteOut);
 	bool SetResPalette(int16 resourceNo, int16 flag);
 	void SetPalette(GuiPalette *sciPal, int16 flag);
 	void MergePalettes(GuiPalette *pFrom, GuiPalette *pTo, uint16 flag);
@@ -134,7 +133,6 @@
 	Common::Rect _menuRect;
 	uint32 _sysTicks;
 	int32 _sysSpeed; // ticker timer in ms 
-	GuiPalette _sysPalette;
 
 	bool _picNotValid;
 

Modified: scummvm/trunk/engines/sci/gui/gui_helpers.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_helpers.h	2009-10-06 14:00:35 UTC (rev 44695)
+++ scummvm/trunk/engines/sci/gui/gui_helpers.h	2009-10-06 14:37:25 UTC (rev 44696)
@@ -26,6 +26,7 @@
 #ifndef SCI_GUI_HELPERS_H
 #define SCI_GUI_HELPERS_H
 
+#include "common/endian.h"	// for READ_LE_UINT16
 #include "common/rect.h"
 #include "sci/engine/vm_types.h"
 
@@ -107,6 +108,53 @@
 	GFX_REMOVEVIEW = 0x80
 };
 
+#define SCI_PAL_FORMAT_CONSTANT 1
+#define SCI_PAL_FORMAT_VARIABLE 0
+
+static inline void CreatePaletteFromData(byte *data, GuiPalette *paletteOut) {
+	int palFormat = 0;
+	int palOffset = 0;
+	int palColorStart = 0;
+	int palColorCount = 0;
+	int colorNo = 0;
+
+	memset(paletteOut, 0, sizeof(GuiPalette));
+	// Setup default mapping
+	for (colorNo = 0; colorNo < 256; colorNo++) {
+		paletteOut->mapping[colorNo] = colorNo;
+	}
+	if (data[0] == 0 && data[1] == 1) {
+		// SCI0/SCI1 palette
+		palFormat = SCI_PAL_FORMAT_VARIABLE; // CONSTANT;
+		palOffset = 260;
+		palColorStart = 0; palColorCount = 256;
+		//memcpy(&paletteOut->mapping, data, 256);
+	} else {
+		// SCI1.1 palette
+		palFormat = data[32];
+		palOffset = 37;
+		palColorStart = READ_LE_UINT16(data + 25); palColorCount = READ_LE_UINT16(data + 29);
+	}
+	switch (palFormat) {
+		case SCI_PAL_FORMAT_CONSTANT:
+			for (colorNo = palColorStart; colorNo < palColorStart + palColorCount; colorNo++) {
+				paletteOut->colors[colorNo].used = 1;
+				paletteOut->colors[colorNo].r = data[palOffset++];
+				paletteOut->colors[colorNo].g = data[palOffset++];
+				paletteOut->colors[colorNo].b = data[palOffset++];
+			}
+			break;
+		case SCI_PAL_FORMAT_VARIABLE:
+			for (colorNo = palColorStart; colorNo < palColorStart + palColorCount; colorNo++) {
+				paletteOut->colors[colorNo].used = data[palOffset++];
+				paletteOut->colors[colorNo].r = data[palOffset++];
+				paletteOut->colors[colorNo].g = data[palOffset++];
+				paletteOut->colors[colorNo].b = data[palOffset++];
+			}
+			break;
+	}
+}
+
 } // End of namespace Sci
 
 #endif

Modified: scummvm/trunk/engines/sci/gui/gui_picture.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_picture.cpp	2009-10-06 14:00:35 UTC (rev 44695)
+++ scummvm/trunk/engines/sci/gui/gui_picture.cpp	2009-10-06 14:37:25 UTC (rev 44696)
@@ -91,7 +91,7 @@
 	GuiPalette palette;
 
 	// Create palette and set it
-	_gfx->CreatePaletteFromData(inbuffer + palette_data_ptr, &palette);
+	CreatePaletteFromData(inbuffer + palette_data_ptr, &palette);
 	_gfx->SetPalette(&palette, 2);
 
 	// display Cel-data

Modified: scummvm/trunk/engines/sci/gui/gui_screen.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_screen.h	2009-10-06 14:00:35 UTC (rev 44695)
+++ scummvm/trunk/engines/sci/gui/gui_screen.h	2009-10-06 14:37:25 UTC (rev 44696)
@@ -68,6 +68,8 @@
 	uint16 _displayHeight;
 	uint _displayPixels;
 
+	GuiPalette _sysPalette;
+
 private:
 	void restoreBitsScreen(Common::Rect rect, byte *&memoryPtr, byte *screen);
 	void saveBitsScreen(Common::Rect rect, byte *screen, byte *&memoryPtr);

Modified: scummvm/trunk/engines/sci/gui/gui_view.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_view.cpp	2009-10-06 14:00:35 UTC (rev 44695)
+++ scummvm/trunk/engines/sci/gui/gui_view.cpp	2009-10-06 14:37:25 UTC (rev 44696)
@@ -32,8 +32,8 @@
 
 namespace Sci {
 
-SciGuiView::SciGuiView(ResourceManager *resMan, SciGuiGfx *gfx, SciGuiScreen *screen, GuiResourceId resourceId)
-	: _resMan(resMan), _gfx(gfx), _screen(screen), _resourceId(resourceId) {
+SciGuiView::SciGuiView(ResourceManager *resMan, SciGuiScreen *screen, GuiResourceId resourceId)
+	: _resMan(resMan), _screen(screen), _resourceId(resourceId) {
 	assert(resourceId != -1);
 	initData(resourceId);
 }
@@ -82,7 +82,7 @@
 			if (IsEGA) { // simple mapping for 16 colors
 				_EGAMapping = _resourceData + palOffset;
 			} else {
-				_gfx->CreatePaletteFromData(&_resourceData[palOffset], &_palette);
+				CreatePaletteFromData(&_resourceData[palOffset], &_palette);
 				_embeddedPal = true;
 			}
 		}
@@ -141,7 +141,7 @@
 		celSize = _resourceData[13];
 
 		if (palOffset) {
-			_gfx->CreatePaletteFromData(&_resourceData[palOffset], &_palette);
+			CreatePaletteFromData(&_resourceData[palOffset], &_palette);
 			_embeddedPal = true;
 		}
 
@@ -343,8 +343,8 @@
 	return _loop[loopNo].cel[celNo].rawBitmap;
 }
 
-void SciGuiView::draw(Common::Rect rect, Common::Rect clipRect, GuiViewLoopNo loopNo, GuiViewCelNo celNo, byte priority, uint16 paletteNo) {
-	GuiPalette *palette = _embeddedPal ? &_palette : &_gfx->_sysPalette;
+void SciGuiView::draw(Common::Rect rect, Common::Rect clipRect, Common::Rect clipRectTranslated, GuiViewLoopNo loopNo, GuiViewCelNo celNo, byte priority, uint16 paletteNo) {
+	GuiPalette *palette = _embeddedPal ? &_palette : &_screen->_sysPalette;
 	sciViewCelInfo *celInfo = getCelInfo(loopNo, celNo);
 	byte *bitmap = getBitmap(loopNo, celNo);
 	int16 celHeight = celInfo->height, celWidth = celInfo->width;
@@ -354,21 +354,16 @@
 	byte drawMask = priority == 255 ? SCI_SCREEN_MASK_VISUAL : SCI_SCREEN_MASK_VISUAL|SCI_SCREEN_MASK_PRIORITY;
 	int x, y;
 
-	// Merge view palette in...
-	if (_embeddedPal)
-		_gfx->SetPalette(&_palette, 1);
-
 	width = MIN(clipRect.width(), celWidth);
 	height = MIN(clipRect.height(), celHeight);
 
 	bitmap += (clipRect.top - rect.top) * celWidth + (clipRect.left - rect.left);
-	_gfx->OffsetRect(clipRect);
 
-	for (y = clipRect.top; y < clipRect.top + height; y++, bitmap += celWidth) {
+	for (y = clipRectTranslated.top; y < clipRectTranslated.top + height; y++, bitmap += celWidth) {
 		for (x = 0; x < width; x++) {
 			color = bitmap[x];
-			if (color != clearKey && priority >= _screen->getPriority(clipRect.left + x, y))
-				_screen->putPixel(clipRect.left + x, y, drawMask, palette->mapping[color], priority, 0);
+			if (color != clearKey && priority >= _screen->getPriority(clipRectTranslated.left + x, y))
+				_screen->putPixel(clipRectTranslated.left + x, y, drawMask, palette->mapping[color], priority, 0);
 		}
 	}
 }

Modified: scummvm/trunk/engines/sci/gui/gui_view.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_view.h	2009-10-06 14:00:35 UTC (rev 44695)
+++ scummvm/trunk/engines/sci/gui/gui_view.h	2009-10-06 14:37:25 UTC (rev 44696)
@@ -47,7 +47,7 @@
 
 class SciGuiView {
 public:
-	SciGuiView(ResourceManager *resMan, SciGuiGfx *gfx, SciGuiScreen *screen, GuiResourceId resourceId);
+	SciGuiView(ResourceManager *resMan, SciGuiScreen *screen, GuiResourceId resourceId);
 	~SciGuiView();
 
 	// TODO: Remove gfx reference after putting palette things into SciGuiScreen
@@ -59,14 +59,17 @@
 	sciViewLoopInfo *getLoopInfo(GuiViewLoopNo loopNo);
 	void getCelRect(GuiViewLoopNo loopNo, GuiViewCelNo celNo, int16 x, int16 y, int16 z, Common::Rect *outRect);
 	byte *getBitmap(GuiViewLoopNo loopNo, GuiViewCelNo celNo);
-	void draw(Common::Rect rect, Common::Rect clipRect, GuiViewLoopNo loopNo, GuiViewCelNo celNo, byte priority, uint16 paletteNo);
+	void draw(Common::Rect rect, Common::Rect clipRect, Common::Rect clipRectTranslated, GuiViewLoopNo loopNo, GuiViewCelNo celNo, byte priority, uint16 paletteNo);
 
+	bool hasEmbeddedPal() const { return _embeddedPal; }
+
+	GuiPalette *getPalette() { return &_palette; }
+
 private:
 	void initData(GuiResourceId resourceId);
 	void unpackCel(GuiViewLoopNo loopNo, GuiViewCelNo celNo, byte *outPtr, uint16 pixelCount);
 
 	ResourceManager *_resMan;
-	SciGuiGfx *_gfx;
 	SciGuiScreen *_screen;
 
 	GuiResourceId _resourceId;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list