From f1f2ebb019980d4c53d563d3495e016d50e23945 Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Mon, 27 Nov 2017 12:50:28 -0800 Subject: [core] Hook LocalGlyphRasterizer "font family" configuration up to Renderer --- include/mbgl/renderer/renderer.hpp | 3 ++- platform/default/local_glyph_rasterizer.cpp | 9 +++++++++ src/mbgl/renderer/renderer.cpp | 5 +++-- src/mbgl/renderer/renderer_impl.cpp | 5 +++-- src/mbgl/renderer/renderer_impl.hpp | 2 +- src/mbgl/text/glyph_manager.hpp | 2 +- src/mbgl/text/local_glyph_rasterizer.hpp | 6 +++++- src/mbgl/util/i18n.cpp | 5 +++++ src/mbgl/util/i18n.hpp | 4 ++++ 9 files changed, 33 insertions(+), 8 deletions(-) diff --git a/include/mbgl/renderer/renderer.hpp b/include/mbgl/renderer/renderer.hpp index 23d2451a2e..a60f3f6e4d 100644 --- a/include/mbgl/renderer/renderer.hpp +++ b/include/mbgl/renderer/renderer.hpp @@ -25,7 +25,8 @@ class Renderer { public: Renderer(RendererBackend&, float pixelRatio_, FileSource&, Scheduler&, GLContextMode = GLContextMode::Unique, - const optional programCacheDir = {}); + const optional programCacheDir = {}, + const optional localFontFamily = {}); ~Renderer(); void markContextLost(); diff --git a/platform/default/local_glyph_rasterizer.cpp b/platform/default/local_glyph_rasterizer.cpp index 7ace6cbfb1..7866f29420 100644 --- a/platform/default/local_glyph_rasterizer.cpp +++ b/platform/default/local_glyph_rasterizer.cpp @@ -2,6 +2,15 @@ namespace mbgl { +class LocalGlyphRasterizer::Impl { +}; + +LocalGlyphRasterizer::LocalGlyphRasterizer(const optional) +{} + +LocalGlyphRasterizer::~LocalGlyphRasterizer() +{} + bool LocalGlyphRasterizer::canRasterizeGlyph(const FontStack&, GlyphID) { return false; } diff --git a/src/mbgl/renderer/renderer.cpp b/src/mbgl/renderer/renderer.cpp index 8953b419f7..6d086c70b1 100644 --- a/src/mbgl/renderer/renderer.cpp +++ b/src/mbgl/renderer/renderer.cpp @@ -10,9 +10,10 @@ Renderer::Renderer(RendererBackend& backend, FileSource& fileSource_, Scheduler& scheduler_, GLContextMode contextMode_, - const optional programCacheDir_) + const optional programCacheDir_, + const optional localFontFamily_) : impl(std::make_unique(backend, pixelRatio_, fileSource_, scheduler_, - contextMode_, std::move(programCacheDir_))) { + contextMode_, std::move(programCacheDir_), std::move(localFontFamily_))) { } Renderer::~Renderer() { diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 7339756e52..3a7afdb03d 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -42,7 +42,8 @@ Renderer::Impl::Impl(RendererBackend& backend_, FileSource& fileSource_, Scheduler& scheduler_, GLContextMode contextMode_, - const optional programCacheDir_) + const optional programCacheDir_, + const optional localFontFamily_) : backend(backend_) , scheduler(scheduler_) , fileSource(fileSource_) @@ -50,7 +51,7 @@ Renderer::Impl::Impl(RendererBackend& backend_, , contextMode(contextMode_) , pixelRatio(pixelRatio_) , programCacheDir(programCacheDir_) - , glyphManager(std::make_unique(fileSource)) + , glyphManager(std::make_unique(fileSource, std::make_unique(localFontFamily_))) , imageManager(std::make_unique()) , lineAtlas(std::make_unique(Size{ 256, 512 })) , imageImpls(makeMutable>>()) diff --git a/src/mbgl/renderer/renderer_impl.hpp b/src/mbgl/renderer/renderer_impl.hpp index db2a6e7a74..a199cec4d0 100644 --- a/src/mbgl/renderer/renderer_impl.hpp +++ b/src/mbgl/renderer/renderer_impl.hpp @@ -36,7 +36,7 @@ class Renderer::Impl : public GlyphManagerObserver, public RenderSourceObserver{ public: Impl(RendererBackend&, float pixelRatio_, FileSource&, Scheduler&, GLContextMode, - const optional programCacheDir); + const optional programCacheDir, const optional localFontFamily); ~Impl() final; void markContextLost() { diff --git a/src/mbgl/text/glyph_manager.hpp b/src/mbgl/text/glyph_manager.hpp index 13a8c07429..ccc8d7e16e 100644 --- a/src/mbgl/text/glyph_manager.hpp +++ b/src/mbgl/text/glyph_manager.hpp @@ -25,7 +25,7 @@ public: class GlyphManager : public util::noncopyable { public: - GlyphManager(FileSource&, std::unique_ptr = std::make_unique()); + GlyphManager(FileSource&, std::unique_ptr = std::make_unique(optional())); ~GlyphManager(); // Workers send a `getGlyphs` message to the main thread once they have determined diff --git a/src/mbgl/text/local_glyph_rasterizer.hpp b/src/mbgl/text/local_glyph_rasterizer.hpp index c2bdbd2840..82b16b534d 100644 --- a/src/mbgl/text/local_glyph_rasterizer.hpp +++ b/src/mbgl/text/local_glyph_rasterizer.hpp @@ -32,11 +32,15 @@ namespace mbgl { class LocalGlyphRasterizer { public: - virtual ~LocalGlyphRasterizer() = default; + virtual ~LocalGlyphRasterizer(); + LocalGlyphRasterizer(const optional fontFamily = optional()); // virtual so that test harness can override platform-specific behavior virtual bool canRasterizeGlyph(const FontStack&, GlyphID); virtual Glyph rasterizeGlyph(const FontStack&, GlyphID); +private: + class Impl; + std::unique_ptr impl; }; } // namespace mbgl diff --git a/src/mbgl/util/i18n.cpp b/src/mbgl/util/i18n.cpp index 3e3a68e248..1fc13bfb7d 100644 --- a/src/mbgl/util/i18n.cpp +++ b/src/mbgl/util/i18n.cpp @@ -392,6 +392,11 @@ bool allowsIdeographicBreaking(char16_t chr) { // || isInCJKCompatibilityIdeographsSupplement(chr)); } +bool allowsFixedWidthGlyphGeneration(char16_t chr) { + // Mirrors conservative set of characters used in glyph_manager.js/_tinySDF + return isInCJKUnifiedIdeographs(chr) || isInHangulSyllables(chr); +} + bool allowsVerticalWritingMode(const std::u16string& string) { for (char32_t chr : string) { if (hasUprightVerticalOrientation(chr)) { diff --git a/src/mbgl/util/i18n.hpp b/src/mbgl/util/i18n.hpp index 61c5a1ea96..b3960c743c 100644 --- a/src/mbgl/util/i18n.hpp +++ b/src/mbgl/util/i18n.hpp @@ -23,6 +23,10 @@ bool allowsIdeographicBreaking(const std::u16string& string); by the given Unicode codepoint due to ideographic breaking. */ bool allowsIdeographicBreaking(char16_t chr); +/** Conservative set of characters expected to have relatively fixed sizes and + advances */ +bool allowsFixedWidthGlyphGeneration(char16_t chr); + /** Returns whether any substring of the given string can be drawn as vertical text with upright glyphs. */ bool allowsVerticalWritingMode(const std::u16string& string); -- cgit v1.2.1