simplify code in create_face
This commit is contained in:
parent
11d8f40342
commit
4541a2207b
1 changed files with 20 additions and 25 deletions
|
@ -267,7 +267,6 @@ face_ptr freetype_engine::create_face(std::string const& family_name,
|
||||||
// look for font registered on specific map
|
// look for font registered on specific map
|
||||||
if (itr != font_file_mapping.end())
|
if (itr != font_file_mapping.end())
|
||||||
{
|
{
|
||||||
found_font_file = true;
|
|
||||||
auto mem_font_itr = font_cache.find(itr->second.second);
|
auto mem_font_itr = font_cache.find(itr->second.second);
|
||||||
// if map has font already in memory, use it
|
// if map has font already in memory, use it
|
||||||
if (mem_font_itr != font_cache.end())
|
if (mem_font_itr != font_cache.end())
|
||||||
|
@ -278,6 +277,7 @@ face_ptr freetype_engine::create_face(std::string const& family_name,
|
||||||
}
|
}
|
||||||
// we don't add to cache here because the map and its font_cache
|
// we don't add to cache here because the map and its font_cache
|
||||||
// must be immutable during rendering for predictable thread safety
|
// must be immutable during rendering for predictable thread safety
|
||||||
|
found_font_file = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -285,41 +285,36 @@ face_ptr freetype_engine::create_face(std::string const& family_name,
|
||||||
itr = global_font_file_mapping_.find(family_name);
|
itr = global_font_file_mapping_.find(family_name);
|
||||||
if (itr != global_font_file_mapping_.end())
|
if (itr != global_font_file_mapping_.end())
|
||||||
{
|
{
|
||||||
|
auto mem_font_itr = global_memory_fonts_.find(itr->second.second);
|
||||||
|
// if font already in memory, use it
|
||||||
|
if (mem_font_itr != global_memory_fonts_.end())
|
||||||
|
{
|
||||||
|
return library.face_from_memory(mem_font_itr->second.first.get(),
|
||||||
|
mem_font_itr->second.second,
|
||||||
|
itr->second.first);
|
||||||
|
}
|
||||||
found_font_file = true;
|
found_font_file = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// if we found file file but it is not yet in memory
|
||||||
if (found_font_file)
|
if (found_font_file)
|
||||||
{
|
{
|
||||||
auto mem_font_itr = global_memory_fonts_.find(itr->second.second);
|
mapnik::util::file file(itr->second.second);
|
||||||
// if font already in memory, use it
|
if (file.open())
|
||||||
if (mem_font_itr != global_memory_fonts_.end())
|
|
||||||
{
|
{
|
||||||
face_ptr face = library.face_from_memory(mem_font_itr->second.first.get(),
|
|
||||||
mem_font_itr->second.second,
|
|
||||||
itr->second.first);
|
|
||||||
if (face) return face;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// otherwise load into memory and cache globally
|
|
||||||
#ifdef MAPNIK_THREADSAFE
|
#ifdef MAPNIK_THREADSAFE
|
||||||
mapnik::scoped_lock lock(mutex_);
|
mapnik::scoped_lock lock(mutex_);
|
||||||
#endif
|
#endif
|
||||||
|
auto result = global_memory_fonts_.emplace(itr->second.second, std::make_pair(std::move(file.data()),file.size()));
|
||||||
mapnik::util::file file(itr->second.second);
|
face_ptr face = library.face_from_memory(result.first->second.first.get(),
|
||||||
if (file.open())
|
result.first->second.second,
|
||||||
|
itr->second.first);
|
||||||
|
if (!face)
|
||||||
{
|
{
|
||||||
auto result = global_memory_fonts_.emplace(itr->second.second, std::make_pair(std::move(file.data()),file.size()));
|
// we can't load font, erase it.
|
||||||
face_ptr face = library.face_from_memory(result.first->second.first.get(),
|
global_memory_fonts_.erase(result.first);
|
||||||
result.first->second.second,
|
|
||||||
itr->second.first);
|
|
||||||
if (!face)
|
|
||||||
{
|
|
||||||
// we can't load font, erase it.
|
|
||||||
global_memory_fonts_.erase(result.first);
|
|
||||||
}
|
|
||||||
return face;
|
|
||||||
}
|
}
|
||||||
|
return face;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return face_ptr();
|
return face_ptr();
|
||||||
|
|
Loading…
Reference in a new issue