summaryrefslogtreecommitdiff
path: root/src/gui/fonts/font.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-05-17 19:25:52 +0300
committerAndrei Karas <akaras@inbox.ru>2014-05-17 19:25:52 +0300
commit821c0727d1b39ebd43a15fe1b0a680557d539365 (patch)
treec97175e5db65967c69e5cf68adffcc6f58c71a43 /src/gui/fonts/font.cpp
parenta3eae284bfdb06ea5501230705f19e75e6a0173d (diff)
downloadmv-821c0727d1b39ebd43a15fe1b0a680557d539365.tar.gz
mv-821c0727d1b39ebd43a15fe1b0a680557d539365.tar.bz2
mv-821c0727d1b39ebd43a15fe1b0a680557d539365.tar.xz
mv-821c0727d1b39ebd43a15fe1b0a680557d539365.zip
Move textchunk into separate file.
Diffstat (limited to 'src/gui/fonts/font.cpp')
-rw-r--r--src/gui/fonts/font.cpp130
1 files changed, 3 insertions, 127 deletions
diff --git a/src/gui/fonts/font.cpp b/src/gui/fonts/font.cpp
index a8f636862..485d1a84e 100644
--- a/src/gui/fonts/font.cpp
+++ b/src/gui/fonts/font.cpp
@@ -69,6 +69,8 @@
#include "logger.h"
#include "main.h"
+#include "gui/fonts/textchunk.h"
+
#include "render/sdlgraphics.h"
#include "resources/image.h"
@@ -89,136 +91,10 @@ const unsigned int CACHE_SIZE_SMALL1 = 2;
const unsigned int CACHE_SIZE_SMALL2 = 50;
const unsigned int CACHE_SIZE_SMALL3 = 170;
const unsigned int CLEAN_TIME = 7;
-const int OUTLINE_SIZE = 1;
bool Font::mSoftMode(false);
-char *strBuf = nullptr;
-
-#ifdef UNITTESTS
-int sdlTextChunkCnt = 0;
-#endif
-
-TextChunk::TextChunk(const std::string &text0, const Color &color0,
- const Color &color1) :
- img(nullptr),
- text(text0),
- color(color0),
- color2(color1),
- prev(nullptr),
- next(nullptr)
-{
-#ifdef UNITTESTS
- sdlTextChunkCnt ++;
-#endif
-}
-
-TextChunk::~TextChunk()
-{
- delete2(img);
-#ifdef UNITTESTS
- sdlTextChunkCnt --;
-#endif
-}
-
-bool TextChunk::operator==(const TextChunk &chunk) const
-{
- return (chunk.text == text && chunk.color == color
- && chunk.color2 == color2);
-}
-
-void TextChunk::generate(TTF_Font *const font, const float alpha)
-{
- BLOCK_START("TextChunk::generate")
- SDL_Color sdlCol;
- sdlCol.b = static_cast<uint8_t>(color.b);
- sdlCol.r = static_cast<uint8_t>(color.r);
- sdlCol.g = static_cast<uint8_t>(color.g);
-#ifdef USE_SDL2
- sdlCol.a = 255;
-#else
- sdlCol.unused = 0;
-#endif
-
- getSafeUtf8String(text, strBuf);
-
- SDL_Surface *surface = MTTF_RenderUTF8_Blended(
- font, strBuf, sdlCol);
-
- if (!surface)
- {
- img = nullptr;
- BLOCK_END("TextChunk::generate")
- return;
- }
-
- const int width = surface->w;
- const int height = surface->h;
-
- if (color.r != color2.r || color.g != color2.g
- || color.b != color2.b)
- { // outlining
- SDL_Color sdlCol2;
- SDL_Surface *const background = imageHelper->create32BitSurface(
- width, height);
- if (!background)
- {
- img = nullptr;
- MSDL_FreeSurface(surface);
- BLOCK_END("TextChunk::generate")
- return;
- }
- sdlCol2.b = static_cast<uint8_t>(color2.b);
- sdlCol2.r = static_cast<uint8_t>(color2.r);
- sdlCol2.g = static_cast<uint8_t>(color2.g);
-#ifdef USE_SDL2
- sdlCol2.a = 255;
-#else
- sdlCol2.unused = 0;
-#endif
- SDL_Surface *const surface2 = MTTF_RenderUTF8_Blended(
- font, strBuf, sdlCol2);
- if (!surface2)
- {
- img = nullptr;
- MSDL_FreeSurface(surface);
- BLOCK_END("TextChunk::generate")
- return;
- }
- SDL_Rect rect =
- {
- OUTLINE_SIZE,
- 0,
- static_cast<Uint16>(surface->w),
- static_cast<Uint16>(surface->h)
- };
- SurfaceImageHelper::combineSurface(surface2, nullptr,
- background, &rect);
- rect.x = -OUTLINE_SIZE;
- SurfaceImageHelper::combineSurface(surface2, nullptr,
- background, &rect);
- rect.x = 0;
- rect.y = -OUTLINE_SIZE;
- SurfaceImageHelper::combineSurface(surface2, nullptr,
- background, &rect);
- rect.y = OUTLINE_SIZE;
- SurfaceImageHelper::combineSurface(surface2, nullptr,
- background, &rect);
- rect.x = 0;
- rect.y = 0;
- SurfaceImageHelper::combineSurface(surface, nullptr,
- background, &rect);
- MSDL_FreeSurface(surface);
- MSDL_FreeSurface(surface2);
- surface = background;
- }
- img = imageHelper->createTextSurface(
- surface, width, height, alpha);
- MSDL_FreeSurface(surface);
-
- BLOCK_END("TextChunk::generate")
-}
-
+extern char *strBuf;
TextChunkList::TextChunkList() :
start(nullptr),