aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/text32.h
diff options
context:
space:
mode:
authorColin Snover2016-07-29 15:48:14 -0500
committerColin Snover2016-08-01 10:37:14 -0500
commit2071196f4235c75ff020605f53b3d397532e841a (patch)
treeaaae025e3e221e29e7d0c2f2b9c48f4e760caf6e /engines/sci/graphics/text32.h
parent4e31c9aaf4aa36b6fea039d1779317e6a943e68b (diff)
downloadscummvm-rg350-2071196f4235c75ff020605f53b3d397532e841a.tar.gz
scummvm-rg350-2071196f4235c75ff020605f53b3d397532e841a.tar.bz2
scummvm-rg350-2071196f4235c75ff020605f53b3d397532e841a.zip
SCI32: Add bitmap segment and remove GC option from hunk segment
Diffstat (limited to 'engines/sci/graphics/text32.h')
-rw-r--r--engines/sci/graphics/text32.h204
1 files changed, 0 insertions, 204 deletions
diff --git a/engines/sci/graphics/text32.h b/engines/sci/graphics/text32.h
index 40921563d0..44bd48afd5 100644
--- a/engines/sci/graphics/text32.h
+++ b/engines/sci/graphics/text32.h
@@ -42,210 +42,6 @@ enum ScrollDirection {
kScrollDown
};
-enum BitmapFlags {
- kBitmapRemap = 2
-};
-
-enum {
- kDefaultSkipColor = 250
-};
-
-#define BITMAP_PROPERTY(size, property, offset)\
-inline uint##size get##property() const {\
- return READ_SCI11ENDIAN_UINT##size(_bitmap + (offset));\
-}\
-inline void set##property(uint##size value) {\
- WRITE_SCI11ENDIAN_UINT##size(_bitmap + (offset), (value));\
-}
-
-/**
- * A convenience class for creating and modifying in-memory
- * bitmaps.
- */
-class BitmapResource {
- byte *_bitmap;
- reg_t _object;
- Buffer _buffer;
-
- /**
- * Gets the size of the bitmap header for the current
- * engine version.
- */
- static inline uint16 getBitmapHeaderSize() {
- // TODO: These values are accurate for each engine, but there may be no reason
- // to not simply just always use size 40, since SCI2.1mid does not seem to
- // actually store any data above byte 40, and SCI2 did not allow bitmaps with
- // scaling resolutions other than the default (320x200). Perhaps SCI3 used
- // the extra bytes, or there is some reason why they tried to align the header
- // size with other headers like pic headers?
-// uint32 bitmapHeaderSize;
-// if (getSciVersion() >= SCI_VERSION_2_1_MIDDLE) {
-// bitmapHeaderSize = 46;
-// } else if (getSciVersion() == SCI_VERSION_2_1_EARLY) {
-// bitmapHeaderSize = 40;
-// } else {
-// bitmapHeaderSize = 36;
-// }
-// return bitmapHeaderSize;
- return 46;
- }
-
- /**
- * Gets the byte size of a bitmap with the given width
- * and height.
- */
- static inline uint32 getBitmapSize(const uint16 width, const uint16 height) {
- return width * height + getBitmapHeaderSize();
- }
-
-public:
- /**
- * Create a bitmap resource for an existing bitmap.
- * Ownership of the bitmap is retained by the caller.
- */
- inline BitmapResource(reg_t bitmap) :
- _bitmap(g_sci->getEngineState()->_segMan->getHunkPointer(bitmap)),
- _object(bitmap) {
- if (_bitmap == nullptr || getUncompressedDataOffset() != getBitmapHeaderSize()) {
- error("Invalid Text bitmap %04x:%04x", PRINT_REG(bitmap));
- }
-
- _buffer = Buffer(getWidth(), getHeight(), getPixels());
- }
-
- /**
- * Allocates and initialises a new bitmap in the given
- * segment manager.
- */
- inline BitmapResource(SegManager *segMan, const int16 width, const int16 height, const uint8 skipColor, const int16 displaceX, const int16 displaceY, const int16 scaledWidth, const int16 scaledHeight, const uint32 paletteSize, const bool remap, const bool gc) {
- _object = segMan->allocateHunkEntry("Bitmap()", getBitmapSize(width, height) + paletteSize, gc);
- _bitmap = segMan->getHunkPointer(_object);
-
- const uint16 bitmapHeaderSize = getBitmapHeaderSize();
-
- setWidth(width);
- setHeight(height);
- setDisplace(Common::Point(displaceX, displaceY));
- setSkipColor(skipColor);
- _bitmap[9] = 0;
- WRITE_SCI11ENDIAN_UINT16(_bitmap + 10, 0);
- setRemap(remap);
- setDataSize(width * height);
- WRITE_SCI11ENDIAN_UINT32(_bitmap + 16, 0);
- setHunkPaletteOffset(paletteSize > 0 ? (width * height) : 0);
- setDataOffset(bitmapHeaderSize);
- setUncompressedDataOffset(bitmapHeaderSize);
- setControlOffset(0);
- setScaledWidth(scaledWidth);
- setScaledHeight(scaledHeight);
-
- _buffer = Buffer(getWidth(), getHeight(), getPixels());
- }
-
- inline reg_t getObject() const {
- return _object;
- }
-
- inline Buffer &getBuffer() {
- return _buffer;
- }
-
- BITMAP_PROPERTY(16, Width, 0);
- BITMAP_PROPERTY(16, Height, 2);
-
- inline Common::Point getDisplace() const {
- return Common::Point(
- (int16)READ_SCI11ENDIAN_UINT16(_bitmap + 4),
- (int16)READ_SCI11ENDIAN_UINT16(_bitmap + 6)
- );
- }
-
- inline void setDisplace(const Common::Point &displace) {
- WRITE_SCI11ENDIAN_UINT16(_bitmap + 4, (uint16)displace.x);
- WRITE_SCI11ENDIAN_UINT16(_bitmap + 6, (uint16)displace.y);
- }
-
- inline uint8 getSkipColor() const {
- return _bitmap[8];
- }
-
- inline void setSkipColor(const uint8 skipColor) {
- _bitmap[8] = skipColor;
- }
-
- inline bool getRemap() const {
- return READ_SCI11ENDIAN_UINT16(_bitmap + 10) & kBitmapRemap;
- }
-
- inline void setRemap(const bool remap) {
- uint16 flags = READ_SCI11ENDIAN_UINT16(_bitmap + 10);
- if (remap) {
- flags |= kBitmapRemap;
- } else {
- flags &= ~kBitmapRemap;
- }
- WRITE_SCI11ENDIAN_UINT16(_bitmap + 10, flags);
- }
-
- BITMAP_PROPERTY(32, DataSize, 12);
-
- inline uint32 getHunkPaletteOffset() const {
- return READ_SCI11ENDIAN_UINT32(_bitmap + 20);
- }
-
- inline void setHunkPaletteOffset(uint32 hunkPaletteOffset) {
- if (hunkPaletteOffset) {
- hunkPaletteOffset += getBitmapHeaderSize();
- }
-
- WRITE_SCI11ENDIAN_UINT32(_bitmap + 20, hunkPaletteOffset);
- }
-
- BITMAP_PROPERTY(32, DataOffset, 24);
-
- // NOTE: This property is used as a "magic number" for
- // validating that a block of memory is a valid bitmap,
- // and so is always set to the size of the header.
- BITMAP_PROPERTY(32, UncompressedDataOffset, 28);
-
- // NOTE: This property always seems to be zero
- BITMAP_PROPERTY(32, ControlOffset, 32);
-
- inline uint16 getScaledWidth() const {
- if (getDataOffset() >= 40) {
- return READ_SCI11ENDIAN_UINT16(_bitmap + 36);
- }
-
- // SCI2 bitmaps did not have scaling ability
- return 320;
- }
-
- inline void setScaledWidth(uint16 scaledWidth) {
- if (getDataOffset() >= 40) {
- WRITE_SCI11ENDIAN_UINT16(_bitmap + 36, scaledWidth);
- }
- }
-
- inline uint16 getScaledHeight() const {
- if (getDataOffset() >= 40) {
- return READ_SCI11ENDIAN_UINT16(_bitmap + 38);
- }
-
- // SCI2 bitmaps did not have scaling ability
- return 200;
- }
-
- inline void setScaledHeight(uint16 scaledHeight) {
- if (getDataOffset() >= 40) {
- WRITE_SCI11ENDIAN_UINT16(_bitmap + 38, scaledHeight);
- }
- }
-
- inline byte *getPixels() {
- return _bitmap + getUncompressedDataOffset();
- }
-};
-
class GfxFont;
/**