From d1327dea8801b36d155c93619b0d4741f981fa86 Mon Sep 17 00:00:00 2001 From: artemp Date: Thu, 1 Jun 2017 10:45:09 +0200 Subject: [PATCH] freetype_engine - preserve original intetface via static methods + make impl methods private. --- include/mapnik/font_engine_freetype.hpp | 61 ++++++++++++++---------- src/font_engine_freetype.cpp | 62 +++++++++++++++++++++---- 2 files changed, 90 insertions(+), 33 deletions(-) diff --git a/include/mapnik/font_engine_freetype.hpp b/include/mapnik/font_engine_freetype.hpp index 7365374e7..f05313d98 100644 --- a/include/mapnik/font_engine_freetype.hpp +++ b/include/mapnik/font_engine_freetype.hpp @@ -56,34 +56,48 @@ class MAPNIK_DECL freetype_engine : public singleton; + friend class Map; public: using font_file_mapping_type = std::map>; using font_memory_cache_type = std::map, std::size_t>>; - bool is_font_file(std::string const& file_name); - /*! \brief register a font file - * @param file_name path to a font file. - * @return bool - true if at least one face was successfully registered in the file. - */ - bool register_font(std::string const& file_name); - /*! \brief register a font files - * @param dir - path to a directory containing fonts or subdirectories. - * @param recurse - default false, whether to search for fonts in sub directories. - * @return bool - true if at least one face was successfully registered. - */ - bool register_fonts(std::string const& dir, bool recurse = false); - std::vector face_names(); - font_file_mapping_type const& get_mapping(); - font_memory_cache_type & get_cache(); - bool can_open(std::string const& face_name, + + static bool is_font_file(std::string const& file_name); + static bool register_font(std::string const& file_name); + static bool register_fonts(std::string const& dir, bool recurse = false); + static std::vector face_names(); + static font_file_mapping_type const& get_mapping(); + static font_memory_cache_type & get_cache(); + static bool can_open(std::string const& face_name, font_library & library, font_file_mapping_type const& font_file_mapping, font_file_mapping_type const& global_font_file_mapping); - face_ptr create_face(std::string const& face_name, - font_library & library, - font_file_mapping_type const& font_file_mapping, - freetype_engine::font_memory_cache_type const& font_cache, - font_file_mapping_type const& global_font_file_mapping, - freetype_engine::font_memory_cache_type & global_memory_fonts); + + static face_ptr create_face(std::string const& face_name, + font_library & library, + font_file_mapping_type const& font_file_mapping, + freetype_engine::font_memory_cache_type const& font_cache, + font_file_mapping_type const& global_font_file_mapping, + freetype_engine::font_memory_cache_type & global_memory_fonts); +private: + bool is_font_file_impl(std::string const& file_name); + std::vector face_names_impl(); + font_file_mapping_type const& get_mapping_impl(); + font_memory_cache_type& get_cache_impl(); + bool can_open_impl(std::string const& face_name, + font_library & library, + font_file_mapping_type const& font_file_mapping, + font_file_mapping_type const& global_font_file_mapping); + + face_ptr create_face_impl(std::string const& face_name, + font_library & library, + font_file_mapping_type const& font_file_mapping, + freetype_engine::font_memory_cache_type const& font_cache, + font_file_mapping_type const& global_font_file_mapping, + freetype_engine::font_memory_cache_type & global_memory_fonts); + bool register_font_impl(std::string const& file_name); + bool register_fonts_impl(std::string const& dir, bool recurse); + bool register_font_impl(std::string const& file_name, FT_LibraryRec_ * library); + bool register_fonts_impl(std::string const& dir, FT_LibraryRec_ * library, bool recurse = false); bool register_font_impl(std::string const& file_name, font_library & libary, font_file_mapping_type & font_file_mapping); @@ -91,9 +105,6 @@ public: font_library & libary, font_file_mapping_type & font_file_mapping, bool recurse = false); -private: - bool register_font_impl(std::string const& file_name, FT_LibraryRec_ * library); - bool register_fonts_impl(std::string const& dir, FT_LibraryRec_ * library, bool recurse = false); #ifdef MAPNIK_THREADSAFE std::mutex mutex_; #endif diff --git a/src/font_engine_freetype.cpp b/src/font_engine_freetype.cpp index 673fb7d0e..ade2fea08 100644 --- a/src/font_engine_freetype.cpp +++ b/src/font_engine_freetype.cpp @@ -77,6 +77,11 @@ unsigned long ft_read_cb(FT_Stream stream, unsigned long offset, unsigned char * } bool freetype_engine::register_font(std::string const& file_name) +{ + return instance().register_font_impl(file_name); +} + +bool freetype_engine::register_font_impl(std::string const& file_name) { #ifdef MAPNIK_THREADSAFE std::lock_guard lock(mutex_); @@ -159,6 +164,11 @@ bool freetype_engine::register_font_impl(std::string const& file_name, } bool freetype_engine::register_fonts(std::string const& dir, bool recurse) +{ + return instance().register_fonts_impl(dir, recurse); +} + +bool freetype_engine::register_fonts_impl(std::string const& dir, bool recurse) { #ifdef MAPNIK_THREADSAFE std::lock_guard lock(mutex_); @@ -214,8 +224,12 @@ bool freetype_engine::register_fonts_impl(std::string const& dir, return success; } +std::vector freetype_engine::face_names() +{ + return instance().face_names_impl(); +} -std::vector freetype_engine::face_names () +std::vector freetype_engine::face_names_impl() { std::vector names; for (auto const& kv : global_font_file_mapping_) @@ -226,11 +240,21 @@ std::vector freetype_engine::face_names () } freetype_engine::font_file_mapping_type const& freetype_engine::get_mapping() +{ + return instance().get_mapping_impl(); +} + +freetype_engine::font_file_mapping_type const& freetype_engine::get_mapping_impl() { return global_font_file_mapping_; } freetype_engine::font_memory_cache_type & freetype_engine::get_cache() +{ + return instance().get_cache_impl(); +} + +freetype_engine::font_memory_cache_type & freetype_engine::get_cache_impl() { return global_memory_fonts_; } @@ -239,6 +263,14 @@ bool freetype_engine::can_open(std::string const& face_name, font_library & library, font_file_mapping_type const& font_file_mapping, font_file_mapping_type const& global_font_file_mapping) +{ + return instance().can_open_impl(face_name, library, font_file_mapping, global_font_file_mapping); +} + +bool freetype_engine::can_open_impl(std::string const& face_name, + font_library & library, + font_file_mapping_type const& font_file_mapping, + font_file_mapping_type const& global_font_file_mapping) { bool found_font_file = false; font_file_mapping_type::const_iterator itr = font_file_mapping.find(face_name); @@ -277,12 +309,12 @@ bool freetype_engine::can_open(std::string const& face_name, return true; } -face_ptr freetype_engine::create_face(std::string const& family_name, - font_library & library, - freetype_engine::font_file_mapping_type const& font_file_mapping, - freetype_engine::font_memory_cache_type const& font_cache, - freetype_engine::font_file_mapping_type const& global_font_file_mapping, - freetype_engine::font_memory_cache_type & global_memory_fonts) +face_ptr freetype_engine::create_face_impl(std::string const& family_name, + font_library & library, + freetype_engine::font_file_mapping_type const& font_file_mapping, + freetype_engine::font_memory_cache_type const& font_cache, + freetype_engine::font_file_mapping_type const& global_font_file_mapping, + freetype_engine::font_memory_cache_type & global_memory_fonts) { bool found_font_file = false; font_file_mapping_type::const_iterator itr = font_file_mapping.find(family_name); @@ -354,6 +386,20 @@ face_ptr freetype_engine::create_face(std::string const& family_name, return face_ptr(); } +face_ptr freetype_engine::create_face(std::string const& family_name, + font_library & library, + freetype_engine::font_file_mapping_type const& font_file_mapping, + freetype_engine::font_memory_cache_type const& font_cache, + freetype_engine::font_file_mapping_type const& global_font_file_mapping, + freetype_engine::font_memory_cache_type & global_memory_fonts) +{ + return instance().create_face_impl(family_name, + library, + font_file_mapping, + font_cache, + global_font_file_mapping, + global_memory_fonts); +} face_manager::face_manager(font_library & library, freetype_engine::font_file_mapping_type const& font_file_mapping, @@ -380,7 +426,7 @@ face_ptr face_manager::get_face(std::string const& name) } else { - face_ptr face = freetype_engine::instance().create_face(name, + face_ptr face = freetype_engine::create_face(name, library_, font_file_mapping_, font_memory_cache_,