summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2015-03-12 17:02:39 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2015-03-13 10:55:49 -0700
commit762e4bdfbede24ed2acf5f3547d32a0317165495 (patch)
treec13ee62a4769b87884f5134da03a085afea9cd71 /src
parentbffee0715458530c6c86f440f757a4de667278a2 (diff)
downloadqtlocation-mapboxgl-762e4bdfbede24ed2acf5f3547d32a0317165495.tar.gz
Clean up GlyphAtlas
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/geometry/glyph_atlas.cpp48
-rw-r--r--src/mbgl/geometry/glyph_atlas.hpp32
2 files changed, 40 insertions, 40 deletions
diff --git a/src/mbgl/geometry/glyph_atlas.cpp b/src/mbgl/geometry/glyph_atlas.cpp
index 67e6303200..6fcb4ecf87 100644
--- a/src/mbgl/geometry/glyph_atlas.cpp
+++ b/src/mbgl/geometry/glyph_atlas.cpp
@@ -18,26 +18,43 @@ GlyphAtlas::GlyphAtlas(uint16_t width_, uint16_t height_)
dirty(true) {
}
-Rect<uint16_t> GlyphAtlas::addGlyph(uint64_t tile_id, const std::string& face_name,
- const SDFGlyph& glyph)
+void GlyphAtlas::addGlyphs(uint64_t tileID,
+ const std::u32string& text,
+ const std::string& stackName,
+ const FontStack& fontStack,
+ GlyphPositions& face)
{
std::lock_guard<std::mutex> lock(mtx);
- return addGlyph_impl(tile_id, face_name, glyph);
+
+ const std::map<uint32_t, SDFGlyph>& sdfs = fontStack.getSDFs();
+
+ for (uint32_t chr : text)
+ {
+ auto sdf_it = sdfs.find(chr);
+ if (sdf_it == sdfs.end()) {
+ continue;
+ }
+
+ const SDFGlyph& sdf = sdf_it->second;
+ Rect<uint16_t> rect = addGlyph(tileID, stackName, sdf);
+ face.emplace(chr, Glyph{rect, sdf.metrics});
+ }
}
-Rect<uint16_t> GlyphAtlas::addGlyph_impl(uint64_t tile_id, const std::string& face_name,
+Rect<uint16_t> GlyphAtlas::addGlyph(uint64_t tileID,
+ const std::string& stackName,
const SDFGlyph& glyph)
{
// Use constant value for now.
const uint8_t buffer = 3;
- std::map<uint32_t, GlyphValue>& face = index[face_name];
+ std::map<uint32_t, GlyphValue>& face = index[stackName];
std::map<uint32_t, GlyphValue>::iterator it = face.find(glyph.id);
// The glyph is already in this texture.
if (it != face.end()) {
GlyphValue& value = it->second;
- value.ids.insert(tile_id);
+ value.ids.insert(tileID);
return value.rect;
}
@@ -68,7 +85,7 @@ Rect<uint16_t> GlyphAtlas::addGlyph_impl(uint64_t tile_id, const std::string& fa
assert(rect.x + rect.w <= width);
assert(rect.y + rect.h <= height);
- face.emplace(glyph.id, GlyphValue { rect, tile_id });
+ face.emplace(glyph.id, GlyphValue { rect, tileID });
// Copy the bitmap
char *target = data.get();
@@ -86,23 +103,6 @@ Rect<uint16_t> GlyphAtlas::addGlyph_impl(uint64_t tile_id, const std::string& fa
return rect;
}
-void GlyphAtlas::addGlyphs(uint64_t tileid, std::u32string const& text, std::string const& stackname, FontStack const& fontStack, GlyphPositions & face)
-{
- std::lock_guard<std::mutex> lock(mtx);
-
- std::map<uint32_t, SDFGlyph> const& sdfs = fontStack.getSDFs();
- for (uint32_t chr : text)
- {
- auto sdf_it = sdfs.find(chr);
- if (sdf_it != sdfs.end())
- {
- SDFGlyph const& sdf = sdf_it->second;
- Rect<uint16_t> rect = addGlyph_impl(tileid, stackname, sdf);
- face.emplace(chr, Glyph{rect, sdf.metrics});
- }
- }
-}
-
void GlyphAtlas::removeGlyphs(uint64_t tile_id) {
std::lock_guard<std::mutex> lock(mtx);
diff --git a/src/mbgl/geometry/glyph_atlas.hpp b/src/mbgl/geometry/glyph_atlas.hpp
index 7b3c223fe5..19550ea4df 100644
--- a/src/mbgl/geometry/glyph_atlas.hpp
+++ b/src/mbgl/geometry/glyph_atlas.hpp
@@ -15,6 +15,19 @@ namespace mbgl {
class GlyphAtlas : public util::noncopyable {
public:
+ GlyphAtlas(uint16_t width, uint16_t height);
+
+ void addGlyphs(uint64_t tileID,
+ const std::u32string& text,
+ const std::string& stackName,
+ const FontStack&,
+ GlyphPositions&);
+ void removeGlyphs(uint64_t tile_id);
+
+ void bind();
+
+ const uint16_t width = 0;
+ const uint16_t height = 0;
private:
struct GlyphValue {
@@ -24,23 +37,10 @@ private:
std::set<uint64_t> ids;
};
- Rect<uint16_t> addGlyph_impl(uint64_t tile_id, const std::string& face_name,
- const SDFGlyph& glyph);
-public:
- GlyphAtlas(uint16_t width, uint16_t height);
-
- Rect<uint16_t> addGlyph(uint64_t tile_id, const std::string& face_name,
- const SDFGlyph& glyph);
- void addGlyphs(uint64_t tileid, std::u32string const& text, std::string const& stackname,
- FontStack const& fontStack, GlyphPositions & face);
- void removeGlyphs(uint64_t tile_id);
- void bind();
+ Rect<uint16_t> addGlyph(uint64_t tileID,
+ const std::string& stackName,
+ const SDFGlyph&);
-public:
- const uint16_t width = 0;
- const uint16_t height = 0;
-
-private:
std::mutex mtx;
BinPack<uint16_t> bin;
std::map<std::string, std::map<uint32_t, GlyphValue>> index;