aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/palette.h
diff options
context:
space:
mode:
authorPaul Gilbert2014-02-18 20:08:58 -0500
committerPaul Gilbert2014-02-18 20:08:58 -0500
commit0e46c809d10dcd8fd766d7adcb966785e7955f5b (patch)
tree817e0f1c0c6f4b5ab86f6703cc09fb839173f3f5 /engines/mads/palette.h
parentece3e9a2200052cc65f60e0295b674095d7a6a66 (diff)
downloadscummvm-rg350-0e46c809d10dcd8fd766d7adcb966785e7955f5b.tar.gz
scummvm-rg350-0e46c809d10dcd8fd766d7adcb966785e7955f5b.tar.bz2
scummvm-rg350-0e46c809d10dcd8fd766d7adcb966785e7955f5b.zip
MADS: Initial implementation of MSurface class and dependant classes
Diffstat (limited to 'engines/mads/palette.h')
-rw-r--r--engines/mads/palette.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/engines/mads/palette.h b/engines/mads/palette.h
new file mode 100644
index 0000000000..ab03d8d20b
--- /dev/null
+++ b/engines/mads/palette.h
@@ -0,0 +1,110 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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.
+ *
+ */
+
+#ifndef MADS_PALETTE_H
+#define MADS_PALETTE_H
+
+#include "common/scummsys.h"
+
+namespace MADS {
+
+class MADSEngine;
+
+struct RGB8 {
+ uint8 r, g, b, u;
+};
+
+class RGBList {
+private:
+ int _size;
+ RGB8 *_data;
+ byte *_palIndexes;
+ bool _freeData;
+public:
+ RGBList(int numEntries = 256, RGB8 *srcData = NULL, bool freeData = true);
+ ~RGBList();
+
+ RGB8 *data() { return _data; }
+ byte *palIndexes() { return _palIndexes; }
+ int size() { return _size; }
+};
+
+#define PALETTE_COUNT 256
+
+class Palette {
+private:
+ MADSEngine *_vm;
+ bool _colorsChanged;
+ bool _fading_in_progress;
+ byte _originalPalette[PALETTE_COUNT * 4];
+ byte _fadedPalette[PALETTE_COUNT * 4];
+ int _usageCount[PALETTE_COUNT];
+
+ void reset();
+public:
+ Palette(MADSEngine *vm);
+
+ void setPalette(const byte *colors, uint start, uint num);
+ void setPalette(const RGB8 *colors, uint start, uint num);
+ void grabPalette(byte *colors, uint start, uint num);
+ void grabPalette(RGB8 *colors, uint start, uint num) {
+ grabPalette((byte *)colors, start, num);
+ }
+ uint8 palIndexFromRgb(byte r, byte g, byte b, RGB8 *paletteData = NULL);
+
+ void fadeIn(int numSteps, uint delayAmount, RGB8 *destPalette, int numColors);
+ void fadeIn(int numSteps, uint delayAmount, RGBList *destPalette);
+ static RGB8 *decodeMadsPalette(Common::SeekableReadStream *palStream, int *numColors);
+ int setMadsPalette(Common::SeekableReadStream *palStream, int indexStart = 0);
+ void setMadsSystemPalette();
+ void fadeRange(RGB8 *srcPal, RGB8 *destPal, int startIndex, int endIndex,
+ int numSteps, uint delayAmount);
+
+ // Methods used for reference counting color usage
+ void resetColorCounts();
+ void blockRange(int startIndex, int size);
+ void addRange(RGBList *list);
+ void deleteRange(RGBList *list);
+ void deleteAllRanges();
+
+ // Color indexes
+ uint8 BLACK;
+ uint8 BLUE;
+ uint8 GREEN;
+ uint8 CYAN;
+ uint8 RED;
+ uint8 VIOLET;
+ uint8 BROWN;
+ uint8 LIGHT_GRAY;
+ uint8 DARK_GRAY;
+ uint8 LIGHT_BLUE;
+ uint8 LIGHT_GREEN;
+ uint8 LIGHT_CYAN;
+ uint8 LIGHT_RED;
+ uint8 PINK;
+ uint8 YELLOW;
+ uint8 WHITE;
+};
+
+} // End of namespace MADS
+
+#endif /* MADS_PALETTE_H */