Add shield symbolizer support in group symbolizer processing.
Update some test cases to use ShieldSymbolizer instead of point and text.
This commit is contained in:
parent
07dc6e37a2
commit
08ea56996a
7 changed files with 63 additions and 20 deletions
|
@ -86,11 +86,12 @@ struct text_render_thunk
|
|||
// ensure the lifetime is the same.
|
||||
placements_list placements_;
|
||||
std::shared_ptr<std::vector<glyph_info> > glyphs_;
|
||||
double opacity_;
|
||||
composite_mode_e comp_op_;
|
||||
halo_rasterizer_enum halo_rasterizer_;
|
||||
|
||||
text_render_thunk(placements_list const &placements,
|
||||
composite_mode_e comp_op,
|
||||
double opacity, composite_mode_e comp_op,
|
||||
halo_rasterizer_enum halo_rasterizer);
|
||||
};
|
||||
|
||||
|
@ -123,13 +124,17 @@ struct render_thunk_extractor : public boost::static_visitor<>
|
|||
|
||||
void operator()(text_symbolizer const &sym) const;
|
||||
|
||||
void operator()(shield_symbolizer const &sym) const;
|
||||
|
||||
template <typename T>
|
||||
void operator()(T const &) const
|
||||
{
|
||||
// TODO: warning if unimplemented?
|
||||
}
|
||||
|
||||
protected:
|
||||
private:
|
||||
void extract_text_thunk(text_symbolizer_helper &helper, text_symbolizer const &sym) const;
|
||||
|
||||
box2d<double> &box_;
|
||||
render_thunk_list &thunks_;
|
||||
mapnik::feature_impl &feature_;
|
||||
|
|
|
@ -74,7 +74,15 @@ struct thunk_renderer : public boost::static_visitor<>
|
|||
render_offset_placements(
|
||||
thunk.placements_,
|
||||
offset_,
|
||||
[&] (glyph_positions_ptr glyphs) {
|
||||
[&] (glyph_positions_ptr glyphs)
|
||||
{
|
||||
if (glyphs->marker())
|
||||
{
|
||||
ren_.render_marker(glyphs->marker_pos(),
|
||||
*(glyphs->marker()->marker),
|
||||
glyphs->marker()->transform,
|
||||
thunk.opacity_, thunk.comp_op_);
|
||||
}
|
||||
ren.render(*glyphs);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1048,7 +1048,15 @@ struct thunk_renderer : public boost::static_visitor<>
|
|||
render_offset_placements(
|
||||
thunk.placements_,
|
||||
offset_,
|
||||
[&] (glyph_positions_ptr glyphs) {
|
||||
[&] (glyph_positions_ptr glyphs)
|
||||
{
|
||||
if (glyphs->marker())
|
||||
{
|
||||
ren_.render_marker(glyphs->marker_pos(),
|
||||
*(glyphs->marker()->marker),
|
||||
glyphs->marker()->transform,
|
||||
thunk.opacity_, thunk.comp_op_);
|
||||
}
|
||||
context_.add_text(glyphs, face_manager_, common_.font_manager_, common_.scale_factor_);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -83,7 +83,16 @@ struct thunk_renderer : public boost::static_visitor<>
|
|||
render_offset_placements(
|
||||
thunk.placements_,
|
||||
offset_,
|
||||
[&] (glyph_positions_ptr glyphs) {
|
||||
[&] (glyph_positions_ptr glyphs)
|
||||
{
|
||||
if (glyphs->marker())
|
||||
{
|
||||
ren_.render_marker(feature_, pixmap_.get_resolution(),
|
||||
glyphs->marker_pos(),
|
||||
*(glyphs->marker()->marker),
|
||||
glyphs->marker()->transform,
|
||||
thunk.opacity_, thunk.comp_op_);
|
||||
}
|
||||
ren.render(*glyphs, feature_id);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -33,10 +33,10 @@ point_render_thunk::point_render_thunk(pixel_position const &pos, marker const &
|
|||
|
||||
|
||||
text_render_thunk::text_render_thunk(placements_list const &placements,
|
||||
composite_mode_e comp_op,
|
||||
double opacity, composite_mode_e comp_op,
|
||||
halo_rasterizer_enum halo_rasterizer)
|
||||
: placements_(), glyphs_(std::make_shared<std::vector<glyph_info> >()),
|
||||
comp_op_(comp_op), halo_rasterizer_(halo_rasterizer)
|
||||
opacity_(opacity), comp_op_(comp_op), halo_rasterizer_(halo_rasterizer)
|
||||
{
|
||||
std::vector<glyph_info> &glyph_vec = *glyphs_;
|
||||
|
||||
|
@ -105,11 +105,30 @@ void render_thunk_extractor::operator()(text_symbolizer const &sym) const
|
|||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
clip_box);
|
||||
|
||||
extract_text_thunk(helper, sym);
|
||||
}
|
||||
|
||||
void render_thunk_extractor::operator()(shield_symbolizer const &sym) const
|
||||
{
|
||||
box2d<double> clip_box = clipping_extent_;
|
||||
text_symbolizer_helper helper(
|
||||
sym, feature_, prj_trans_,
|
||||
common_.width_, common_.height_,
|
||||
common_.scale_factor_,
|
||||
common_.t_, common_.font_manager_, *common_.detector_,
|
||||
clip_box);
|
||||
|
||||
extract_text_thunk(helper, sym);
|
||||
}
|
||||
|
||||
void render_thunk_extractor::extract_text_thunk(text_symbolizer_helper &helper, text_symbolizer const &sym) const
|
||||
{
|
||||
double opacity = get<double>(sym, keys::opacity, feature_, 1.0);
|
||||
composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature_, src_over);
|
||||
halo_rasterizer_enum halo_rasterizer = get<halo_rasterizer_enum>(sym, keys::halo_rasterizer, HALO_RASTERIZER_FULL);
|
||||
|
||||
placements_list const& placements = helper.get();
|
||||
text_render_thunk thunk(placements, comp_op, halo_rasterizer);
|
||||
text_render_thunk thunk(placements, opacity, comp_op, halo_rasterizer);
|
||||
thunks_.push_back(std::make_shared<render_thunk>(thunk));
|
||||
|
||||
update_box();
|
||||
|
|
|
@ -20,9 +20,8 @@ wkt,name1,ref1,name2,ref2
|
|||
<GroupSymbolizer start-column="1" num-columns="2" placement="line" avoid-edges="false" minimum-distance="50" spacing="100" repeat-key="[name%]+'-'+[ref%]">
|
||||
<PairLayout item-margin="1"/>
|
||||
<GroupRule>
|
||||
<PointSymbolizer file="../../data/svg/rect.svg"/>
|
||||
<ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="16" placement="point" dy="0" fill="#ffffff">[ref%]</ShieldSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="10">[name%]</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="0" fill="#ffffff">[ref%]</TextSymbolizer>
|
||||
</GroupRule>
|
||||
</GroupSymbolizer>
|
||||
</Rule>
|
||||
|
@ -45,9 +44,8 @@ wkt,name1,ref1,name2,ref2
|
|||
<GroupSymbolizer start-column="1" num-columns="2" placement="line" avoid-edges="false" minimum-distance="40" spacing="80" repeat-key="[name%]+'-'+[ref%]">
|
||||
<PairLayout item-margin="1"/>
|
||||
<GroupRule>
|
||||
<PointSymbolizer file="../../data/svg/rect.svg"/>
|
||||
<ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="16" placement="point" dy="0" fill="#ffffff">[ref%]</ShieldSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="10">[name%]</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="0" fill="#ffffff">[ref%]</TextSymbolizer>
|
||||
</GroupRule>
|
||||
</GroupSymbolizer>
|
||||
</Rule>
|
||||
|
@ -70,9 +68,8 @@ wkt,name1,ref1,name2,ref2
|
|||
<GroupSymbolizer start-column="1" num-columns="2" placement="line" avoid-edges="false" minimum-distance="30" spacing="60" repeat-key="[name%]+'-'+[ref%]">
|
||||
<PairLayout item-margin="1"/>
|
||||
<GroupRule>
|
||||
<PointSymbolizer file="../../data/svg/rect.svg"/>
|
||||
<ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="16" placement="point" dy="0" fill="#ffffff">[ref%]</ShieldSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="10">[name%]</TextSymbolizer>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="16" placement="point" dy="0" fill="#ffffff">[ref%]</TextSymbolizer>
|
||||
</GroupRule>
|
||||
</GroupSymbolizer>
|
||||
<DebugSymbolizer/>
|
||||
|
|
|
@ -25,8 +25,7 @@ wkt,key1,key2
|
|||
<GroupSymbolizer start-column="1" num-columns="1" placement="point" avoid-edges="false" minimum-distance="1" spacing="1" repeat-key="[key%]">
|
||||
<PairLayout item-margin="1"/>
|
||||
<GroupRule>
|
||||
<PointSymbolizer file="../../data/svg/rect.svg"/>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" dy="0" fill="#ff0000">[key%]</TextSymbolizer>
|
||||
<ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="10" placement="point" dy="0" fill="#ff0000">[key%]</ShieldSymbolizer>
|
||||
</GroupRule>
|
||||
</GroupSymbolizer>
|
||||
</Rule>
|
||||
|
@ -51,8 +50,7 @@ wkt,name1,ref1,name2,ref2
|
|||
<GroupSymbolizer start-column="1" num-columns="1" placement="line" avoid-edges="false" minimum-distance="20" spacing="1" repeat-key="bar">
|
||||
<PairLayout item-margin="1"/>
|
||||
<GroupRule>
|
||||
<PointSymbolizer file="../../data/svg/rect.svg"/>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" dy="0" fill="#ffffff">bar</TextSymbolizer>
|
||||
<ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="10" placement="point" dy="0" fill="#ffffff">bar</ShieldSymbolizer>
|
||||
</GroupRule>
|
||||
</GroupSymbolizer>
|
||||
</Rule>
|
||||
|
@ -77,8 +75,7 @@ wkt,name1,ref1,name2,ref2
|
|||
<GroupSymbolizer start-column="1" num-columns="1" placement="line" avoid-edges="false" minimum-distance="20" spacing="1" repeat-key="foo">
|
||||
<PairLayout item-margin="1"/>
|
||||
<GroupRule>
|
||||
<PointSymbolizer file="../../data/svg/rect.svg"/>
|
||||
<TextSymbolizer face-name="DejaVu Sans Book" size="10" placement="point" dy="0" fill="#000000">foo</TextSymbolizer>
|
||||
<ShieldSymbolizer file="../../data/svg/rect.svg" face-name="DejaVu Sans Book" size="10" placement="point" dy="0" fill="#000000">foo</ShieldSymbolizer>
|
||||
</GroupRule>
|
||||
</GroupSymbolizer>
|
||||
</Rule>
|
||||
|
|
Loading…
Add table
Reference in a new issue