cairo renderer: comp_op/halo_comp_op support in text_symbolizer

This commit is contained in:
artemp 2014-06-20 09:55:10 +01:00
parent f518d44be0
commit b0980ac329
3 changed files with 12 additions and 9 deletions

View file

@ -325,6 +325,8 @@ public:
void add_text(glyph_positions_ptr pos,
cairo_face_manager & manager,
face_manager<freetype_engine> & font_manager,
composite_mode_e comp_op = src_over,
composite_mode_e halo_comp_op = src_over,
double scale_factor = 1.0);
template <typename T>

View file

@ -430,6 +430,8 @@ void cairo_context::glyph_path(unsigned long index, pixel_position const &pos)
void cairo_context::add_text(glyph_positions_ptr path,
cairo_face_manager & manager,
face_manager<freetype_engine> & font_manager,
composite_mode_e comp_op,
composite_mode_e halo_comp_op,
double scale_factor)
{
pixel_position const& base_point = path->get_base_point();
@ -439,7 +441,8 @@ void cairo_context::add_text(glyph_positions_ptr path,
//render halo
double halo_radius = 0;
char_properties_ptr format;
for (auto const &glyph_pos : *path)
set_operator(halo_comp_op);
for (auto const& glyph_pos : *path)
{
glyph_info const& glyph = *(glyph_pos.glyph);
@ -472,7 +475,7 @@ void cairo_context::add_text(glyph_positions_ptr path,
set_color(format->halo_fill, format->halo_opacity);
stroke();
}
set_operator(comp_op);
for (auto const &glyph_pos : *path)
{
glyph_info const& glyph = *(glyph_pos.glyph);

View file

@ -579,10 +579,9 @@ void cairo_renderer_base::process(shield_symbolizer const& sym,
cairo_save_restore guard(context_);
composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
composite_mode_e halo_comp_op = get<composite_mode_e>(sym, keys::halo_comp_op, feature, common_.vars_, src_over);
double opacity = get<double>(sym,keys::opacity,feature, common_.vars_, 1.0);
context_.set_operator(comp_op);
placements_list const &placements = helper.get();
for (glyph_positions_ptr glyphs : placements)
{
@ -593,8 +592,7 @@ void cairo_renderer_base::process(shield_symbolizer const& sym,
glyphs->marker()->transform,
opacity);
}
context_.add_text(glyphs, face_manager_, common_.font_manager_, common_.scale_factor_);
context_.add_text(glyphs, face_manager_, common_.font_manager_, comp_op, halo_comp_op, common_.scale_factor_);
}
}
@ -1008,12 +1006,12 @@ void cairo_renderer_base::process(text_symbolizer const& sym,
cairo_save_restore guard(context_);
composite_mode_e comp_op = get<composite_mode_e>(sym, keys::comp_op, feature, common_.vars_, src_over);
context_.set_operator(comp_op);
composite_mode_e halo_comp_op = get<composite_mode_e>(sym, keys::halo_comp_op, feature, common_.vars_, src_over);
placements_list const& placements = helper.get();
for (glyph_positions_ptr glyphs : placements)
{
context_.add_text(glyphs, face_manager_, common_.font_manager_, common_.scale_factor_);
context_.add_text(glyphs, face_manager_, common_.font_manager_, comp_op, halo_comp_op, common_.scale_factor_);
}
}
@ -1062,7 +1060,7 @@ struct thunk_renderer : public boost::static_visitor<>
glyphs->marker()->transform,
thunk.opacity_, thunk.comp_op_);
}
context_.add_text(glyphs, face_manager_, common_.font_manager_, common_.scale_factor_);
context_.add_text(glyphs, face_manager_, common_.font_manager_, src_over, src_over, common_.scale_factor_);
});
}