Fix text rendering for scale_factor!=1.

This commit is contained in:
Hermann Kraus 2013-03-24 01:26:42 +01:00
parent 3be7b55459
commit de837ba45d
5 changed files with 9 additions and 7 deletions

View file

@ -87,7 +87,7 @@ class text_layout
public:
typedef std::vector<text_line_ptr> line_vector;
typedef line_vector::const_iterator const_iterator;
text_layout(face_manager_freetype & font_manager);
text_layout(face_manager_freetype & font_manager, double scale_factor);
void add_text(UnicodeString const& str, char_properties_ptr format);
UnicodeString const& get_text() const;
@ -111,6 +111,7 @@ private:
//input
face_manager_freetype &font_manager_;
double scale_factor_;
//processing
text_itemizer itemizer_;

View file

@ -31,8 +31,9 @@
namespace mapnik
{
text_layout::text_layout(face_manager_freetype &font_manager)
: font_manager_(font_manager), itemizer_(), width_(0), height_(0), glyphs_count_(0),
text_layout::text_layout(face_manager_freetype &font_manager, double scale_factor)
: font_manager_(font_manager), scale_factor_(scale_factor),
itemizer_(), width_(0), height_(0), glyphs_count_(0),
lines_()
{
}

View file

@ -39,7 +39,7 @@ void text_layout::shape_text(text_line_ptr line)
for (; itr != list_end; itr++)
{
face_set_ptr face_set = font_manager_.get_face_set(itr->format->face_name, itr->format->fontset);
face_set->set_character_sizes(itr->format->text_size);
face_set->set_character_sizes(itr->format->text_size * scale_factor_);
if (face_set->begin() == face_set->end()) return; //Invalid face set
face_ptr face = *(face_set->begin());
FT_Face freetype_face = face->get_face();

View file

@ -29,7 +29,7 @@ void text_layout::shape_text(text_line_ptr line)
for (; itr != list_end; itr++)
{
face_set_ptr face_set = font_manager_.get_face_set(itr->format->face_name, itr->format->fontset);
face_set->set_character_sizes(itr->format->text_size);
face_set->set_character_sizes(itr->format->text_size * scale_factor_);
font_face_set::iterator face_itr = face_set->begin(), face_end = face_set->end();
for (; face_itr != face_end; face_itr++)
{

View file

@ -93,7 +93,7 @@ private:
};
placement_finder::placement_finder(Feature const& feature, DetectorType &detector, box2d<double> const& extent, text_placement_info_ptr placement_info, face_manager_freetype &font_manager, double scale_factor)
: feature_(feature), detector_(detector), extent_(extent), layout_(font_manager), info_(placement_info), valid_(true), scale_factor_(scale_factor), placements_(), has_marker_(false), marker_(), marker_box_()
: feature_(feature), detector_(detector), extent_(extent), layout_(font_manager, scale_factor), info_(placement_info), valid_(true), scale_factor_(scale_factor), placements_(), has_marker_(false), marker_(), marker_box_()
{
}
@ -268,7 +268,7 @@ bool placement_finder::find_point_placement(pixel_position pos)
if (glyph_itr->width)
{
//Only advance if glyph is not part of a multiple glyph sequence
x += glyph_itr->width + glyph_itr->format->character_spacing;
x += glyph_itr->width + glyph_itr->format->character_spacing * scale_factor_;
}
}
}