X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Fvideo%2Fdrawing_context.hpp;h=86c3c7acf16c0e3c3b3a59a47b4ef54d3510fbf1;hb=c2624ec9162122f2e625b57eac798ee37912c3e0;hp=302b90e232e77a30a753e07b30236b29438eb3d6;hpb=c1277f5b7db9f55d1d28f658b4e804f32b76f0ce;p=supertux.git diff --git a/src/video/drawing_context.hpp b/src/video/drawing_context.hpp index 302b90e23..86c3c7acf 100644 --- a/src/video/drawing_context.hpp +++ b/src/video/drawing_context.hpp @@ -20,15 +20,15 @@ #include #include #include - #include +#include -#include "math/rect.hpp" +#include "math/rectf.hpp" #include "math/vector.hpp" -#include "obstack/obstack.h" #include "video/color.hpp" #include "video/drawing_request.hpp" #include "video/font.hpp" +#include "video/font_ptr.hpp" #include "video/texture.hpp" class Surface; @@ -36,6 +36,15 @@ class Texture; class Renderer; class Lightmap; +inline int next_po2(int val) +{ + int result = 1; + while(result < val) + result *= 2; + + return result; +} + /** * This class provides functions for drawing things on screen. It also * maintains a stack of transforms that are applied to graphics. @@ -49,34 +58,37 @@ public: void init_renderer(); /// Adds a drawing request for a surface into the request list. - void draw_surface(const Surface* surface, const Vector& position, + void draw_surface(SurfacePtr surface, const Vector& position, int layer); /// Adds a drawing request for a surface into the request list. - void draw_surface(const Surface* surface, const Vector& position, + void draw_surface(SurfacePtr surface, const Vector& position, float angle, const Color& color, const Blend& blend, int layer); /// Adds a drawing request for part of a surface. - void draw_surface_part(const Surface* surface, const Vector& source, + void draw_surface_part(SurfacePtr surface, const Vector& source, const Vector& size, const Vector& dest, int layer); /// Draws a text. - void draw_text(const Font* font, const std::string& text, + void draw_text(FontPtr font, const std::string& text, const Vector& position, FontAlignment alignment, int layer, Color color = Color(1.0,1.0,1.0)); /// Draws text on screen center (feed Vector.x with a 0). /// This is the same as draw_text() with a SCREEN_WIDTH/2 position and /// alignment set to LEFT_ALIGN - void draw_center_text(const Font* font, const std::string& text, + void draw_center_text(FontPtr font, const std::string& text, const Vector& position, int layer, Color color = Color(1.0,1.0,1.0)); /// Draws a color gradient onto the whole screen */ void draw_gradient(const Color& from, const Color& to, int layer); /// Fills a rectangle. void draw_filled_rect(const Vector& topleft, const Vector& size, const Color& color, int layer); - void draw_filled_rect(const Rect& rect, const Color& color, int layer); - void draw_filled_rect(const Rect& rect, const Color& color, float radius, int layer); + void draw_filled_rect(const Rectf& rect, const Color& color, int layer); + void draw_filled_rect(const Rectf& rect, const Color& color, float radius, int layer); void draw_inverse_ellipse(const Vector& pos, const Vector& size, const Color& color, int layer); + /// Returns the visible area in world coordinates + Rectf get_cliprect() const; + /// Processes all pending drawing requests and flushes the list. void do_drawing();