From: Ondřej Hošek Date: Wed, 26 Oct 2005 14:32:57 +0000 (+0000) Subject: Added and implemented arrows that appear when scrolling is possible in an infobox... X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=89afae628ef9bf46b66f42a2573f6abc5f9bcb61;p=supertux.git Added and implemented arrows that appear when scrolling is possible in an infobox. Feel more than free to redo the arrow images -- mine are there only for testing. SVN-Revision: 2919 --- diff --git a/data/images/engine/menu/scroll-down.png b/data/images/engine/menu/scroll-down.png new file mode 100644 index 000000000..84eecc214 Binary files /dev/null and b/data/images/engine/menu/scroll-down.png differ diff --git a/data/images/engine/menu/scroll-up.png b/data/images/engine/menu/scroll-up.png new file mode 100644 index 000000000..ec41b46f1 Binary files /dev/null and b/data/images/engine/menu/scroll-up.png differ diff --git a/data/levels/world1/level1.stl b/data/levels/world1/level1.stl index a0f0b8821..65857e3fb 100644 --- a/data/levels/world1/level1.stl +++ b/data/levels/world1/level1.stl @@ -108,6 +108,67 @@ (y 100) ) (bell (x 5313) (y 289)) + (infoblock + (x 192) (y 320) + (message (_ "-Information blocks: +!images/objects/bonus_block/info_block.png +#Information blocks often +#contain useful tips. + +#As you have already +#found out, they can be +#activated by hitting +#them from the bottom. +#Most blocks are +#activated this way.")) + ) + (infoblock + (x 256) (y 320) + (message (_ "-Items: +!images/powerups/egg/egg.png +#The egg makes Tux grow +#larger. + +!images/powerups/fire_flower/fire_flower-0.png +#The fire flower gives +#Tux the ability to +#shoot fireballs. + +!images/objects/coin/coin-0.png +#You should collect as +#many coins as possible. +#Once you have a hundred, +#they are traded for an +#additional life. + +!images/powerups/1up/1up.png +#The penguin gives Tux an +#additional life. + +!images/objects/bonus_block/full-0.png +#Bonus blocks can contain +#coins, eggs, fire flowers +#or lives.")) + ) + (infoblock + (x 5377) (y 225) + (message (_ "-Bells: +!images/objects/bell/bell-m.png +#If you activate the bell +#now, you will restart +#under it if you die.")) + ) + (infoblock + (x 7616) (y 320) + (message (_ "!images/tiles/signs/run.png +#The path in front of you +#is blocked. You'll have +#to run before jumping +#over the blocks. Use your +#Run key (set to Control +#by default) to gain +#speed.")) + ) (snowball (x 1089) (y 404)) (snowball (x 1687) (y 408)) (snowball (x 1970) (y 408)) diff --git a/src/textscroller.cpp b/src/textscroller.cpp index 2e036879a..1cb243bd9 100644 --- a/src/textscroller.cpp +++ b/src/textscroller.cpp @@ -25,6 +25,7 @@ #include "resources.hpp" #include "video/font.hpp" #include "video/drawing_context.hpp" +#include "video/surface.hpp" #include "lisp/parser.hpp" #include "lisp/lisp.hpp" #include "audio/sound_manager.hpp" @@ -220,7 +221,7 @@ InfoBox::InfoBox(const std::string& text) : firstline(0) { split_text(text, lines); - + for(size_t i = 0; i < lines.size(); ++i) { if(lines[i].size() == 0) continue; @@ -229,6 +230,19 @@ InfoBox::InfoBox(const std::string& text) images.insert(std::make_pair(imagename, new Surface(imagename))); } } + + try + { + // get the arrow sprites + arrow_scrollup = new Surface("images/engine/menu/scroll-up.png"); + arrow_scrolldown = new Surface("images/engine/menu/scroll-down.png"); + } + catch (std::exception& e) + { + std::cout << "Could not load scrolling images: " << e.what() << std::endl; + arrow_scrollup = 0; + arrow_scrolldown = 0; + } } InfoBox::~InfoBox() @@ -245,12 +259,12 @@ InfoBox::draw(DrawingContext& context) const Font* normal_font = white_text; const Font* small_font = white_small_text; const Font* reference_font = blue_text; - + float x1 = 200; float y1 = 100; float width = 400; float height = 200; - + context.draw_filled_rect(Vector(x1, y1), Vector(width, height), Color(0.6f, 0.7f, 0.8f, 0.5f), LAYER_GUI-1); @@ -286,7 +300,7 @@ InfoBox::draw(DrawingContext& context) center = false; break; } - + if(image != 0) { context.draw_surface(image, Vector( (SCREEN_WIDTH - image->get_width()) / 2, @@ -304,7 +318,19 @@ InfoBox::draw(DrawingContext& context) Vector(x1, y), LEFT_ALLIGN, LAYER_GUI); y += font->get_height() + ITEMS_SPACE; - } + } + + // draw the scrolling arrows + if (arrow_scrollup && firstline > 0) + context.draw_surface(arrow_scrollup, + Vector( x1 + width - arrow_scrollup->get_width(), // top-right corner of box + y1), LAYER_GUI); + + if (arrow_scrolldown && firstline < lines.size()-1) + context.draw_surface(arrow_scrolldown, + Vector( x1 + width - arrow_scrolldown->get_width(), // bottom-light corner of box + y1 + height - arrow_scrolldown->get_height()), + LAYER_GUI); } } diff --git a/src/textscroller.hpp b/src/textscroller.hpp index 01615c173..5afef3549 100644 --- a/src/textscroller.hpp +++ b/src/textscroller.hpp @@ -47,6 +47,8 @@ private: size_t firstline; 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)