diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-05-17 19:25:52 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-05-17 19:25:52 +0300 |
commit | 821c0727d1b39ebd43a15fe1b0a680557d539365 (patch) | |
tree | c97175e5db65967c69e5cf68adffcc6f58c71a43 /src/gui/fonts/font.cpp | |
parent | a3eae284bfdb06ea5501230705f19e75e6a0173d (diff) | |
download | mv-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.cpp | 130 |
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), |