aboutsummaryrefslogtreecommitdiff
path: root/engines/gargoyle/streams.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gargoyle/streams.cpp')
-rw-r--r--engines/gargoyle/streams.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/engines/gargoyle/streams.cpp b/engines/gargoyle/streams.cpp
index 0f95984046..9d257f2fa1 100644
--- a/engines/gargoyle/streams.cpp
+++ b/engines/gargoyle/streams.cpp
@@ -63,6 +63,11 @@ void Stream::close(StreamResult *result) {
delete this;
}
+void Stream::setZColors(glui32 fg, glui32 bg) {
+ if (_writable && g_conf->_styleHint)
+ Windows::_forceRedraw = true;
+}
+
/*--------------------------------------------------------------------------*/
void WindowStream::close(StreamResult *result) {
@@ -217,6 +222,67 @@ void WindowStream::setHyperlink(glui32 linkVal) {
_window->_attr.hyper = linkVal;
}
+void WindowStream::setZColors(glui32 fg, glui32 bg) {
+ if (!_writable || !g_conf->_styleHint)
+ return;
+
+ byte fore[3], back[3];
+ fore[0] = (fg >> 16) & 0xff;
+ fore[1] = (fg >> 8) & 0xff;
+ fore[2] = (fg) & 0xff;
+ back[0] = (bg >> 16) & 0xff;
+ back[1] = (bg >> 8) & 0xff;
+ back[2] = (bg) & 0xff;
+
+ if (fg != zcolor_Transparent && fg != zcolor_Cursor) {
+ if (fg == zcolor_Default) {
+ _window->_attr.fgset = 0;
+ _window->_attr.fgcolor = 0;
+ Windows::_overrideFgSet = false;
+ Windows::_overrideFgVal = 0;
+
+ Common::copy(g_conf->_moreSave, g_conf->_moreSave + 3, g_conf->_moreColor);
+ Common::copy(g_conf->_caretSave, g_conf->_caretSave + 3, g_conf->_caretColor);
+ Common::copy(g_conf->_linkSave, g_conf->_linkSave + 3, g_conf->_linkColor);
+ } else if (fg != zcolor_Current) {
+ _window->_attr.fgset = 1;
+ _window->_attr.fgcolor = fg;
+ Windows::_overrideFgSet = true;
+ Windows::_overrideFgVal = fg;
+
+ Common::copy(fore, fore + 3, g_conf->_moreColor);
+ Common::copy(fore, fore + 3, g_conf->_caretColor);
+ Common::copy(fore, fore + 3, g_conf->_linkColor);
+ }
+ }
+
+ if (bg != zcolor_Transparent && bg != zcolor_Cursor) {
+ if (bg == zcolor_Default) {
+ _window->_attr.bgset = 0;
+ _window->_attr.bgcolor = 0;
+ Windows::_overrideBgSet = false;
+ Windows::_overrideBgVal = 0;
+
+ Common::copy(g_conf->_windowSave, g_conf->_windowSave + 3, g_conf->_windowColor);
+ Common::copy(g_conf->_borderSave, g_conf->_borderSave + 3, g_conf->_borderColor);
+ } else if (bg != zcolor_Current) {
+ _window->_attr.bgset = 1;
+ _window->_attr.bgcolor = bg;
+ Windows::_overrideBgSet = true;
+ Windows::_overrideBgVal = bg;
+
+ Common::copy(back, back + 3, g_conf->_windowColor);
+ Common::copy(back, back + 3, g_conf->_borderColor);
+ }
+ }
+
+ Windows::_overrideReverse = !(fg == zcolor_Default && bg == zcolor_Default);
+ Windows::_forceRedraw = true;
+
+ if (_window->_echoStream)
+ _window->_echoStream->setZColors(fg, bg);
+}
+
/*--------------------------------------------------------------------------*/
MemoryStream::MemoryStream(Streams *streams, void *buf, size_t buflen, FileMode mode, uint32 rock, bool unicode) :