From c7fa79ff1704d86e12e12b83e1e4745ca27a543a Mon Sep 17 00:00:00 2001
From: sniper <sniper@livecd.janhome.net>
Date: Wed, 11 Mar 2009 17:19:31 +0100
Subject: Added a class for rendering of floating text

This is a header only-class that merges the textrendering of the
TextParticle and Text classes. It is done to reduce code duplication and
to prepare some color configuration gui.
---
 src/gui/textrenderer.h | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++
 src/text.cpp           | 36 ++++------------------
 src/textparticle.cpp   | 30 +++++--------------
 3 files changed, 94 insertions(+), 53 deletions(-)
 create mode 100644 src/gui/textrenderer.h

diff --git a/src/gui/textrenderer.h b/src/gui/textrenderer.h
new file mode 100644
index 00000000..0381f766
--- /dev/null
+++ b/src/gui/textrenderer.h
@@ -0,0 +1,81 @@
+/*
+ *  Text Renderer
+ *  Copyright (C) 2009  The Mana World Development Team
+ *
+ *  This file is part of The Mana World.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef TEXT_RENDERER_H
+#define TEXT_RENDERER_H
+
+#include "graphics.h"
+#include "palette.h"
+
+/**
+ * Class for text rendering. Used by the TextParticle, the Text and FlashText
+ * objects and the Preview in the color dialog.
+ */
+class TextRenderer
+{
+    public:
+    /**
+     * Renders a specified text.
+     */
+    static inline void renderText(gcn::Graphics *graphics, const std::string&
+            text, int x, int y, gcn::Graphics::Alignment align,
+            const gcn::Color* color, gcn::Font *font, bool outline = false,
+            bool shadow = false, int alpha = 255)
+    {
+        graphics->setFont(font);
+
+        // Text shadow
+        if (shadow)
+        {
+            graphics->setColor(guiPalette->getColor(Palette::SHADOW,
+                    alpha / 2));
+            if (outline)
+            {
+                graphics->drawText(text, x + 2, y + 2, align);
+            }
+            else
+            {
+                graphics->drawText(text, x + 1, y + 1, align);
+            }
+        }
+
+        if (outline) {
+/*            graphics->setColor(guiPalette->getColor(Palette::OUTLINE,
+                    alpha/4));
+            // TODO: Reanable when we can draw it nicely in software mode
+            graphics->drawText(text, x + 2, y + 2, align);
+            graphics->drawText(text, x + 1, y + 2, align);
+            graphics->drawText(text, x + 2, y + 1, align);*/
+
+            // Text outline
+            graphics->setColor(guiPalette->getColor(Palette::OUTLINE, alpha));
+            graphics->drawText(text, x + 1, y, align);
+            graphics->drawText(text, x - 1, y, align);
+            graphics->drawText(text, x, y + 1, align);
+            graphics->drawText(text, x, y - 1, align);
+        }
+
+        graphics->setColor(*color);
+        graphics->drawText(text, x, y, align);
+    }
+};
+
+#endif
diff --git a/src/text.cpp b/src/text.cpp
index cb4587d3..5a912d17 100644
--- a/src/text.cpp
+++ b/src/text.cpp
@@ -30,6 +30,8 @@
 #include "resources/image.h"
 
 #include "gui/gui.h"
+#include "gui/palette.h"
+#include "gui/textrenderer.h"
 
 int Text::mInstances = 0;
 ImageRect Text::mBubble;
@@ -129,37 +131,9 @@ void Text::draw(gcn::Graphics *graphics, int xOff, int yOff)
         */
     }
 
-    // Text shadow
-    graphics->setColor(gcn::Color(0, 0, 0));
-    graphics->drawText(mText, mX - xOff + 1, mY - yOff + 1,
-            gcn::Graphics::LEFT);
-
-    if (!mIsSpeech) {
-        graphics->setColor(gcn::Color(0, 0, 0, 64));
-        /*
-        // TODO: Reanable when we can draw it nicely in software mode
-        graphics->drawText(mText, mX - xOff + 2, mY - yOff + 2,
-                gcn::Graphics::LEFT);
-        graphics->drawText(mText, mX - xOff + 1, mY - yOff + 2,
-                gcn::Graphics::LEFT);
-        graphics->drawText(mText, mX - xOff + 2, mY - yOff + 1,
-                gcn::Graphics::LEFT);
-        */
-
-        // Text outline
-        graphics->setColor(gcn::Color(0, 0, 0));
-        graphics->drawText(mText, mX - xOff + 1, mY - yOff,
-                gcn::Graphics::LEFT);
-        graphics->drawText(mText, mX - xOff - 1, mY - yOff,
-                gcn::Graphics::LEFT);
-        graphics->drawText(mText, mX - xOff, mY - yOff + 1,
-                gcn::Graphics::LEFT);
-        graphics->drawText(mText, mX - xOff, mY - yOff - 1,
-                gcn::Graphics::LEFT);
-    }
-
-    graphics->setColor(mColor);
-    graphics->drawText(mText, mX - xOff, mY - yOff, gcn::Graphics::LEFT);
+    TextRenderer::renderText(graphics, mText,
+            mX - xOff, mY - yOff, gcn::Graphics::LEFT,
+            &mColor, boldFont, !mIsSpeech, true);
 }
 
 FlashText::FlashText(const std::string &text, int x, int y,
diff --git a/src/textparticle.cpp b/src/textparticle.cpp
index 3494b97f..ed8609e9 100644
--- a/src/textparticle.cpp
+++ b/src/textparticle.cpp
@@ -21,10 +21,12 @@
 
 #include <guichan/color.hpp>
 
-#include "graphics.h"
-#include "textparticle.h"
 #include <SDL/SDL_ttf.h>
 
+#include "textparticle.h"
+
+#include "gui/textrenderer.h"
+
 TextParticle::TextParticle(Map *map, const std::string &text,
                            int colorR, int colorG, int colorB,
                            gcn::Font *font, bool outline):
@@ -60,24 +62,8 @@ void TextParticle::draw(Graphics *graphics, int offsetX, int offsetY) const
         alpha /= mFadeIn;
     }
 
-    graphics->setFont(mTextFont);
-    if (mOutline)
-    {
-        graphics->setColor(gcn::Color(0, 0, 0, (int)(alpha/4)));
-        // Text outline
-        graphics->setColor(gcn::Color(0, 0, 0, (int)alpha));
-        graphics->drawText(mText, screenX + 1, screenY,
-                gcn::Graphics::CENTER);
-
-        graphics->drawText(mText, screenX - 1, screenY,
-                gcn::Graphics::CENTER);
-
-        graphics->drawText(mText, screenX, screenY + 1,
-                gcn::Graphics::CENTER);
-
-        graphics->drawText(mText, screenX, screenY - 1,
-                gcn::Graphics::CENTER);
-    }
-    graphics->setColor(gcn::Color(mColorR, mColorG, mColorB, (int)alpha));
-    graphics->drawText(mText, screenX, screenY, gcn::Graphics::CENTER);
+    TextRenderer::renderText(graphics, mText,
+            screenX, screenY, gcn::Graphics::CENTER,
+            &gcn::Color(mColorR, mColorG, mColorB), mTextFont, mOutline, false,
+            (int)alpha);
 }
-- 
cgit v1.2.3-70-g09d2