// $Id$
-//
+//
// SuperTux
-// Copyright (C) 2005 Matthias Braun <matze@braunis.de>
+// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// 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
#include <string>
#include <map>
-#include "video/surface.hpp"
+#include "screen.hpp"
+#include "video/font.hpp"
class DrawingContext;
+class Surface;
+
+/**
+ * Helper class for InfoBox: Represents a line of text
+ */
+class InfoBoxLine
+{
+private:
+ enum LineType { NORMAL, NORMAL_LEFT, SMALL, HEADING, REFERENCE, IMAGE};
+ LineType lineType;
+ Font* font;
+ std::string text;
+ Surface* image;
+
+public:
+ InfoBoxLine(char format_char, const std::string& text);
+ ~InfoBoxLine();
+
+ void draw(DrawingContext& context, const Vector& position, int layer);
+ float get_height();
+
+ static const std::vector<InfoBoxLine*> split(const std::string& text, int line_length);
+};
/** This class is displaying a box with information text inside the game
*/
void scrollup();
void pagedown();
void pageup();
-
+
private:
size_t firstline;
- std::vector<std::string> lines;
+ std::vector<InfoBoxLine*> lines;
std::map<std::string, Surface*> images;
+ Surface* arrow_scrollup;
+ Surface* arrow_scrolldown;
};
-/** Reads a text file (using LispReader, so it as to be in its formatting)
- * and scroll it over the screen
- * (this call blocks until all text scrolled through or the user aborted the
- * textscrolling)
- */
-void display_text_file(const std::string& file);
+class TextScroller : public Screen
+{
+public:
+ TextScroller(const std::string& file);
+ virtual ~TextScroller();
-#endif
+ void setup();
+ void draw(DrawingContext& context);
+ void update(float elapsed_time);
+private:
+ float defaultspeed;
+ float speed;
+ std::string music;
+ std::auto_ptr<Surface> background;
+ std::vector<InfoBoxLine*> lines;
+ float scroll;
+ bool fading;
+};
+
+#endif