summaryrefslogtreecommitdiffstats
path: root/asciiquarium/src/frame.h
diff options
context:
space:
mode:
Diffstat (limited to 'asciiquarium/src/frame.h')
-rw-r--r--asciiquarium/src/frame.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/asciiquarium/src/frame.h b/asciiquarium/src/frame.h
new file mode 100644
index 00000000..a6ad82bd
--- /dev/null
+++ b/asciiquarium/src/frame.h
@@ -0,0 +1,150 @@
+/*
+ * Asciiquarium - Native KDE Screensaver based on the Asciiquarium program
+ * (c) Kirk Baucom <kbaucom@schizoid.com>, which you can find at
+ * http://www.robobunny.com/projects/asciiquarium/
+ *
+ * Ported to KDE by Maksim Orlovich <maksim@kde.org> and
+ * Michael Pyne <michael.pyne@kdemail.net>.
+ *
+ * Copyright (c) 2003 Kirk Baucom <kbaucom@schizoid.com>
+ * Copyright (c) 2005 Maksim Orlovich <maksim@kde.org>
+ * Copyright (c) 2005 Michael Pyne <michael.pyne@kdemail.net>
+ *
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef AA_FRAME_H
+#define AA_FRAME_H
+
+#include <qstring.h>
+#include <qvaluevector.h>
+#include <qpixmap.h>
+#include "screen.h"
+
+/**
+ * Represents a single frame of a sprite's animation.
+ *
+ * @see Sprite
+ */
+class Frame
+{
+ /**
+ * Two-dimensional array of Pixels, which represent the appearance of this
+ * frame. This is used to create m_pixmap and m_erasePixmap when they are
+ * needed.
+ *
+ * @see Pixel
+ */
+ QValueVector<QValueVector<Screen::Pixel> > m_data;
+
+ /// Masked pixmap of the animation frame. Created by convertDataToPixmap().
+ QPixmap m_pixmap;
+
+ /// Masked pixmap used to clear frame. Created by convertDataToPixmap().
+ QPixmap m_erasePixmap;
+
+ /// Height of this frame of animation in logical coordinates.
+ int m_height;
+
+ /// Width of this frame of animation in logical coordinates.
+ int m_width;
+
+ /// Character to be used as a special 'transparent' character. Normally is
+ /// the '?' character.
+ QChar m_transparentChar;
+
+public:
+
+ /**
+ * Constructs an empty animation Frame. Do not insert this into a Sprite.
+ */
+ Frame() : m_height(0), m_width(0)
+ {
+ }
+
+ /**
+ * Constructs an animation frame.
+ *
+ * @param text Newline-separated text used to construct the Pixel arrays.
+ * The lines do not have to be equal length, any extra needed
+ * characters will automatically be filled with transparency.
+ * Any whitespace at the beginning of a line is converted to
+ * transparency as well.
+ *
+ * @param mask Newline-separated text used to mask \p text's colors. This
+ * can be empty or null in which case no masking is performed.
+ * However, if present, there should be the same number of
+ * lines in \p mask as in \p text, although individual lines
+ * can be shorter or empty as convienient. You can use letters
+ * to stand for colors, e.g. 'r' will make the letter in \p
+ * text at the same position dark red.
+ *
+ * @param defaultColor The default color to apply to characters. This
+ * color is used for all characters in \p text that are
+ * not altered by \p mask.
+ *
+ * @param transparent The character to use to represent transparent areas
+ * in \p text. This can be useful when the
+ * auto-transparency feature can't detect transparent
+ * areas.
+ */
+ Frame(QString text, QString mask, QRgb defaultColor, QChar transparent = '?');
+
+ /**
+ * Paints this Frame into the given screen.
+ *
+ * @param scr The Screen to draw into.
+ * @param x The logical x coordinate of the left edge of the update region.
+ * @param y The logical y coordinate of the top edge of the update region.
+ */
+ void paint(Screen* scr, int x, int y);
+
+ /**
+ * Erases this Frame from the given screen.
+ *
+ * @param scr The Screen to draw into.
+ * @param x The logical x coordinate of the left edge of the update region.
+ * @param y The logical y coordinate of the top edge of the update region.
+ */
+ void erase(Screen* scr, int x, int y);
+
+ /// Returns the logical width of this frame.
+ int width() const
+ {
+ return m_width;
+ }
+
+ /// Returns the logical height of this frame.
+ int height() const
+ {
+ return m_height;
+ }
+
+protected:
+
+ /**
+ * This function converts the Pixel data in m_data to setup m_pixmap
+ * and m_erasePixmap, which are not setup until this function is called.
+ *
+ * m_data is not valid after this call is performed to save memory.
+ *
+ * @param screen The Screen we will be drawing into later.
+ */
+ void convertDataToPixmap(const Screen *screen);
+};
+
+#endif
+
+// vim: set et ts=8 sw=4: