diff options
| author | Vicent Marti | 2008-07-02 18:11:41 +0000 | 
|---|---|---|
| committer | Vicent Marti | 2008-07-02 18:11:41 +0000 | 
| commit | d385c34dd0c52ccc4c7fff50e88361dbb2cd588d (patch) | |
| tree | ce1a73453fb8d76a84bfa9f068c05555c6a47d3e | |
| parent | 6c85e960b202ea8cb3af87c7d3c644690f51e511 (diff) | |
| download | scummvm-rg350-d385c34dd0c52ccc4c7fff50e88361dbb2cd588d.tar.gz scummvm-rg350-d385c34dd0c52ccc4c7fff50e88361dbb2cd588d.tar.bz2 scummvm-rg350-d385c34dd0c52ccc4c7fff50e88361dbb2cd588d.zip  | |
InterfaceManager functionality translated into a Theme subclass "ThemeRenderer" to easen integration with the current GUI.
svn-id: r32876
| -rw-r--r-- | base/main.cpp | 4 | ||||
| -rw-r--r-- | dists/msvc9/scummvm.vcproj | 16 | ||||
| -rw-r--r-- | graphics/VectorRenderer.cpp | 6 | ||||
| -rw-r--r-- | graphics/VectorRenderer.h | 2 | ||||
| -rw-r--r-- | gui/ThemeDefaultXML.cpp | 4 | ||||
| -rw-r--r-- | gui/ThemeParser.cpp | 13 | ||||
| -rw-r--r-- | gui/ThemeParser.h | 8 | ||||
| -rw-r--r-- | gui/ThemeRenderer.cpp (renamed from gui/InterfaceManager.cpp) | 175 | ||||
| -rw-r--r-- | gui/ThemeRenderer.h (renamed from gui/InterfaceManager.h) | 119 | ||||
| -rw-r--r-- | gui/object.h | 3 | ||||
| -rw-r--r-- | gui/theme.h | 4 | 
11 files changed, 101 insertions, 253 deletions
diff --git a/base/main.cpp b/base/main.cpp index f69b8399e6..9b76e0514a 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -43,7 +43,7 @@  #include "common/system.h"  #include "gui/newgui.h"  #include "gui/message.h" -#include "gui/InterfaceManager.h" +#include "gui/ThemeRenderer.h"  #include "gui/ThemeParser.h"  #if defined(_WIN32_WCE) @@ -70,6 +70,8 @@ static bool launcherDialog(OSystem &system) {  	// Clear the main screen  	system.clearScreen(); +	GUI::ThemeRenderer *test = new GUI::ThemeRenderer; +  #if defined LOL  //	g_InterfaceManager.runGUI(); diff --git a/dists/msvc9/scummvm.vcproj b/dists/msvc9/scummvm.vcproj index cd502b3ca8..a901a0c277 100644 --- a/dists/msvc9/scummvm.vcproj +++ b/dists/msvc9/scummvm.vcproj @@ -1105,14 +1105,6 @@  				>  			</File>  			<File -				RelativePath="..\..\gui\InterfaceManager.cpp" -				> -			</File> -			<File -				RelativePath="..\..\gui\InterfaceManager.h" -				> -			</File> -			<File  				RelativePath="..\..\gui\Key.cpp"  				>  			</File> @@ -1248,6 +1240,14 @@  				</FileConfiguration>  			</File>  			<File +				RelativePath="..\..\gui\ThemeRenderer.cpp" +				> +			</File> +			<File +				RelativePath="..\..\gui\ThemeRenderer.h" +				> +			</File> +			<File  				RelativePath="..\..\gui\widget.cpp"  				>  			</File> diff --git a/graphics/VectorRenderer.cpp b/graphics/VectorRenderer.cpp index 1f8ec3c397..f679d2fe67 100644 --- a/graphics/VectorRenderer.cpp +++ b/graphics/VectorRenderer.cpp @@ -30,17 +30,17 @@  #include "graphics/surface.h"  #include "graphics/colormasks.h" -#include "gui/InterfaceManager.h" +#include "gui/ThemeRenderer.h"  #include "graphics/VectorRenderer.h"  namespace Graphics {  VectorRenderer *createRenderer(int mode) {  	switch (mode) { -	case GUI::InterfaceManager::kGfxStandard16bit: +	case GUI::ThemeRenderer::kGfxStandard16bit:  		return new VectorRendererSpec<uint16, ColorMasks<565> >; -	case GUI::InterfaceManager::kGfxAntialias16bit: +	case GUI::ThemeRenderer::kGfxAntialias16bit:  		return new VectorRendererAA<uint16, ColorMasks<565> >;  	default: diff --git a/graphics/VectorRenderer.h b/graphics/VectorRenderer.h index 9b2e6cd383..3267d44687 100644 --- a/graphics/VectorRenderer.h +++ b/graphics/VectorRenderer.h @@ -32,7 +32,7 @@  #include "graphics/surface.h"  #include "graphics/colormasks.h" -#include "gui/InterfaceManager.h" +#include "gui/ThemeRenderer.h"  namespace Graphics { diff --git a/gui/ThemeDefaultXML.cpp b/gui/ThemeDefaultXML.cpp index cd571e680e..4b48e11991 100644 --- a/gui/ThemeDefaultXML.cpp +++ b/gui/ThemeDefaultXML.cpp @@ -24,11 +24,11 @@   */  #include "common/system.h" -#include "gui/InterfaceManager.h" +#include "gui/ThemeRenderer.h"  namespace GUI { -bool InterfaceManager::loadDefaultXML() { +bool ThemeRenderer::loadDefaultXML() {  	const char *defaultXML =  /**   * Default theme description file. Work in progress. diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index 07789ebee3..eac8c20978 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -30,8 +30,9 @@  #include "common/hash-str.h"  #include "common/xmlparser.h" -#include "gui/InterfaceManager.h" +#include "gui/ThemeRenderer.h"  #include "gui/ThemeParser.h" +#include "gui/NewGui.h"  #include "graphics/VectorRenderer.h"  namespace GUI { @@ -39,7 +40,7 @@ namespace GUI {  using namespace Graphics;  using namespace Common; -ThemeParser::ThemeParser(InterfaceManager *parent) : XMLParser() { +ThemeParser::ThemeParser(ThemeRenderer *parent) : XMLParser() {  	_callbacks["drawstep"] = &ThemeParser::parserCallback_DRAWSTEP;  	_callbacks["drawdata"] = &ThemeParser::parserCallback_DRAWDATA;  	_callbacks["palette"] = &ThemeParser::parserCallback_palette; @@ -59,7 +60,7 @@ ThemeParser::ThemeParser(InterfaceManager *parent) : XMLParser() {  	_defaultStepGlobal = defaultDrawStep();  	_defaultStepLocal = 0; -	_GUI = parent; +	_theme = parent;  }  bool ThemeParser::keyCallback(Common::String keyName) { @@ -213,7 +214,7 @@ bool ThemeParser::parserCallback_DRAWSTEP() {  	if (!parseDrawStep(stepNode, drawstep, true))  		return false; -	_GUI->addDrawStep(drawdataNode->values["id"], drawstep); +	_theme->addDrawStep(drawdataNode->values["id"], drawstep);  	return true;  } @@ -229,7 +230,7 @@ bool ThemeParser::parserCallback_DRAWDATA() {  	if (drawdataNode->values.contains("id") == false)  		return parserError("DrawData keys must contain an identifier."); -	InterfaceManager::DrawData id = _GUI->getDrawDataId(drawdataNode->values["id"]); +	ThemeRenderer::DrawData id = _theme->getDrawDataId(drawdataNode->values["id"]);  	if (id == -1)  		return parserError("%s is not a valid DrawData set identifier.", drawdataNode->values["id"].c_str()); @@ -252,7 +253,7 @@ bool ThemeParser::parserCallback_DRAWDATA() {  		}  	}*/ -	if (_GUI->addDrawData(id, cached) == false) +	if (_theme->addDrawData(id, cached) == false)  		return parserError("Repeated DrawData: Only one set of Drawing Data for a widget may be specified on each platform.");  	if (_defaultStepLocal) { diff --git a/gui/ThemeParser.h b/gui/ThemeParser.h index 68e8272b80..56d45eb802 100644 --- a/gui/ThemeParser.h +++ b/gui/ThemeParser.h @@ -36,7 +36,7 @@  #include "common/xmlparser.h"  #include "graphics/VectorRenderer.h" -#include "gui/InterfaceManager.h" +#include "gui/ThemeRenderer.h"  /**   ********************************************* @@ -308,7 +308,7 @@ namespace GUI {  using namespace Graphics;  using namespace Common; -class InterfaceManager; +class ThemeRenderer;  class ThemeParser : public XMLParser {  	typedef void (VectorRenderer::*DrawingFunctionCallback)(const Common::Rect &, const DrawStep &); @@ -316,10 +316,10 @@ class ThemeParser : public XMLParser {  	typedef GUI::InterfaceManager InterfaceManager;  public: -	ThemeParser(InterfaceManager *parent); +	ThemeParser(GUI::ThemeRenderer *parent);  protected: -	InterfaceManager *_GUI; +	ThemeRenderer *_theme;  	bool keyCallback(Common::String keyName);  	bool parserCallback_DRAWSTEP(); diff --git a/gui/InterfaceManager.cpp b/gui/ThemeRenderer.cpp index 80fa0d33db..283860341b 100644 --- a/gui/InterfaceManager.cpp +++ b/gui/ThemeRenderer.cpp @@ -32,16 +32,14 @@  #include "gui/launcher.h" -#include "gui/InterfaceManager.h" +#include "gui/ThemeRenderer.h"  #include "graphics/VectorRenderer.h" -DECLARE_SINGLETON(GUI::InterfaceManager); -  namespace GUI {  using namespace Graphics; -const char *InterfaceManager::kDrawDataStrings[] = { +const char *ThemeRenderer::kDrawDataStrings[] = {  	"mainmenu_bg",  	"special_bg",  	"plain_bg", @@ -70,7 +68,7 @@ const char *InterfaceManager::kDrawDataStrings[] = {  	"separator"  }; -InterfaceManager::InterfaceManager() :  +ThemeRenderer::ThemeRenderer() :   	_vectorRenderer(0), _system(0), _graphicsMode(kGfxDisabled),   	_screen(0), _bytesPerPixel(0), _initOk(false), _themeOk(false),  	_needThemeLoad(false), _enabled(false) { @@ -86,7 +84,7 @@ InterfaceManager::InterfaceManager() :  }  template<typename PixelType>  -void InterfaceManager::screenInit() { +void ThemeRenderer::screenInit() {  	freeScreen();  	_screen = new Surface; @@ -94,7 +92,7 @@ void InterfaceManager::screenInit() {  	_system->clearOverlay();  } -void InterfaceManager::setGraphicsMode(Graphics_Mode mode) { +void ThemeRenderer::setGraphicsMode(Graphics_Mode mode) {  	// FIXME: reload theme everytime we change resolution...  	// what if we change the renderer too? @@ -120,14 +118,14 @@ void InterfaceManager::setGraphicsMode(Graphics_Mode mode) {  	_vectorRenderer->setSurface(_screen);  } -void InterfaceManager::addDrawStep(Common::String &drawDataId, Graphics::DrawStep *step) { +void ThemeRenderer::addDrawStep(Common::String &drawDataId, Graphics::DrawStep *step) {  	DrawData id = getDrawDataId(drawDataId);  	assert(_widgets[id] != 0);  	_widgets[id]->_steps.push_back(step);  } -bool InterfaceManager::addDrawData(DrawData data_id, bool cached) { +bool ThemeRenderer::addDrawData(DrawData data_id, bool cached) {  	assert(data_id >= 0 && data_id < kDrawDataMAX);  	if (_widgets[data_id] != 0) @@ -139,7 +137,7 @@ bool InterfaceManager::addDrawData(DrawData data_id, bool cached) {  	return true;  } -bool InterfaceManager::loadTheme(Common::String themeName) { +bool ThemeRenderer::loadTheme(Common::String themeName) {  	unloadTheme();  	if (!loadThemeXML(themeName)) { @@ -165,7 +163,7 @@ bool InterfaceManager::loadTheme(Common::String themeName) {  	return true;  } -bool InterfaceManager::loadThemeXML(Common::String themeName) { +bool ThemeRenderer::loadThemeXML(Common::String themeName) {  	assert(_parser);  	if (ConfMan.hasKey("themepath")) @@ -184,7 +182,7 @@ bool InterfaceManager::loadThemeXML(Common::String themeName) {  	return parser()->parse();  } -void InterfaceManager::init() { +bool ThemeRenderer::init() {  	if (!_screen || _system->getOverlayWidth() != _screen->w ||  		_system->getOverlayHeight() != _screen->h )  		setGraphicsMode(_graphicsMode); @@ -193,20 +191,21 @@ void InterfaceManager::init() {  		loadTheme();  	_initOk = true; +	return true;  } -bool InterfaceManager::isWidgetCached(DrawData type, const Common::Rect &r) { +bool ThemeRenderer::isWidgetCached(DrawData type, const Common::Rect &r) {  	return _widgets[type] && _widgets[type]->_cached &&  		_widgets[type]->_surfaceCache->w == r.width() &&   		_widgets[type]->_surfaceCache->h == r.height();  } -void InterfaceManager::drawCached(DrawData type, const Common::Rect &r) { +void ThemeRenderer::drawCached(DrawData type, const Common::Rect &r) {  	assert(_widgets[type]->_surfaceCache->bytesPerPixel == _screen->bytesPerPixel);  	_vectorRenderer->blitSurface(_widgets[type]->_surfaceCache, r);  } -void InterfaceManager::drawDD(DrawData type, const Common::Rect &r) { +void ThemeRenderer::drawDD(DrawData type, const Common::Rect &r) {  	if (isWidgetCached(type, r)) {  		drawCached(type, r);  	} else { @@ -215,7 +214,7 @@ void InterfaceManager::drawDD(DrawData type, const Common::Rect &r) {  	}  } -void InterfaceManager::drawButton(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, uint16 hints) { +void ThemeRenderer::drawButton(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, uint16 hints) {  	if (!ready())  		return; @@ -229,7 +228,7 @@ void InterfaceManager::drawButton(const Common::Rect &r, const Common::String &s  	addDirtyRect(r);  } -void InterfaceManager::drawLineSeparator(const Common::Rect &r, WidgetStateInfo state) { +void ThemeRenderer::drawLineSeparator(const Common::Rect &r, WidgetStateInfo state) {  	if (!ready())  		return; @@ -237,7 +236,7 @@ void InterfaceManager::drawLineSeparator(const Common::Rect &r, WidgetStateInfo  	addDirtyRect(r);  } -void InterfaceManager::drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, WidgetStateInfo state) { +void ThemeRenderer::drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, WidgetStateInfo state) {  	if (!ready())  		return; @@ -252,7 +251,7 @@ void InterfaceManager::drawCheckbox(const Common::Rect &r, const Common::String  	addDirtyRect(r);  } -void InterfaceManager::drawSlider(const Common::Rect &r, int width, WidgetStateInfo state) { +void ThemeRenderer::drawSlider(const Common::Rect &r, int width, WidgetStateInfo state) {  	if (!ready())  		return; @@ -266,140 +265,22 @@ void InterfaceManager::drawSlider(const Common::Rect &r, int width, WidgetStateI  	addDirtyRect(r);  } -void InterfaceManager::drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState sb_state, WidgetStateInfo state) { +void ThemeRenderer::drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState sb_state, WidgetStateInfo state) {  	if (!ready())  		return;  } -void InterfaceManager::redrawDialogStack() { -	_vectorRenderer->clearSurface(); - -	for (int i = 0; i < _dialogStack.size(); ++i) -		_dialogStack[i]->draw(); -} - -void InterfaceManager::openDialog(Dialogs dname, Dialog *parent) { -	Dialog *dlg = 0; -	switch (dname) { -		case kDialogLauncher: -			dlg = new GUI::LauncherDialog; -			break; -			 -		default: -			error("Unhandled dialog opening"); -			break; -	} -	 -	if (dlg) -		_dialogStack.push(dlg); -} - -int InterfaceManager::runGUI() { -	init(); - -	if (!ready()) -		return 0; - -	Common::EventManager *eventMan = _system->getEventManager(); -	Dialog *activeDialog = getTopDialog(); -	Dialog *lastDialog = 0; - -	if (!activeDialog) -		return 0; - -	bool stackChange; - -	int button; -	uint32 time; - -	_system->showOverlay(); - -	while (activeDialog) { // draw!! -		stackChange = (activeDialog != lastDialog); -		lastDialog = activeDialog; - -		if (stackChange || needRedraw()) -			redrawDialogStack(); - -		if (!_dirtyScreen.empty()) { -			for (uint i = 0; i < _dirtyScreen.size(); ++i) -				_vectorRenderer->copyFrame(_system, _dirtyScreen[i]); -			_system->updateScreen(); -			_dirtyScreen.clear(); -		} - -		Common::Event event; - -		while (eventMan->pollEvent(event)) { -			activeDialog->handleTickle(); - -			Common::Point mouse(event.mouse.x - activeDialog->_x, event.mouse.y - activeDialog->_y); - -			switch (event.type) { -			case Common::EVENT_KEYDOWN: -				activeDialog->handleKeyDown(event.kbd); -				break; - -			case Common::EVENT_KEYUP: -				activeDialog->handleKeyUp(event.kbd); -				break; - -			case Common::EVENT_MOUSEMOVE: -				activeDialog->handleMouseMoved(mouse.x, mouse.y, 0); -				break; - -			case Common::EVENT_LBUTTONDOWN: -			case Common::EVENT_RBUTTONDOWN: -				button = (event.type == Common::EVENT_LBUTTONDOWN ? 1 : 2); -				time = _system->getMillis(); -				if (_lastClick.count && (time < _lastClick.time + kDoubleClickDelay) -							&& ABS(_lastClick.x - event.mouse.x) < 3 -							&& ABS(_lastClick.y - event.mouse.y) < 3) { -					_lastClick.count++; -				} else { -					_lastClick.x = event.mouse.x; -					_lastClick.y = event.mouse.y; -					_lastClick.count = 1; -				} -				_lastClick.time = time; -				activeDialog->handleMouseDown(mouse.x, mouse.y, button, _lastClick.count); -				break; - -			case Common::EVENT_LBUTTONUP: -			case Common::EVENT_RBUTTONUP: -				button = (event.type == Common::EVENT_LBUTTONUP ? 1 : 2); -				activeDialog->handleMouseUp(mouse.x, mouse.y, button, _lastClick.count); -				break; - -			case Common::EVENT_WHEELUP: -				activeDialog->handleMouseWheel(mouse.x, mouse.y, -1); -				break; - -			case Common::EVENT_WHEELDOWN: -				activeDialog->handleMouseWheel(mouse.x, mouse.y, 1); -				break; - -			case Common::EVENT_QUIT: -				_system->quit(); -				return 1; - -			case Common::EVENT_SCREEN_CHANGED: -				screenChange(); -				break; - -			default: -				break; -			} -		} +void ThemeRenderer::renderDirtyScreen() { +	// TODO: This isn't really optimized. Check dirty squares for collisions +	// and all that. +	if (_dirtyScreen.empty()) +		return; -		activeDialog = getTopDialog(); -		_system->delayMillis(10); -	} +	for (uint i = 0; i < _dirtyScreen.size(); ++i) +		_vectorRenderer->copyFrame(_system, _dirtyScreen[i]); -	_system->hideOverlay(); -	return 1; +	_system->updateScreen(); +	_dirtyScreen.clear();  } - -  } // end of namespace GUI. diff --git a/gui/InterfaceManager.h b/gui/ThemeRenderer.h index ac612e0c52..e9904d8ae3 100644 --- a/gui/InterfaceManager.h +++ b/gui/ThemeRenderer.h @@ -62,7 +62,7 @@ struct WidgetDrawData {  	}  }; -class InterfaceManager { +class ThemeRenderer : public Theme {  	typedef Common::String String;  	typedef GUI::Dialog Dialog; @@ -79,16 +79,6 @@ public:  		kGfxStandard16bit,  		kGfxAntialias16bit  	}; -	 -	enum Dialogs { -		kDialogLauncher, -		kDialogMAX -	}; - -	enum { -		kDoubleClickDelay = 500, // milliseconds -		kCursorAnimateDelay = 250 -	};  	enum DrawData {  		kDDMainDialogBackground, @@ -120,61 +110,9 @@ public:  		kDrawDataMAX  	}; -	enum FontStyle { -		kFontStyleBold = 0,			//! A bold font. This is also the default font. -		kFontStyleNormal = 1,		//! A normal font. -		kFontStyleItalic = 2,		//! Italic styled font. -		kFontStyleFixedNormal = 3,	//! Fixed size font. -		kFontStyleFixedBold = 4,	//! Fixed size bold font. -		kFontStyleFixedItalic = 5,	//! Fixed size italic font. -		kFontStyleMax -	}; - -	enum State { -		kStateDisabled,		//! Indicates that the widget is disabled, that does NOT include that it is invisible -		kStateEnabled,		//! Indicates that the widget is enabled -		kStateHighlight		//! Indicates that the widget is highlighted by the user -	}; - -	//! Widget background type -	enum WidgetBackground { -		kWidgetBackgroundNo,			//! No background at all -		kWidgetBackgroundPlain,			//! Simple background, this may not include borders -		kWidgetBackgroundBorder,		//! Same as kWidgetBackgroundPlain just with a border -		kWidgetBackgroundBorderSmall,	//! Same as kWidgetBackgroundPlain just with a small border -		kWidgetBackgroundEditText,		//! Background used for edit text fields -		kWidgetBackgroundSlider			//! Background used for sliders -	}; - -	typedef State WidgetStateInfo; - -	//! State of the scrollbar -	enum ScrollbarState { -		kScrollbarStateNo, -		kScrollbarStateUp, -		kScrollbarStateDown, -		kScrollbarStateSlider, -		kScrollbarStateSinglePage -	}; - -	//! Defined the align of the text -	enum TextAlign { -		kTextAlignLeft,		//! Text should be aligned to the left -		kTextAlignCenter,	//! Text should be centered -		kTextAlignRight		//! Text should be aligned to the right -	}; - -	//! Function used to process areas other than the current dialog -	enum ShadingStyle { -		kShadingNone,		//! No special post processing -		kShadingDim,		//! Dimming unused areas -		kShadingLuminance	//! Converting colors to luminance for unused areas -	}; - +	ThemeRenderer(); -	InterfaceManager(); - -	~InterfaceManager() { +	~ThemeRenderer() {  		freeRenderer();  		freeScreen();  		unloadTheme(); @@ -184,10 +122,22 @@ public:  			delete _dialogStack.pop();  	} -	void setGraphicsMode(Graphics_Mode mode); -	int runGUI(); - -	void init(); +	// virtual methods from Theme +	bool init(); +	void deinit() {} +	void refresh() {} +	void enable() {} +	void disable() {} +	void openDialog() {} +	void closeAllDialogs() {} +	void clearAll() {} +	void updateScreen() {} +	void resetDrawArea() {} +	void openDialog(bool top) {} + +	virtual bool isDynamic() { +		return true; +	}  	/** Font management */  	const Graphics::Font *getFont(FontStyle font) const { return _font; } @@ -207,6 +157,16 @@ public:  	void drawCaret(const Common::Rect &r, bool erase, WidgetStateInfo state = kStateEnabled) {}  	void drawLineSeparator(const Common::Rect &r, WidgetStateInfo state = kStateEnabled); +	void drawDialogBackground(const Common::Rect &r, uint16 hints, WidgetStateInfo state) {} +	void drawText(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font) {} +	void drawChar(const Common::Rect &r, byte ch, const Graphics::Font *font, WidgetStateInfo state) {} + +	bool addDirtyRect(Common::Rect r, bool backup = false, bool special = false) { +		_dirtyScreen.push_back(r); +		return true; +	} + +	// custom stuff - tanoku  	DrawData getDrawDataId(Common::String &name) {  		for (int i = 0; i < kDrawDataMAX; ++i)  			if (name.compareToIgnoreCase(kDrawDataStrings[i]) == 0) @@ -237,13 +197,14 @@ public:  	}  	bool loadTheme(Common::String themeName); -	void openDialog(Dialogs dname, Dialog *parent);  	void closeTopDialog() {  		assert(_dialogStack.empty() == false);  		delete _dialogStack.pop();  	} +	void setGraphicsMode(Graphics_Mode mode); +  protected:  	template<typename PixelType> void screenInit(); @@ -261,6 +222,7 @@ protected:  	}  	void screenChange() {} +	void renderDirtyScreen();  	void freeRenderer() {  		delete _vectorRenderer; @@ -296,8 +258,15 @@ protected:  	inline void drawDD(DrawData type, const Common::Rect &r); -	void addDirtyRect(const Common::Rect &r) { -		_dirtyScreen.push_back(r); +	// TODO +	void restoreBackground(Common::Rect r, bool special = false) {} + +	int getTabSpacing() const { +		return 0; +	} + +	int getTabPadding() const { +		return 3;  	}  	OSystem *_system; @@ -321,12 +290,6 @@ protected:  	bool _caching;  	bool _needThemeLoad;  	bool _enabled; - -	struct { -		int16 x, y;	// Position of mouse when the click occured -		uint32 time;	// Time -		int count;	// How often was it already pressed? -	} _lastClick;  };  } // end of namespace GUI. diff --git a/gui/object.h b/gui/object.h index 2bdff3f76c..01046bd668 100644 --- a/gui/object.h +++ b/gui/object.h @@ -29,7 +29,6 @@ namespace GUI {  class CommandReceiver;  class CommandSender; -class InterfaceManager;  class CommandReceiver {  	friend class CommandSender; @@ -66,7 +65,6 @@ protected:  	Common::String _name;  	Widget		*_firstWidget; -	InterfaceManager *_GUI;  public:  	GuiObject(int x, int y, int w, int h) : _x(x), _y(y), _w(w), _h(h), _name(""), _firstWidget(0)  { } @@ -85,7 +83,6 @@ public:  	virtual void	draw() = 0;  	virtual void	reflowLayout(); -	virtual void setInterfaceManager(InterfaceManager *manager) { _GUI = manager; }  protected:  	virtual void	releaseFocus() = 0; diff --git a/gui/theme.h b/gui/theme.h index 4f61609fbd..320d2544e0 100644 --- a/gui/theme.h +++ b/gui/theme.h @@ -348,6 +348,10 @@ public:  	const Common::String &getStylefileName() const { return _stylefile; }  	const Common::String &getThemeName() const { return _stylename; } +	virtual bool isDynamic() { +		return false; +	}	 +  	/**  	 * Checks if the theme renderer supports drawing of images.  	 *  | 
