}
float
-Font::get_height() const
+Font::get_text_width(const std::string& text) const
{
- return h;
+ /** Let's calculate the size of the biggest paragraph */
+ int l, hl;
+ hl = 0; l = -1;
+ while(true)
+ {
+ l = text.find("\n", l+1);
+ if(l == (int)std::string::npos)
+ break;
+ if(hl < l)
+ hl = l;
+ }
+ if(hl == 0)
+ hl = text.size();
+
+ return hl * w;
}
float
-Font::get_text_width(const std::string& text) const
+Font::get_text_height(const std::string& text) const
+{
+ /** Let's calculate height of the text */
+ int l, hh;
+ hh = h; l = -1;
+ while(true)
+ {
+ l = text.find("\n", l+1);
+ if(l == (int)std::string::npos)
+ break;
+ hh += h + 2;
+ }
+
+ return hh;
+}
+
+float
+Font::get_height() const
{
- return text.size() * w;
+ return h;
}
void
-Font::draw(const std::string& text, const Vector& pos, Uint32 drawing_effect)
+Font::draw(const std::string& text, const Vector& pos, Uint32 drawing_effect, int alpha)
{
if(shadowsize > 0)
draw_chars(shadow_chars, text, pos + Vector(shadowsize, shadowsize),
- drawing_effect);
+ drawing_effect, alpha);
- draw_chars(chars, text, pos, drawing_effect);
+ draw_chars(chars, text, pos, drawing_effect, alpha);
}
void
-Font::draw_center(const std::string& text, const Vector& pos, Uint32 drawing_effect)
+Font::draw_center(const std::string& text, const Vector& pos, Uint32 drawing_effect, int alpha)
{
/* Cut lines changes into seperate strings, needed to support centering text
with break lines.
{
temp[text.copy(temp, text.size() - i, i)] = '\0';
draw(temp, Vector(screen->w/2 - get_text_width(temp)/2 + pos.x, pos.y + y),
- drawing_effect);
+ drawing_effect, alpha);
break;
}
temp[text.copy(temp, l - i, i)] = '\0';
draw(temp, Vector(screen->w/2 - get_text_width(temp)/2 + pos.x, pos.y + y),
- drawing_effect);
+ drawing_effect, alpha);
i = l+1;
y += h + 2;
void
Font::draw_chars(Surface* pchars, const std::string& text, const Vector& pos,
- Uint32 drawing_effect)
+ Uint32 drawing_effect, int alpha)
{
SurfaceImpl* impl = pchars->impl;
int source_x = (index % 16) * w;
int source_y = (index / 16) * h;
- impl->draw_part(source_x, source_y, p.x, p.y, w, h, 255, drawing_effect);
+ impl->draw_part(source_x, source_y, p.x, p.y, w, h, alpha, drawing_effect);
p.x += w;
}
}