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

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Sat Jul 24 19:43:57 CEST 2010


Revision: 51251
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51251&view=rev
Author:   m_kiewitz
Date:     2010-07-24 17:43:56 +0000 (Sat, 24 Jul 2010)

Log Message:
-----------
SCI: support useInsetRect in kFrameout

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/selector.cpp
    scummvm/trunk/engines/sci/engine/selector.h
    scummvm/trunk/engines/sci/graphics/frameout.cpp

Modified: scummvm/trunk/engines/sci/engine/selector.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/selector.cpp	2010-07-24 16:52:08 UTC (rev 51250)
+++ scummvm/trunk/engines/sci/engine/selector.cpp	2010-07-24 17:43:56 UTC (rev 51251)
@@ -180,6 +180,11 @@
 	FIND_SELECTOR(back);
 	FIND_SELECTOR(fixPriority);
 	FIND_SELECTOR(mirrored);
+	FIND_SELECTOR(useInsetRect);
+	FIND_SELECTOR(inTop);
+	FIND_SELECTOR(inLeft);
+	FIND_SELECTOR(inBottom);
+	FIND_SELECTOR(inRight);
 #endif
 }
 

Modified: scummvm/trunk/engines/sci/engine/selector.h
===================================================================
--- scummvm/trunk/engines/sci/engine/selector.h	2010-07-24 16:52:08 UTC (rev 51250)
+++ scummvm/trunk/engines/sci/engine/selector.h	2010-07-24 17:43:56 UTC (rev 51251)
@@ -145,6 +145,9 @@
 
 	Selector fixPriority;
 	Selector mirrored;
+
+	Selector useInsetRect;
+	Selector inTop, inLeft, inBottom, inRight;
 #endif
 };
 

Modified: scummvm/trunk/engines/sci/graphics/frameout.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/frameout.cpp	2010-07-24 16:52:08 UTC (rev 51250)
+++ scummvm/trunk/engines/sci/graphics/frameout.cpp	2010-07-24 17:43:56 UTC (rev 51251)
@@ -298,45 +298,56 @@
 
 //				warning("view %s %d", _segMan->getObjectName(itemEntry->object), itemEntry->priority);
 
-				switch (getSciVersion()) {
-				case SCI_VERSION_2:
-					if (view->isSci2Hires())
-						_screen->adjustToUpscaledCoordinates(itemEntry->y, itemEntry->x);
-					break;
-				case SCI_VERSION_2_1:
-					itemEntry->y = (itemEntry->y * _screen->getHeight()) / planeResY;
-					itemEntry->x = (itemEntry->x * _screen->getWidth()) / planeResX;
-					break;
-				default:
-					break;
-				}
+				uint16 useInsetRect = readSelectorValue(_segMan, itemEntry->object, SELECTOR(useInsetRect));
+				if (useInsetRect) {
+					itemEntry->celRect.top = readSelectorValue(_segMan, itemEntry->object, SELECTOR(inTop));
+					itemEntry->celRect.left = readSelectorValue(_segMan, itemEntry->object, SELECTOR(inLeft));
+					itemEntry->celRect.bottom = readSelectorValue(_segMan, itemEntry->object, SELECTOR(inBottom)) + 1;
+					itemEntry->celRect.right = readSelectorValue(_segMan, itemEntry->object, SELECTOR(inRight)) + 1;
+					itemEntry->celRect.translate(itemEntry->x, itemEntry->y);
+					// TODO: maybe we should clip the cels rect with this, i'm not sure
+					//  the only currently known usage is game menu of gk1
+				} else {
+					switch (getSciVersion()) {
+					case SCI_VERSION_2:
+						if (view->isSci2Hires())
+							_screen->adjustToUpscaledCoordinates(itemEntry->y, itemEntry->x);
+						break;
+					case SCI_VERSION_2_1:
+						itemEntry->y = (itemEntry->y * _screen->getHeight()) / planeResY;
+						itemEntry->x = (itemEntry->x * _screen->getWidth()) / planeResX;
+						break;
+					default:
+						break;
+					}
 
-				if ((itemEntry->scaleX == 128) && (itemEntry->scaleY == 128))
-					view->getCelRect(itemEntry->loopNo, itemEntry->celNo, itemEntry->x, itemEntry->y, itemEntry->z, itemEntry->celRect);
-				else
-					view->getCelScaledRect(itemEntry->loopNo, itemEntry->celNo, itemEntry->x, itemEntry->y, itemEntry->z, itemEntry->scaleX, itemEntry->scaleY, itemEntry->celRect);
+					if ((itemEntry->scaleX == 128) && (itemEntry->scaleY == 128))
+						view->getCelRect(itemEntry->loopNo, itemEntry->celNo, itemEntry->x, itemEntry->y, itemEntry->z, itemEntry->celRect);
+					else
+						view->getCelScaledRect(itemEntry->loopNo, itemEntry->celNo, itemEntry->x, itemEntry->y, itemEntry->z, itemEntry->scaleX, itemEntry->scaleY, itemEntry->celRect);
 
-				Common::Rect nsRect = itemEntry->celRect;
-				switch (getSciVersion()) {
-				case SCI_VERSION_2:
-					if (view->isSci2Hires()) {
-						_screen->adjustBackUpscaledCoordinates(nsRect.top, nsRect.left);
-						_screen->adjustBackUpscaledCoordinates(nsRect.bottom, nsRect.right);
+					Common::Rect nsRect = itemEntry->celRect;
+					switch (getSciVersion()) {
+					case SCI_VERSION_2:
+						if (view->isSci2Hires()) {
+							_screen->adjustBackUpscaledCoordinates(nsRect.top, nsRect.left);
+							_screen->adjustBackUpscaledCoordinates(nsRect.bottom, nsRect.right);
+						}
+						break;
+					case SCI_VERSION_2_1:
+						nsRect.top = (nsRect.top * planeResY) / _screen->getHeight();
+						nsRect.left = (nsRect.left * planeResX) / _screen->getWidth();
+						nsRect.bottom = (nsRect.bottom * planeResY) / _screen->getHeight();
+						nsRect.right = (nsRect.right * planeResX) / _screen->getWidth();
+						break;
+					default:
+						break;
 					}
-					break;
-				case SCI_VERSION_2_1:
-					nsRect.top = (nsRect.top * planeResY) / _screen->getHeight();
-					nsRect.left = (nsRect.left * planeResX) / _screen->getWidth();
-					nsRect.bottom = (nsRect.bottom * planeResY) / _screen->getHeight();
-					nsRect.right = (nsRect.right * planeResX) / _screen->getWidth();
-					break;
-				default:
-					break;
+					writeSelectorValue(_segMan, itemEntry->object, SELECTOR(nsLeft), nsRect.left);
+					writeSelectorValue(_segMan, itemEntry->object, SELECTOR(nsTop), nsRect.top);
+					writeSelectorValue(_segMan, itemEntry->object, SELECTOR(nsRight), nsRect.right);
+					writeSelectorValue(_segMan, itemEntry->object, SELECTOR(nsBottom), nsRect.bottom);
 				}
-				writeSelectorValue(_segMan, itemEntry->object, SELECTOR(nsLeft), nsRect.left);
-				writeSelectorValue(_segMan, itemEntry->object, SELECTOR(nsTop), nsRect.top);
-				writeSelectorValue(_segMan, itemEntry->object, SELECTOR(nsRight), nsRect.right);
-				writeSelectorValue(_segMan, itemEntry->object, SELECTOR(nsBottom), nsRect.bottom);
 
 				int16 screenHeight = _screen->getHeight();
 				int16 screenWidth = _screen->getWidth();


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