summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Loer <chris.loer@gmail.com>2017-11-27 12:50:28 -0800
committerChris Loer <chris.loer@mapbox.com>2017-12-18 12:17:22 -0800
commitf1f2ebb019980d4c53d563d3495e016d50e23945 (patch)
tree62dd4a29a1e2c4680d59713cc2f6d101a1dab22b
parenta53818a10b821218b86478e048a3884db93f7c00 (diff)
downloadqtlocation-mapboxgl-f1f2ebb019980d4c53d563d3495e016d50e23945.tar.gz
[core] Hook LocalGlyphRasterizer "font family" configuration up to Renderer
-rw-r--r--include/mbgl/renderer/renderer.hpp3
-rw-r--r--platform/default/local_glyph_rasterizer.cpp9
-rw-r--r--src/mbgl/renderer/renderer.cpp5
-rw-r--r--src/mbgl/renderer/renderer_impl.cpp5
-rw-r--r--src/mbgl/renderer/renderer_impl.hpp2
-rw-r--r--src/mbgl/text/glyph_manager.hpp2
-rw-r--r--src/mbgl/text/local_glyph_rasterizer.hpp6
-rw-r--r--src/mbgl/util/i18n.cpp5
-rw-r--r--src/mbgl/util/i18n.hpp4
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<std::string> programCacheDir = {});
+ const optional<std::string> programCacheDir = {},
+ const optional<std::string> 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<std::string>)
+{}
+
+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<std::string> programCacheDir_)
+ const optional<std::string> programCacheDir_,
+ const optional<std::string> localFontFamily_)
: impl(std::make_unique<Impl>(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<std::string> programCacheDir_)
+ const optional<std::string> programCacheDir_,
+ const optional<std::string> 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<GlyphManager>(fileSource))
+ , glyphManager(std::make_unique<GlyphManager>(fileSource, std::make_unique<LocalGlyphRasterizer>(localFontFamily_)))
, imageManager(std::make_unique<ImageManager>())
, lineAtlas(std::make_unique<LineAtlas>(Size{ 256, 512 }))
, imageImpls(makeMutable<std::vector<Immutable<style::Image::Impl>>>())
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<std::string> programCacheDir);
+ const optional<std::string> programCacheDir, const optional<std::string> 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<LocalGlyphRasterizer> = std::make_unique<LocalGlyphRasterizer>());
+ GlyphManager(FileSource&, std::unique_ptr<LocalGlyphRasterizer> = std::make_unique<LocalGlyphRasterizer>(optional<std::string>()));
~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<std::string> fontFamily = optional<std::string>());
// 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> 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);