aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/support/screen_manager.cpp35
-rw-r--r--engines/titanic/support/screen_manager.h95
2 files changed, 106 insertions, 24 deletions
diff --git a/engines/titanic/support/screen_manager.cpp b/engines/titanic/support/screen_manager.cpp
index 27c0d9886e..d795f78764 100644
--- a/engines/titanic/support/screen_manager.cpp
+++ b/engines/titanic/support/screen_manager.cpp
@@ -130,8 +130,15 @@ DirectDrawSurface *OSScreenManager::getDDSurface(SurfaceNum surfaceNum) {
return nullptr;
}
-void OSScreenManager::proc6() {}
-void OSScreenManager::proc7() {}
+CVideoSurface *OSScreenManager::lockSurface(SurfaceNum surfaceNum) {
+ CVideoSurface *surface = getSurface(surfaceNum);
+ surface->lock();
+ return surface;
+}
+
+void OSScreenManager::unlockSurface(CVideoSurface *surface) {
+ surface->unlock();
+}
CVideoSurface *OSScreenManager::getSurface(SurfaceNum surfaceNum) const {
if (surfaceNum == SURFACE_PRIMARY)
@@ -233,7 +240,11 @@ int OSScreenManager::writeString(int surfaceNum, const Rect &destRect,
yOffset, str, textCursor);
}
-void OSScreenManager::proc14() {}
+int OSScreenManager::writeString(int surfaceNum, const Rect &srcRect,
+ const Rect &destRect, const CString &str, CTextCursor *textCursor) {
+ // TODO
+ return 0;
+}
void OSScreenManager::setFontColor(byte r, byte g, byte b) {
_fonts[_fontNumber].setColor(r, g, b);
@@ -251,7 +262,15 @@ int OSScreenManager::stringWidth(const CString &str) {
return _fonts[_fontNumber].stringWidth(str);
}
-void OSScreenManager::proc19() {}
+void OSScreenManager::frameRect(SurfaceNum surfaceNum, const Rect &rect, byte r, byte g, byte b) {
+ Rect top(rect.left, rect.top, rect.right, rect.top + 1);
+ fillRect(surfaceNum, &top, r, g, b);
+ Rect bottom(rect.left, rect.bottom - 1, rect.right, rect.bottom);
+ fillRect(surfaceNum, &bottom, r, g, b);
+ Rect left(rect.left, rect.top, rect.left + 1, rect.bottom);
+ fillRect(surfaceNum, &left, r, g, b);
+ Rect right(rect.right - 1, rect.top, rect.right, rect.bottom);
+}
void OSScreenManager::clearSurface(SurfaceNum surfaceNum, Rect *bounds) {
if (surfaceNum == SURFACE_PRIMARY)
@@ -274,16 +293,12 @@ CVideoSurface *OSScreenManager::createSurface(const CResourceKey &key) {
return new OSVideoSurface(this, key);
}
-void OSScreenManager::proc23() {}
-void OSScreenManager::proc24() {}
-void OSScreenManager::proc25() {}
-
void OSScreenManager::showCursor() {
-
+ CScreenManager::_screenManagerPtr->_mouseCursor->show();
}
void OSScreenManager::hideCursor() {
-
+ CScreenManager::_screenManagerPtr->_mouseCursor->hide();
}
void OSScreenManager::destroyFrontAndBackBuffers() {
diff --git a/engines/titanic/support/screen_manager.h b/engines/titanic/support/screen_manager.h
index 21b40cad37..0736f1393c 100644
--- a/engines/titanic/support/screen_manager.h
+++ b/engines/titanic/support/screen_manager.h
@@ -89,8 +89,19 @@ public:
*/
virtual void drawCursors() = 0;
- virtual void proc6() = 0;
- virtual void proc7() = 0;
+ /**
+ * Locks a specified surface number for access and returns a pointer to it
+ */
+ virtual CVideoSurface *lockSurface(SurfaceNum surfaceNum) = 0;
+
+ /**
+ * Unlocks a previously locked surface
+ */
+ virtual void unlockSurface(CVideoSurface *surface) = 0;
+
+ /**
+ * Gets a specified surface number
+ */
virtual CVideoSurface *getSurface(SurfaceNum surfaceNum) const = 0;
/**
@@ -126,7 +137,16 @@ public:
virtual int writeString(int surfaceNum, const Rect &destRect,
int yOffset, const CString &str, CTextCursor *textCursor) = 0;
- virtual void proc14() = 0;
+ /**
+ * Write a string
+ * @param surfaceNum Destination surface
+ * @param srcRect Drawing area
+ * @param destRect Bounds of dest surface
+ * @param str Line or lines to write
+ * @param textCursor Optional text cursor pointer
+ */
+ virtual int writeString(int surfaceNum, const Rect &srcRect,
+ const Rect &destRect, const CString &str, CTextCursor *textCursor) = 0;
/**
* Set the font color
@@ -152,7 +172,10 @@ public:
*/
virtual int stringWidth(const CString &str) = 0;
- virtual void proc19() = 0;
+ /**
+ * Draws a frame enclosing the specified area
+ */
+ virtual void frameRect(SurfaceNum surfaceNum, const Rect &rect, byte r, byte g, byte b) = 0;
/**
* Clear a portion of a specified surface
@@ -173,10 +196,27 @@ public:
* Creates a surface from a specified resource
*/
virtual CVideoSurface *createSurface(const CResourceKey &key) = 0;
-
- virtual void proc24() = 0;
- virtual void proc25() = 0;
+
+ /**
+ * Get the top-left corner of the screen in global screen co-ordinates
+ * For ScummVM, this is always (0, 0), even in Windowed mode
+ */
+ virtual Point getScreenTopLeft() { return Point(0, 0); }
+
+ /**
+ * Waits for a vertical screen sync
+ * For ScummVM, this can be safely ignored
+ */
+ virtual void waitForVSync() {}
+
+ /**
+ * Show the mouse cursor
+ */
virtual void showCursor() = 0;
+
+ /**
+ * Hide the mouse cursor
+ */
virtual void hideCursor() = 0;
/**
@@ -228,8 +268,19 @@ public:
*/
virtual void drawCursors();
- virtual void proc6();
- virtual void proc7();
+ /**
+ * Locks a specified surface number for access and returns a pointer to it
+ */
+ virtual CVideoSurface *lockSurface(SurfaceNum surfaceNum);
+
+ /**
+ * Unlocks a previously locked surface
+ */
+ virtual void unlockSurface(CVideoSurface *surface);
+
+ /**
+ * Gets a specified surface number
+ */
virtual CVideoSurface *getSurface(SurfaceNum surfaceNum) const;
/**
@@ -268,7 +319,16 @@ public:
virtual int writeString(int surfaceNum, const Rect &destRect,
int yOffset, const CString &str, CTextCursor *textCursor);
- virtual void proc14();
+ /**
+ * Write a string
+ * @param surfaceNum Destination surface
+ * @param srcRect Drawing area
+ * @param destRect Bounds of dest surface
+ * @param str Line or lines to write
+ * @param textCursor Optional text cursor pointer
+ */
+ virtual int writeString(int surfaceNum, const Rect &srcRect,
+ const Rect &destRect, const CString &str, CTextCursor *textCursor);
/**
* Set the font color
@@ -294,7 +354,10 @@ public:
*/
virtual int stringWidth(const CString &str);
- virtual void proc19();
+ /**
+ * Draws a frame enclosing the specified area
+ */
+ virtual void frameRect(SurfaceNum surfaceNum, const Rect &rect, byte r, byte g, byte b);
/**
* Clear a portion of the screen surface
@@ -316,10 +379,14 @@ public:
*/
virtual CVideoSurface *createSurface(const CResourceKey &key);
- virtual void proc23();
- virtual void proc24();
- virtual void proc25();
+ /**
+ * Show the mouse cursor
+ */
virtual void showCursor();
+
+ /**
+ * Hide the mouse cursor
+ */
virtual void hideCursor();
};