Fix text rendering for scale_factor!=1.
This commit is contained in:
parent
3be7b55459
commit
de837ba45d
5 changed files with 9 additions and 7 deletions
|
@ -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_;
|
||||
|
|
|
@ -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_()
|
||||
{
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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_;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue