diff options
author | Andrei Karas <akaras@inbox.ru> | 2013-02-09 22:03:05 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2013-02-10 03:07:44 +0300 |
commit | f75a1e7af1db4be56430765e19a5aee75284dd3e (patch) | |
tree | 621a4a764758d8ff36aaebd58f5534e00cc64bce /src/gui/sdlfont.cpp | |
parent | a89e756f00adb4e20be74590b624b3fd632c8a95 (diff) | |
download | manaplus-f75a1e7af1db4be56430765e19a5aee75284dd3e.tar.gz manaplus-f75a1e7af1db4be56430765e19a5aee75284dd3e.tar.bz2 manaplus-f75a1e7af1db4be56430765e19a5aee75284dd3e.tar.xz manaplus-f75a1e7af1db4be56430765e19a5aee75284dd3e.zip |
Improve font cache cleaning.
Add missing font cache cleaning code.
Diffstat (limited to 'src/gui/sdlfont.cpp')
-rw-r--r-- | src/gui/sdlfont.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/gui/sdlfont.cpp b/src/gui/sdlfont.cpp index 3a8f4a0b8..404e1d319 100644 --- a/src/gui/sdlfont.cpp +++ b/src/gui/sdlfont.cpp @@ -41,7 +41,7 @@ const unsigned int CACHE_SIZE = 256; 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 = 5; +const unsigned int CLEAN_TIME = 7; const int OUTLINE_SIZE = 1; char *strBuf; @@ -327,17 +327,17 @@ void SDLFont::drawString(gcn::Graphics *const graphics, BLOCK_END("SDLFont::drawString") } -void SDLFont::slowLogic() +void SDLFont::slowLogic(const int rnd) { BLOCK_START("SDLFont::slowLogic") if (!mCleanTime) { - mCleanTime = cur_time + CLEAN_TIME; + mCleanTime = cur_time + CLEAN_TIME + rnd; } else if (mCleanTime < cur_time) { doClean(); - mCleanTime = cur_time + CLEAN_TIME; + mCleanTime = cur_time + CLEAN_TIME + rnd; } BLOCK_END("SDLFont::slowLogic") } @@ -410,8 +410,10 @@ void SDLFont::doClean() #ifdef DEBUG_FONT_COUNTERS mDeleteCounter += 100; #endif - for (int d = 0; d < 100; d ++) - cache->pop_back(); + const std::list<SDLTextChunk>::iterator it_end = cache->end(); + std::list<SDLTextChunk>::iterator it = cache->begin(); + std::advance(it, -100); + cache->erase(it, it_end); #ifdef DEBUG_FONT_COUNTERS logger->log("delete3"); #endif @@ -421,8 +423,10 @@ void SDLFont::doClean() #ifdef DEBUG_FONT_COUNTERS mDeleteCounter += 20; #endif - for (int d = 0; d < 20; d ++) - cache->pop_back(); + const std::list<SDLTextChunk>::iterator it_end = cache->end(); + std::list<SDLTextChunk>::iterator it = cache->begin(); + std::advance(it, -20); + cache->erase(it, it_end); #ifdef DEBUG_FONT_COUNTERS logger->log("delete2"); #endif |