aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/gfx/gfx_state_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/gfx/gfx_state_internal.h')
-rw-r--r--engines/sci/gfx/gfx_state_internal.h129
1 files changed, 76 insertions, 53 deletions
diff --git a/engines/sci/gfx/gfx_state_internal.h b/engines/sci/gfx/gfx_state_internal.h
index d03c5e9519..3f00b5213c 100644
--- a/engines/sci/gfx/gfx_state_internal.h
+++ b/engines/sci/gfx/gfx_state_internal.h
@@ -34,14 +34,16 @@
namespace Sci {
-#define GFXW_FLAG_VISIBLE (1<<0)
-#define GFXW_FLAG_OPAQUE (1<<1)
-#define GFXW_FLAG_CONTAINER (1<<2)
-#define GFXW_FLAG_DIRTY (1<<3)
-#define GFXW_FLAG_TAGGED (1<<4)
-#define GFXW_FLAG_MULTI_ID (1<<5) /**< Means that the ID used herein may be used more than once, i.e. is not unique */
-#define GFXW_FLAG_IMMUNE_TO_SNAPSHOTS (1<<6) /**< Snapshot restoring doesn't kill this widget, and +5 bonus to saving throws vs. Death Magic */
-#define GFXW_FLAG_NO_IMPLICIT_SWITCH (1<<7) /**< Ports: Don't implicitly switch to this port when disposing windows */
+enum gfxw_flag_t {
+ GFXW_FLAG_VISIBLE = (1<<0),
+ GFXW_FLAG_OPAQUE = (1<<1),
+ GFXW_FLAG_CONTAINER = (1<<2),
+ GFXW_FLAG_DIRTY = (1<<3),
+ GFXW_FLAG_TAGGED = (1<<4),
+ GFXW_FLAG_MULTI_ID = (1<<5), /**< Means that the ID used herein may be used more than once, i.e. is not unique */
+ GFXW_FLAG_IMMUNE_TO_SNAPSHOTS = (1<<6), /**< Snapshot restoring doesn't kill this widget, and +5 bonus to saving throws vs. Death Magic */
+ GFXW_FLAG_NO_IMPLICIT_SWITCH = (1<<7) /**< Ports: Don't implicitly switch to this port when disposing windows */
+};
struct gfxw_snapshot_t {
int serial; /**< The first serial number to kill */
@@ -82,6 +84,7 @@ struct GfxPort;
typedef int gfxw_bin_op(GfxWidget *, GfxWidget *);
+/** SCI graphics widget */
struct GfxWidget {
public:
int _magic; /**< Extra check after typecasting */
@@ -101,27 +104,28 @@ public:
/**
* The widget automatically removes itself from its owner, if it has one.
- * Deleting a container will recursively free all of its
- * contents.
+ * Deleting a container will recursively free all of its contents.
*/
virtual ~GfxWidget();
/**
* Draws the widget.
*
- * The widget is drawn iff it is flagged as dirty. Invoking this operation on
- * a container widget will recursively draw all of its contents.
+ * The widget is drawn iff it is flagged as dirty. Invoking this operation
+ * on a container widget will recursively draw all of its contents.
*
- * @param pos The position to draw to (added to the widget's internal position)
+ * @param[in] pos The position to draw to (added to the widget's
+ * internal position)
*/
virtual int draw(const Common::Point &pos) = 0;
/**
* Tags the specified widget.
*
- * If invoked on a container widget, this will also tag all of the container's
- * contents (but not the contents' contents!)
- * FIXME: Actually, the code in GfxContainer::tag contradicts the last claim!
+ * If invoked on a container widget, this will also tag all of the
+ * container's contents (but not the contents' contents!)
+ * FIXME: Actually, the code in GfxContainer::tag contradicts the last
+ * claim!
*/
virtual void tag() {
_flags |= GFXW_FLAG_TAGGED;
@@ -130,10 +134,10 @@ public:
/**
* Prints a string representation of the widget with sciprintf.
*
- * Will recursively print all of the widget's contents if the widget contains
- * further sub-widgets
+ * Will recursively print all of the widget's contents if the widget
+ * contains further sub-widgets
*
- * @param indentation Number of double spaces to indent
+ * @param[in] indentation Number of double spaces to indent
*/
virtual void print(int indentation) const;
@@ -143,55 +147,63 @@ public:
* This comparison only applies to some widgets; compare_to(a,a)=0 is not
* guaranteed. It may be used for sorting for all widgets.
*
- * @param other other widget
- * @return <0, 0, or >0 if other is, respectively, less than, equal
- * to, or greater than self
+ * @param other The other widget
+ * @return <0, 0, or >0 if other is, respectively, less than, equal
+ * to, or greater than self
*/
gfxw_bin_op *compare_to;
/**
* Compares two compareable widgets for equality.
*
- * This operation checks whether two widgets describe the same graphical data.
- * It is used to determine whether a new widget should be discarded because it
- * describes the same graphical data as an old widget that has already been
- * drawn. For lists, it also checks whether all contents are in an identical
- * order.
+ * This operation checks whether two widgets describe the same graphical
+ * data. It is used to determine whether a new widget should be discarded
+ * because it describes the same graphical data as an old widget that has
+ * already been drawn. For lists, it also checks whether all contents are
+ * in an identical order.
*
- * @param other other widget
- * @return false if the widgets are not equal, true if they match
+ * @param[in] other The other widget
+ * @return false if the widgets are not equal, true if they match
*/
gfxw_bin_op *equals;
/**
- * Determine whether other should replace this even though they are equivalent.
+ * Determine whether other should replace this even though they are
+ * equivalent.
*
* When 'equals' returns true, this means that no new widget will be added.
* However, in some cases newer widgets may contain information that should
- * cause the older widget to be removed nonetheless; this is indicated by this
- * function.
+ * cause the older widget to be removed nonetheless; this is indicated by
+ * this function.
*
- * @param other other widget
- * @return false if this should be kept, true if this should be replaced by the 'other'
+ * @param[in] other The other widget
+ * @return false if this should be kept, true if this should be
+ * replaced by the 'other'
*/
gfxw_bin_op *should_replace;
/**
- * Tests whether drawing this after other would reduce all traces of other.
+ * Tests whether drawing this after other would reduce all traces of
+ * other.
*
- * /a superarea_of b <=> for each pixel of b there exists an opaque pixel in a at the same location
+ * /a superarea_of b <=> for each pixel of b there exists an opaque pixel
+ * in a at the same location
*
- * @param other the widget to compare for containment
- * @return true if this is superarea_of other, false otherwise
+ * @param[in] other The widget to compare for containment
+ * @return true if this is superarea_of other, false otherwise
*/
gfxw_bin_op *superarea_of;
/**
* Sets the visual for the widget
- * This function is called by container->add() and need not be invoked explicitly.
- * It also makes sure that dirty rectangles are passed to parent containers.
+ *
+ * This function is called by container->add() and need not be invoked
+ * explicitly. It also makes sure that dirty rectangles are passed to
+ * parent containers.
+ *
+ * @param[in] visual GfxVisual to set for the widget
*/
- virtual int setVisual(GfxVisual *);
+ virtual int setVisual(GfxVisual *visual);
//protected:
void printIntern(int indentation) const;
@@ -200,6 +212,7 @@ public:
#define GFXW_IS_BOX(widget) ((widget)->_type == GFXW_BOX)
+/** SCI box widget */
struct GfxBox : public GfxWidget {
gfx_color_t _color1, _color2;
gfx_box_shade_t _shadeType;
@@ -213,6 +226,7 @@ public:
#define GFXW_IS_PRIMITIVE(widget) ((widget)->_type == GFXW_RECT || (widget)->_type == GFXW_LINE)
+/** SCI graphics primitive */
struct GfxPrimitive : public GfxWidget {
gfx_color_t _color;
gfx_line_mode_t _lineMode;
@@ -227,6 +241,7 @@ public:
#define GFXW_IS_VIEW(widget) ((widget)->_type == GFXW_VIEW || (widget)->_type == GFXW_STATIC_VIEW \
|| (widget)->_type == GFXW_DYN_VIEW || (widget)->_type == GFXW_PIC_VIEW)
+/** SCI graphics view */
struct GfxView : public GfxWidget {
Common::Point _pos; /**< Implies the value of 'bounds' in GfxWidget */
gfx_color_t _color;
@@ -242,6 +257,7 @@ public:
};
#define GFXW_IS_DYN_VIEW(widget) ((widget)->_type == GFXW_DYN_VIEW || (widget)->_type == GFXW_PIC_VIEW)
+/** SCI dynamic view */
struct GfxDynView : public GfxView {
/* FIXME: This code is specific to SCI */
rect_t draw_bounds; /* The correct position to draw to */
@@ -265,6 +281,7 @@ public:
#define GFXW_IS_TEXT(widget) ((widget)->_type == GFXW_TEXT)
+/** SCI text widget */
struct GfxText : public GfxWidget {
int _font;
int lines_nr, lineheight, lastline_width;
@@ -293,7 +310,7 @@ typedef int gfxw_unary_container_op(GfxContainer *);
typedef int gfxw_container_op(GfxContainer *, GfxWidget *);
typedef int gfxw_rect_op(GfxContainer *, rect_t, int);
-
+/** SCI container widget */
struct GfxContainer : public GfxWidget {
rect_t zone; /**< The writeable zone (absolute) for contained objects */
DirtyRectList _dirtyRects; /**< List of dirty rectangles */
@@ -324,7 +341,7 @@ public:
#define GFXW_IS_LIST(widget) ((widget)->_type == GFXW_LIST || (widget)->_type == GFXW_SORTED_LIST)
#define GFXW_IS_SORTED_LIST(widget) ((widget)->_type == GFXW_SORTED_LIST)
-
+/** SCI graphics list */
struct GfxList : public GfxContainer {
public:
GfxList(rect_t area, bool sorted);
@@ -334,6 +351,7 @@ public:
};
#define GFXW_IS_VISUAL(widget) ((widget)->_type == GFXW_VISUAL)
+/** SCI graphic visual */
struct GfxVisual : public GfxContainer {
Common::Array<GfxPort *> _portRefs; /**< References to ports */
int _font; /**< Default font */
@@ -353,6 +371,7 @@ public:
};
#define GFXW_IS_PORT(widget) ((widget)->_type == GFXW_PORT)
+/** SCI graphics port */
struct GfxPort : public GfxContainer {
GfxList *_decorations; /**< optional window decorations - drawn before the contents */
GfxWidget *port_bg; /**< Port background widget or NULL */
@@ -366,16 +385,20 @@ struct GfxPort : public GfxContainer {
byte gray_text; /**< Whether text is 'grayed out' (dithered) */
public:
- /* Creates a new port widget with the default settings
- ** Paramaters: (GfxVisual *) visual: The visual the port is added to
- ** (GfxPort *) predecessor: The port's predecessor
- ** (rect_t) area: The screen area covered by the port (absolute position)
- ** (gfx_color_t) fgcolor: Foreground drawing color
- ** (gfx_color_t) bgcolor: Background color
- ** A port differentiates itself from a list in that it contains additional information,
- ** and an optional title (stored in a display list).
- ** Ports are assigned implicit IDs identifying their position within the port stack.
- */
+ /**
+ * Creates a new port widget with the default settings
+ *
+ * A port differentiates itself from a list in that it contains additional
+ * information, and an optional title (stored in a display list).
+ * Ports are assigned implicit IDs identifying their position within the
+ * port stack.
+ *
+ * @param[in] visual The visual the port is added to
+ * @param[in] area The screen area covered by the port (absolute
+ * position)
+ * @param[in] fgcolor Foreground drawing color
+ * @param[in] bgcolor Background color
+ */
GfxPort(GfxVisual *visual, rect_t area, gfx_color_t fgcolor, gfx_color_t bgcolor);
~GfxPort();