diff options
-rw-r--r-- | engines/agi/graphics.cpp | 3 | ||||
-rw-r--r-- | engines/cine/gfx.cpp | 3 | ||||
-rw-r--r-- | engines/scumm/cursor.cpp | 3 | ||||
-rw-r--r-- | engines/scumm/he/resource_he.cpp | 4 | ||||
-rw-r--r-- | engines/scumm/he/wiz_he.cpp | 4 | ||||
-rw-r--r-- | graphics/cursorman.cpp | 80 | ||||
-rw-r--r-- | graphics/cursorman.h | 74 | ||||
-rw-r--r-- | graphics/module.mk | 1 | ||||
-rw-r--r-- | graphics/paletteman.cpp | 119 | ||||
-rw-r--r-- | graphics/paletteman.h | 118 | ||||
-rw-r--r-- | gui/ThemeModern.cpp | 7 | ||||
-rw-r--r-- | gui/newgui.cpp | 7 |
12 files changed, 165 insertions, 258 deletions
diff --git a/engines/agi/graphics.cpp b/engines/agi/graphics.cpp index be2ddeebab..9ca53b3a74 100644 --- a/engines/agi/graphics.cpp +++ b/engines/agi/graphics.cpp @@ -25,7 +25,6 @@ #include "common/stdafx.h" #include "graphics/cursorman.h" -#include "graphics/paletteman.h" #include "agi/agi.h" #include "agi/graphics.h" @@ -441,7 +440,7 @@ int GfxMgr::initVideo() { 255, 255, 255, 0 }; - PaletteMan.replaceCursorPalette(cursorPalette, 0, 3); + CursorMan.replaceCursorPalette(cursorPalette, 0, 3); CursorMan.replaceCursor(mouseCursor, 16, 16, 1, 1); return errOK; diff --git a/engines/cine/gfx.cpp b/engines/cine/gfx.cpp index 46a7eb26d0..b5cdecd7de 100644 --- a/engines/cine/gfx.cpp +++ b/engines/cine/gfx.cpp @@ -28,7 +28,6 @@ #include "common/system.h" #include "graphics/cursorman.h" -#include "graphics/paletteman.h" namespace Cine { @@ -125,7 +124,7 @@ void setMouseCursor(int cursor) { ++src; } CursorMan.replaceCursor(mouseCursor, 16, 16, mc->hotspotX, mc->hotspotY); - PaletteMan.replaceCursorPalette(cursorPalette, 0, 2); + CursorMan.replaceCursorPalette(cursorPalette, 0, 2); currentMouseCursor = cursor; } } diff --git a/engines/scumm/cursor.cpp b/engines/scumm/cursor.cpp index 45ed70d8a5..66b3fc8a39 100644 --- a/engines/scumm/cursor.cpp +++ b/engines/scumm/cursor.cpp @@ -24,7 +24,6 @@ #include "common/system.h" #include "common/util.h" #include "graphics/cursorman.h" -#include "graphics/paletteman.h" #include "scumm/bomp.h" #include "scumm/charset.h" #include "scumm/intern.h" @@ -178,7 +177,7 @@ void ScummEngine_v70he::setDefaultCursor() { // Since white color position is not guaranteed // we setup our own palette if supported by backend - PaletteMan.replaceCursorPalette(palette, 0xfe, 2); + CursorMan.replaceCursorPalette(palette, 0xfe, 2); updateCursor(); } diff --git a/engines/scumm/he/resource_he.cpp b/engines/scumm/he/resource_he.cpp index d20a03f255..3e67eb2e8f 100644 --- a/engines/scumm/he/resource_he.cpp +++ b/engines/scumm/he/resource_he.cpp @@ -33,7 +33,7 @@ #include "scumm/he/sound_he.h" #include "sound/wave.h" -#include "graphics/paletteman.h" +#include "graphics/cursorman.h" #include "common/stream.h" #include "common/system.h" @@ -112,7 +112,7 @@ void ResExtractor::setCursor(int id) { } if (cc->palette) - PaletteMan.replaceCursorPalette(cc->palette, 0, cc->palSize); + CursorMan.replaceCursorPalette(cc->palette, 0, cc->palSize); _vm->setCursorHotspot(cc->hotspot_x, cc->hotspot_y); _vm->setCursorFromBuffer(cc->bitmap, cc->w, cc->h, cc->w); diff --git a/engines/scumm/he/wiz_he.cpp b/engines/scumm/he/wiz_he.cpp index 244d8821a7..b555dfeb65 100644 --- a/engines/scumm/he/wiz_he.cpp +++ b/engines/scumm/he/wiz_he.cpp @@ -24,7 +24,7 @@ #include "common/stdafx.h" #include "common/system.h" -#include "graphics/paletteman.h" +#include "graphics/cursorman.h" #include "scumm/he/intern_he.h" #include "scumm/resource.h" #include "scumm/scumm.h" @@ -1539,7 +1539,7 @@ void Wiz::loadWizCursor(int resId) { _vm->setCursorFromBuffer(cursor, cw, ch, cw); // Since we set up cursor palette for default cursor, disable it now - PaletteMan.disableCursorPalette(true); + CursorMan.disableCursorPalette(true); free(cursor); } diff --git a/graphics/cursorman.cpp b/graphics/cursorman.cpp index 53a1bf1abb..06364b860a 100644 --- a/graphics/cursorman.cpp +++ b/graphics/cursorman.cpp @@ -34,6 +34,7 @@ CursorManager::CursorManager() { if (!g_initialized) { g_initialized = true; _cursorStack.clear(); + _cursorPaletteStack.clear(); } } @@ -107,4 +108,83 @@ void CursorManager::replaceCursor(const byte *buf, uint w, uint h, int hotspotX, g_system->setMouseCursor(cur->_data, w, h, hotspotX, hotspotY, keycolor, targetScale); } +void CursorManager::disableCursorPalette(bool disable) { + if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) + return; + + if (_cursorPaletteStack.empty()) + return; + + Palette *pal = _cursorPaletteStack.top(); + pal->_disabled = disable; + + g_system->disableCursorPalette(true); +} + +void CursorManager::pushCursorPalette(const byte *colors, uint start, uint num) { + if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) + return; + + Palette *pal = new Palette(colors, start, num); + _cursorPaletteStack.push(pal); + + if (num) + g_system->setCursorPalette(colors, start, num); + else + g_system->disableCursorPalette(true); +} + +void CursorManager::popCursorPalette() { + if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) + return; + + if (_cursorPaletteStack.empty()) + return; + + Palette *pal = _cursorPaletteStack.pop(); + delete pal; + + if (_cursorPaletteStack.empty()) { + g_system->disableCursorPalette(true); + return; + } + + pal = _cursorPaletteStack.top(); + + if (pal->_num && !pal->_disabled) + g_system->setCursorPalette(pal->_data, pal->_start, pal->_num); + else + g_system->disableCursorPalette(true); +} + +void CursorManager::replaceCursorPalette(const byte *colors, uint start, uint num) { + if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) + return; + + if (_cursorPaletteStack.empty()) { + pushCursorPalette(colors, start, num); + return; + } + + Palette *pal = _cursorPaletteStack.top(); + uint size = 4 * num; + + if (pal->_size < size) { + // Could not re-use the old buffer. Create a new one. + delete[] pal->_data; + pal->_data = new byte[size]; + pal->_size = size; + } + + pal->_start = start; + pal->_num = num; + + if (num) { + memcpy(pal->_data, colors, 4 * num); + g_system->setCursorPalette(pal->_data, pal->_start, pal->_num); + } else { + g_system->disableCursorPalette(true); + } +} + } // End of namespace Graphics diff --git a/graphics/cursorman.h b/graphics/cursorman.h index f86883f1e1..af5021e5d4 100644 --- a/graphics/cursorman.h +++ b/graphics/cursorman.h @@ -74,6 +74,49 @@ public: */ void replaceCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor = 255, int targetScale = 1); + /** + * Enable/Disable the current cursor palette. + * + * @param disable + */ + void disableCursorPalette(bool disable); + + /** + * Push a new cursor palette onto the stack, and set it in the backend. + * The palette entries from 'start' till (start+num-1) will be replaced + * so a full palette updated is accomplished via start=0, num=256. + * + * The palette data is specified in the same interleaved RGBA format as + * used by all backends. + * + * @param colors the new palette data, in interleaved RGB format + * @param start the first palette entry to be updated + * @param num the number of palette entries to be updated + * + * @note If num is zero, the cursor palette is disabled. + */ + void pushCursorPalette(const byte *colors, uint start, uint num); + + /** + * Pop a cursor palette from the stack, and restore the previous one to + * the backend. If there is no previous palette, the cursor palette is + * disabled instead. + */ + void popCursorPalette(); + + /** + * Replace the current cursor palette on the stack. If the stack is + * empty, the palette is pushed instead. It's a slightly more optimized + * way of popping the old palette before pushing the new one. + * + * @param colors the new palette data, in interleaved RGB format + * @param start the first palette entry to be updated + * @param num the number of palette entries to be updated + * + * @note If num is zero, the cursor palette is disabled. + */ + void replaceCursorPalette(const byte *colors, uint start, uint num); + private: friend class Common::Singleton<SingletonBaseType>; CursorManager(); @@ -108,13 +151,40 @@ private: } }; + struct Palette { + byte *_data; + uint _start; + uint _num; + uint _size; + + bool _disabled; + + Palette(const byte *colors, uint start, uint num) { + _start = start; + _num = num; + _size = 4 * num; + + if (num) { + _data = new byte[_size]; + memcpy(_data, colors, _size); + } else { + _data = NULL; + } + + _disabled = false; + } + + ~Palette() { + delete [] _data; + } + }; + Common::Stack<Cursor *> _cursorStack; + Common::Stack<Palette *> _cursorPaletteStack; }; - } // End of namespace Graphics -/** Shortcut for accessing the cursor manager. */ #define CursorMan (::Graphics::CursorManager::instance()) #endif diff --git a/graphics/module.mk b/graphics/module.mk index d14ca763f2..44c118668f 100644 --- a/graphics/module.mk +++ b/graphics/module.mk @@ -13,7 +13,6 @@ MODULE_OBJS := \ imagedec.o \ imageman.o \ mpeg_player.o \ - paletteman.o \ primitives.o \ scaler.o \ scaler/thumbnail.o \ diff --git a/graphics/paletteman.cpp b/graphics/paletteman.cpp deleted file mode 100644 index b3f47bf585..0000000000 --- a/graphics/paletteman.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2006 The ScummVM project - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#include "graphics/paletteman.h" - -#include "common/system.h" -#include "common/stack.h" - -DECLARE_SINGLETON(Graphics::PaletteManager); - -namespace Graphics { - -static bool g_initialized = false; - -PaletteManager::PaletteManager() { - if (!g_initialized) { - g_initialized = true; - _cursorPaletteStack.clear(); - } -} - -void PaletteManager::disableCursorPalette(bool disable) { - if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) - return; - - if (_cursorPaletteStack.empty()) - return; - - Palette *pal = _cursorPaletteStack.top(); - pal->_disabled = disable; - - g_system->disableCursorPalette(true); -} - -void PaletteManager::pushCursorPalette(const byte *colors, uint start, uint num) { - if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) - return; - - Palette *pal = new Palette(colors, start, num); - _cursorPaletteStack.push(pal); - - if (num) - g_system->setCursorPalette(colors, start, num); - else - g_system->disableCursorPalette(true); -} - -void PaletteManager::popCursorPalette() { - if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) - return; - - if (_cursorPaletteStack.empty()) - return; - - Palette *pal = _cursorPaletteStack.pop(); - delete pal; - - if (_cursorPaletteStack.empty()) { - g_system->disableCursorPalette(true); - return; - } - - pal = _cursorPaletteStack.top(); - - if (pal->_num && !pal->_disabled) - g_system->setCursorPalette(pal->_data, pal->_start, pal->_num); - else - g_system->disableCursorPalette(true); -} - -void PaletteManager::replaceCursorPalette(const byte *colors, uint start, uint num) { - if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) - return; - - if (_cursorPaletteStack.empty()) { - pushCursorPalette(colors, start, num); - return; - } - - Palette *pal = _cursorPaletteStack.top(); - uint size = 4 * num; - - if (pal->_size < size) { - // Could not re-use the old buffer. Create a new one. - delete[] pal->_data; - pal->_data = new byte[size]; - pal->_size = size; - } - - pal->_start = start; - pal->_num = num; - - if (num) { - memcpy(pal->_data, colors, 4 * num); - g_system->setCursorPalette(pal->_data, pal->_start, pal->_num); - } else { - g_system->disableCursorPalette(true); - } -} - -} // End of namespace Graphics diff --git a/graphics/paletteman.h b/graphics/paletteman.h deleted file mode 100644 index dc3f03dbaa..0000000000 --- a/graphics/paletteman.h +++ /dev/null @@ -1,118 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2006 The ScummVM project - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#ifndef GRAPHICS_PALETTEMAN_H -#define GRAPHICS_PALETTEMAN_H - -#include "common/stdafx.h" -#include "common/scummsys.h" -#include "common/stack.h" -#include "common/singleton.h" - -namespace Graphics { - -class PaletteManager : public Common::Singleton<PaletteManager> { -public: - /** - * Enable/Disable the current cursor palette. - * - * @param disable - */ - void disableCursorPalette(bool disable); - - /** - * Push a new cursor palette onto the stack, and set it in the backend. - * The palette entries from 'start' till (start+num-1) will be replaced - * so a full palette updated is accomplished via start=0, num=256. - * - * The palette data is specified in the same interleaved RGBA format as - * used by all backends. - * - * @param colors the new palette data, in interleaved RGB format - * @param start the first palette entry to be updated - * @param num the number of palette entries to be updated - * - * @note If num is zero, the cursor palette is disabled. - */ - void pushCursorPalette(const byte *colors, uint start, uint num); - - /** - * Pop a cursor palette from the stack, and restore the previous one to - * the backend. If there is no previous palette, the cursor palette is - * disabled instead. - */ - void popCursorPalette(); - - /** - * Replace the current cursor palette on the stack. If the stack is - * empty, the palette is pushed instead. It's a slightly more optimized - * way of popping the old palette before pushing the new one. - * - * @param colors the new palette data, in interleaved RGB format - * @param start the first palette entry to be updated - * @param num the number of palette entries to be updated - * - * @note If num is zero, the cursor palette is disabled. - */ - void replaceCursorPalette(const byte *colors, uint start, uint num); - -private: - friend class Common::Singleton<SingletonBaseType>; - PaletteManager(); - - struct Palette { - byte *_data; - uint _start; - uint _num; - uint _size; - - bool _disabled; - - Palette(const byte *colors, uint start, uint num) { - _start = start; - _num = num; - _size = 4 * num; - - if (num) { - _data = new byte[_size]; - memcpy(_data, colors, _size); - } else { - _data = NULL; - } - - _disabled = false; - } - - ~Palette() { - delete [] _data; - } - }; - - Common::Stack<Palette *> _cursorPaletteStack; -}; - - -} // End of namespace Graphics - -/** Shortcut for accessing the palette manager. */ -#define PaletteMan (Graphics::PaletteManager::instance()) - -#endif diff --git a/gui/ThemeModern.cpp b/gui/ThemeModern.cpp index 8452c8a37d..37f1e01844 100644 --- a/gui/ThemeModern.cpp +++ b/gui/ThemeModern.cpp @@ -28,7 +28,6 @@ #include "graphics/imagedec.h" #include "graphics/colormasks.h" #include "graphics/cursorman.h" -#include "graphics/paletteman.h" #include "common/config-manager.h" #include "common/file.h" @@ -160,7 +159,7 @@ void ThemeModern::refresh() { resetupGuiRenderer(); if (_enabled) { _system->showOverlay(); - PaletteMan.replaceCursorPalette(_cursorPal, 0, MAX_CURS_COLORS); + CursorMan.replaceCursorPalette(_cursorPal, 0, MAX_CURS_COLORS); CursorMan.replaceCursor(_cursor, _cursorWidth, _cursorHeight, _cursorHotspotX, _cursorHotspotY, 255, _cursorTargetScale); } } @@ -179,7 +178,7 @@ void ThemeModern::enable() { void ThemeModern::disable() { _system->hideOverlay(); if (_useCursor) { - PaletteMan.popCursorPalette(); + CursorMan.popCursorPalette(); CursorMan.popCursor(); } _enabled = false; @@ -1477,7 +1476,7 @@ OverlayColor ThemeModern::calcDimColor(OverlayColor col) { #pragma mark - void ThemeModern::setUpCursor() { - PaletteMan.pushCursorPalette(_cursorPal, 0, MAX_CURS_COLORS); + CursorMan.pushCursorPalette(_cursorPal, 0, MAX_CURS_COLORS); CursorMan.pushCursor(_cursor, _cursorWidth, _cursorHeight, _cursorHotspotX, _cursorHotspotY, 255, _cursorTargetScale); CursorMan.showMouse(true); } diff --git a/gui/newgui.cpp b/gui/newgui.cpp index 62461a386b..6e941dd787 100644 --- a/gui/newgui.cpp +++ b/gui/newgui.cpp @@ -23,7 +23,6 @@ #include "common/system.h" #include "common/util.h" #include "graphics/cursorman.h" -#include "graphics/paletteman.h" #include "gui/newgui.h" #include "gui/dialog.h" #include "gui/eval.h" @@ -139,7 +138,7 @@ bool NewGui::loadNewTheme(const Common::String &style) { _theme->disable(); if (_useStdCursor) { - PaletteMan.popCursorPalette(); + CursorMan.popCursorPalette(); CursorMan.popCursor(); } @@ -367,7 +366,7 @@ void NewGui::saveState() { void NewGui::restoreState() { if (_useStdCursor) { CursorMan.popCursor(); - PaletteMan.popCursorPalette(); + CursorMan.popCursorPalette(); } _system->updateScreen(); @@ -415,7 +414,7 @@ void NewGui::setupCursor() { 87, 87, 87, 0 }; - PaletteMan.pushCursorPalette(palette, 0, 4); + CursorMan.pushCursorPalette(palette, 0, 4); CursorMan.pushCursor(NULL, 0, 0, 0, 0); CursorMan.showMouse(true); } |