aboutsummaryrefslogtreecommitdiff
path: root/engines/queen/display.h
diff options
context:
space:
mode:
authorMax Horn2006-02-11 22:45:04 +0000
committerMax Horn2006-02-11 22:45:04 +0000
commit26ee630756ebdd7c96bccede0881a8c8b98e8f2b (patch)
tree26e378d5cf990a2b81c2c96e9e683a7f333b62e8 /engines/queen/display.h
parent2a9a0d4211b1ea5723f1409d91cb95de8984429e (diff)
downloadscummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.tar.gz
scummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.tar.bz2
scummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.zip
Moved engines to the new engines/ directory
svn-id: r20582
Diffstat (limited to 'engines/queen/display.h')
-rw-r--r--engines/queen/display.h246
1 files changed, 246 insertions, 0 deletions
diff --git a/engines/queen/display.h b/engines/queen/display.h
new file mode 100644
index 0000000000..87608a57e3
--- /dev/null
+++ b/engines/queen/display.h
@@ -0,0 +1,246 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2003-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 QUEENDISPLAY_H
+#define QUEENDISPLAY_H
+
+#include "common/str.h"
+#include "common/util.h"
+#include "queen/defs.h"
+
+class OSystem;
+
+namespace Queen {
+
+class QueenEngine;
+
+class Display {
+public:
+
+ Display(QueenEngine *vm, OSystem *system);
+ ~Display();
+
+ //! initialise dynalum for the specified room
+ void dynalumInit(const char *roomName, uint16 roomNum);
+
+ //! update dynalum for the current room
+ void dynalumUpdate(int16 x, int16 y);
+
+ //! update the palette
+ void palSet(const uint8 *pal, int start, int end, bool updateScreen = false);
+
+ //! setup palette for Joe's dress
+ void palSetJoeDress();
+
+ //! setup palette for Joe's normal clothes
+ void palSetJoeNormal();
+
+ //! setup palette for panel and inventory objects
+ void palSetPanel();
+
+ //! fade the current palette in
+ void palFadeIn(uint16 roomNum, bool dynalum = false, int16 dynaX = 0, int16 dynaY = 0);
+
+ //! fade the current palette out
+ void palFadeOut(uint16 roomNum);
+
+ //! grey the panel area (used when panel is disabled)
+ void palGreyPanel();
+
+ //! scroll some palette colors
+ void palScroll(int start, int end);
+
+ //! custom palette effect for the specified room
+ void palCustomColors(uint16 roomNum);
+
+ //! custom palette scroll for the specified room
+ void palCustomScroll(uint16 roomNum);
+
+ //! process a 'palette flash' effect
+ void palCustomFlash();
+
+ void palCustomLightsOff(uint16 roomNum);
+ void palCustomLightsOn(uint16 roomNum);
+
+ //! mark all palette entries as dirty
+ void palSetAllDirty() { _pal.dirtyMin = 0; _pal.dirtyMax = 255; }
+
+ //! returns the number of colors used by the room
+ int getNumColorsForRoom(uint16 room) const;
+
+ //! returns true if we shouldn't fade the palette in the specified room
+ bool isPalFadingDisabled(uint16 room) const;
+
+ //! change fullscreen/panel mode
+ void screenMode(int comPanel, bool inCutaway);
+
+ void prepareUpdate();
+ void update(bool dynalum = false, int16 dynaX = 0, int16 dynaY = 0);
+
+ void setupPanel();
+ void setupNewRoom(const char *name, uint16 room);
+
+ void drawBobSprite(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h, uint16 pitch, bool xflip);
+ void drawBobPasteDown(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h);
+ void drawInventoryItem(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h);
+
+ void blit(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, const uint8 *srcBuf, uint16 srcPitch, uint16 w, uint16 h, bool xflip, bool masked);
+ void fill(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, uint16 w, uint16 h, uint8 color);
+
+ //! decode a PCX stream
+ void readPCX(uint8 *dst, uint16 dstPitch, const uint8 *src, uint16 w, uint16 h);
+
+ void horizontalScrollUpdate(int16 xCamera);
+ void horizontalScroll(int16 scroll);
+ int16 horizontalScroll() const { return _horizontalScroll; }
+
+ void fullscreen(bool fs) { _fullRefresh = 2; _fullscreen = fs; }
+ bool fullscreen() const { return _fullscreen; }
+
+ //! mark the specified block as dirty
+ void setDirtyBlock(uint16 x, uint16 y, uint16 w, uint16 h);
+
+ //! force a full refresh (bypassing the dirtyblocks rendering), on next screen update
+ void forceFullRefresh() { _fullRefresh = 2; }
+
+ //! change mouse cursor bitmap
+ void setMouseCursor(uint8 *buf, uint16 w, uint16 h);
+
+ //! show/hide mouse cursor
+ void showMouseCursor(bool show);
+
+ //! initialise font, compute justification sizes
+ void initFont();
+
+ //! add the specified text to the texts list
+ void setText(uint16 x, uint16 y, const char *text, bool outlined = true);
+
+ //! add the specified text to the texts list
+ void setTextCentered(uint16 y, const char *text, bool outlined = true);
+
+ //! draw the text lists
+ void drawTexts();
+
+ //! remove entries from the texts list
+ void clearTexts(uint16 y1, uint16 y2);
+
+ //! change the current text color
+ void textCurrentColor(uint8 color) { _curTextColor = color; }
+
+ //! change the text color for the specified texts list entry
+ void textColor(uint16 y, uint8 color) { _texts[y].color = color; }
+
+ int textCenterX(const char *text) const;
+ uint16 textWidth(const char *text) const;
+ uint16 textWidth(const char *text, uint16 len) const;
+ void drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr);
+ void drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined = true);
+ void drawBox(int16 x1, int16 y1, int16 x2, int16 y2, uint8 col);
+
+ void shake(bool reset);
+
+ void blankScreen();
+ void blankScreenEffect1();
+ void blankScreenEffect2();
+ void blankScreenEffect3();
+
+private:
+
+ enum {
+ FADE_SPEED = 16,
+ D_BLOCK_W = 8,
+ D_BLOCK_H = 8
+ };
+
+ enum BufferDimension {
+ BACKDROP_W = 640,
+ BACKDROP_H = 200,
+ SCREEN_W = 320,
+ SCREEN_H = 200,
+ PANEL_W = 320,
+ PANEL_H = 50
+ };
+
+ struct {
+ uint8 *room;
+ uint8 *screen;
+ uint8 *panel;
+ int dirtyMin, dirtyMax;
+ bool scrollable;
+ } _pal;
+
+ struct Dynalum {
+ bool valid;
+ uint8 *mskBuf;
+ uint32 mskSize;
+ int8 *lumBuf;
+ uint32 lumSize;
+ uint8 prevColMask;
+ };
+
+ struct TextSlot {
+ uint16 x;
+ uint8 color;
+ Common::String text;
+ bool outlined;
+ };
+
+ uint8 *_screenBuf;
+ uint8 *_panelBuf;
+ uint8 *_backdropBuf;
+
+ uint8 _fullRefresh;
+ uint8 *_dirtyBlocks;
+ uint16 _dirtyBlocksWidth, _dirtyBlocksHeight;
+
+ bool _fullscreen;
+
+ uint16 _horizontalScroll;
+ uint16 _bdWidth, _bdHeight;
+
+ //! texts list
+ TextSlot _texts[GAME_SCREEN_HEIGHT];
+
+ //! current text color to use for display
+ uint8 _curTextColor;
+
+ //! font justification sizes
+ uint8 _charWidth[256];
+
+ Common::RandomSource _rnd;
+ Dynalum _dynalum;
+ OSystem *_system;
+ QueenEngine *_vm;
+
+ const uint8 *_font;
+#ifndef PALMOS_68K
+ static const uint8 _fontRegular[];
+ static const uint8 _fontHebrew[];
+ static const uint8 _palJoeClothes[];
+ static const uint8 _palJoeDress[];
+#endif
+};
+
+
+} // End of namespace Queen
+
+#endif