diff engine/core/view/renderers/floatingtextrenderer.cpp @ 582:5e04f6349894

* Improved the floatingtextrenderer. You can now set a background speech quad. * Added a speech quad example to rio de hola. * Little fix to the editor stuff.
author helios2000@33b003aa-7bff-0310-803a-e67f0ece8222
date Tue, 03 Aug 2010 13:57:12 +0000
parents b2feacaed53c
children 47b49b9b0c0a
line wrap: on
line diff
--- a/engine/core/view/renderers/floatingtextrenderer.cpp	Mon Aug 02 10:26:21 2010 +0000
+++ b/engine/core/view/renderers/floatingtextrenderer.cpp	Tue Aug 03 13:57:12 2010 +0000
@@ -47,6 +47,7 @@
 
 	FloatingTextRenderer::FloatingTextRenderer(RenderBackend* renderbackend, int position, AbstractFont* font):
 		RendererBase(renderbackend, position),
+		m_renderbackend(renderbackend),
 		m_font(font) {
 		setEnabled(false);
 		m_font_color = false;
@@ -55,6 +56,7 @@
 
  	FloatingTextRenderer::FloatingTextRenderer(const FloatingTextRenderer& old):
 		RendererBase(old),
+		m_renderbackend(old.m_renderbackend),
 		m_font(old.m_font),
 		m_font_color(old.m_font_color),
 		m_color(old.m_color) {
@@ -91,6 +93,20 @@
 				r.y = ir.y- img->getHeight(); /// make the text rect floating higher than the instance.
 				r.w = img->getWidth();
 				r.h = img->getHeight();
+				if(m_background) {
+					const int overdraw = 5;
+					Point p1 = Point(r.x-overdraw, r.y-overdraw);
+					Point p2 = Point(r.x+r.w+overdraw, r.y-overdraw);
+					Point p3 = Point(r.x+r.w+overdraw, r.y+r.h+overdraw);
+					Point p4 = Point(r.x-overdraw, r.y+r.h+overdraw);
+
+					m_renderbackend->drawQuad(p1, p2, p3, p4, m_backcolor.r, m_backcolor.g, m_backcolor.b);
+
+					m_renderbackend->drawLine(p1, p2, m_backbordercolor.r, m_backbordercolor.g, m_backbordercolor.b);
+					m_renderbackend->drawLine(p2, p3, m_backbordercolor.r, m_backbordercolor.g, m_backbordercolor.b);
+					m_renderbackend->drawLine(p3, p4, m_backbordercolor.r, m_backbordercolor.g, m_backbordercolor.b);
+					m_renderbackend->drawLine(p4, p1, m_backbordercolor.r, m_backbordercolor.g, m_backbordercolor.b);
+				}
 				img->render(r);
 			}
 		}
@@ -106,6 +122,22 @@
 		m_color.b = b;
 	}
 
+	void FloatingTextRenderer::setDefaultBackground(Uint8 br, Uint8 bg, Uint8 bb, Uint8 bbr, Uint8 bbg, Uint8 bbb) {
+		m_backcolor.r = br;
+		m_backcolor.g = bg;
+		m_backcolor.b = bb;
+
+		m_backbordercolor.r = bbr;
+		m_backbordercolor.g = bbg;
+		m_backbordercolor.b = bbb;
+
+		m_background = true;
+	}
+
+	void FloatingTextRenderer::resetDefaultBackground() {
+		m_background = false;
+	}
+
 	FloatingTextRenderer* FloatingTextRenderer::getInstance(IRendererContainer* cnt) {
 		return dynamic_cast<FloatingTextRenderer*>(cnt->getRenderer("FloatingTextRenderer"));
 	}