X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fvideo%2Ffont.cpp;h=7628f673e0f6ab1e84f7063ce6afca06981f5eac;hb=6001852fe09ef3c57b8e51dafd2370881f08592e;hp=f967892d3229204d045a8d0b0ed7ec4b8757be18;hpb=944f31d9d3127b218415fbd1b6ac8f642be88863;p=supertux.git diff --git a/src/video/font.cpp b/src/video/font.cpp index f967892d3..7628f673e 100644 --- a/src/video/font.cpp +++ b/src/video/font.cpp @@ -31,6 +31,7 @@ #include "lisp/lisp.hpp" #include "screen.hpp" #include "font.hpp" +#include "renderer.hpp" #include "drawing_context.hpp" #include "log.hpp" @@ -242,8 +243,10 @@ Font::wrap_to_chars(const std::string& s, int line_length, std::string* overflow } std::string -Font::wrap_to_width(const std::string& s, float width, std::string* overflow) +Font::wrap_to_width(const std::string& s_, float width, std::string* overflow) { + std::string s = s_; + // if text is already smaller, return full text if (get_text_width(s) <= width) { if (overflow) *overflow = ""; @@ -266,8 +269,9 @@ Font::wrap_to_width(const std::string& s, float width, std::string* overflow) } void -Font::draw(const std::string& text, const Vector& pos_, FontAlignment alignment, - DrawingEffect drawing_effect, float alpha) const +Font::draw(Renderer *renderer, const std::string& text, const Vector& pos_, + FontAlignment alignment, DrawingEffect drawing_effect, + float alpha) const { float x = pos_.x; float y = pos_.y; @@ -291,7 +295,7 @@ Font::draw(const std::string& text, const Vector& pos_, FontAlignment alignment, // no bluring as we would get with subpixel positions pos.x = static_cast(pos.x); - draw_text(temp, pos, drawing_effect, alpha); + draw_text(renderer, temp, pos, drawing_effect, alpha); if (i == text.size()) break; @@ -303,7 +307,7 @@ Font::draw(const std::string& text, const Vector& pos_, FontAlignment alignment, } void -Font::draw_text(const std::string& text, const Vector& pos, +Font::draw_text(Renderer *renderer, const std::string& text, const Vector& pos, DrawingEffect drawing_effect, float alpha) const { if(shadowsize > 0) @@ -311,11 +315,11 @@ Font::draw_text(const std::string& text, const Vector& pos, // FIXME: shadow_glyph_surface and glyph_surface do currently // share the same glyph array, this is incorrect and should be // fixed, it is however hardly noticable - draw_chars(shadow_glyph_surface, text, pos + Vector(shadowsize, shadowsize), - drawing_effect, alpha); + draw_chars(renderer, shadow_glyph_surface, text, + pos + Vector(shadowsize, shadowsize), drawing_effect, alpha); } - draw_chars(glyph_surface, text, pos, drawing_effect, alpha); + draw_chars(renderer, glyph_surface, text, pos, drawing_effect, alpha); } int @@ -341,8 +345,9 @@ Font::chr2glyph(uint32_t chr) const } void -Font::draw_chars(Surface* pchars, const std::string& text, const Vector& pos, - DrawingEffect drawing_effect, float alpha) const +Font::draw_chars(Renderer *renderer, Surface* pchars, const std::string& text, + const Vector& pos, DrawingEffect drawing_effect, + float alpha) const { Vector p = pos; @@ -362,12 +367,20 @@ Font::draw_chars(Surface* pchars, const std::string& text, const Vector& pos, else { const Glyph& glyph = glyphs[font_index]; - pchars->draw_part(glyph.rect.get_left(), - glyph.rect.get_top(), - p.x + glyph.offset.y, - p.y + glyph.offset.y, - glyph.rect.get_width(), glyph.rect.get_height(), - alpha, drawing_effect); + DrawingRequest request; + + request.pos = p + glyph.offset; + request.drawing_effect = drawing_effect; + request.alpha = alpha; + + SurfacePartRequest surfacepartrequest; + surfacepartrequest.size = glyph.rect.p2 - glyph.rect.p1; + surfacepartrequest.source = glyph.rect.p1; + surfacepartrequest.surface = pchars; + + request.request_data = &surfacepartrequest; + renderer->draw_surface_part(request); + p.x += glyphs[font_index].advance; } }