cairo renderer: comp_op/halo_comp_op support in text_symbolizer
This commit is contained in:
parent
f518d44be0
commit
b0980ac329
3 changed files with 12 additions and 9 deletions
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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_);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue