X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftextscroller.hpp;h=b232b18956f9a8d88e9e5a134ba35e594263db11;hb=1b5e7a23a3c8f8aac6a908a7a8939f1067ce9a7e;hp=5afef35497184b6f91061cd5ef51cf62f871b2fe;hpb=89afae628ef9bf46b66f42a2573f6abc5f9bcb61;p=supertux.git diff --git a/src/textscroller.hpp b/src/textscroller.hpp index 5afef3549..b232b1895 100644 --- a/src/textscroller.hpp +++ b/src/textscroller.hpp @@ -1,7 +1,7 @@ // $Id$ -// +// // SuperTux -// Copyright (C) 2005 Matthias Braun +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -12,7 +12,7 @@ // 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 @@ -24,10 +24,38 @@ #include #include #include +#include -#include "video/surface.hpp" +#include "screen.hpp" +#include "math/vector.hpp" +#include "math/rect.hpp" class DrawingContext; +class Surface; +class Font; + +/** + * Helper class for InfoBox: Represents a line of text + */ +class InfoBoxLine +{ +public: + enum LineType { NORMAL, NORMAL_LEFT, SMALL, HEADING, REFERENCE, IMAGE}; + + InfoBoxLine(char format_char, const std::string& text); + ~InfoBoxLine(); + + void draw(DrawingContext& context, const Rect& bbox, int layer); + float get_height(); + + static const std::vector split(const std::string& text, float width); + +private: + InfoBoxLine::LineType lineType; + Font* font; + std::string text; + Surface* image; +}; /** This class is displaying a box with information text inside the game */ @@ -42,21 +70,36 @@ public: void scrollup(); void pagedown(); void pageup(); - + private: size_t firstline; - std::vector lines; + std::vector lines; std::map 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) +/** + * Screen that displays intro text, extro text, etc. */ -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 background; + std::vector lines; + float scroll; + bool fading; +}; + +#endif