Fix char spacing for scale_factor != 1.
This commit is contained in:
parent
51832de841
commit
0c4d123602
4 changed files with 8 additions and 7 deletions
|
@ -51,7 +51,7 @@ public:
|
||||||
typedef std::vector<glyph_info> glyph_vector;
|
typedef std::vector<glyph_info> glyph_vector;
|
||||||
typedef glyph_vector::const_iterator const_iterator;
|
typedef glyph_vector::const_iterator const_iterator;
|
||||||
glyph_vector const& get_glyphs() const { return glyphs_; }
|
glyph_vector const& get_glyphs() const { return glyphs_; }
|
||||||
void add_glyph(glyph_info const& glyph);
|
void add_glyph(glyph_info const& glyph, double scale_factor_);
|
||||||
|
|
||||||
void reserve(glyph_vector::size_type length);
|
void reserve(glyph_vector::size_type length);
|
||||||
const_iterator begin() const;
|
const_iterator begin() const;
|
||||||
|
|
|
@ -89,7 +89,7 @@ void text_layout::break_line(text_line_ptr line, double wrap_width, unsigned tex
|
||||||
unsigned last_break_position = 0;
|
unsigned last_break_position = 0;
|
||||||
for (unsigned i=line->get_first_char(); i<line->get_last_char(); i++)
|
for (unsigned i=line->get_first_char(); i<line->get_last_char(); i++)
|
||||||
{
|
{
|
||||||
//TODO: Char spacing
|
//TODO: character_spacing
|
||||||
std::map<unsigned, double>::const_iterator width_itr = width_map_.find(i);
|
std::map<unsigned, double>::const_iterator width_itr = width_map_.find(i);
|
||||||
if (width_itr != width_map_.end())
|
if (width_itr != width_map_.end())
|
||||||
{
|
{
|
||||||
|
@ -192,14 +192,15 @@ text_line::text_line(unsigned first_char, unsigned last_char)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void text_line::add_glyph(const glyph_info &glyph)
|
void text_line::add_glyph(const glyph_info &glyph, double scale_factor_)
|
||||||
{
|
{
|
||||||
line_height_ = std::max(line_height_, glyph.line_height + glyph.format->line_spacing);
|
line_height_ = std::max(line_height_, glyph.line_height + glyph.format->line_spacing);
|
||||||
if (glyphs_.empty())
|
if (glyphs_.empty())
|
||||||
{
|
{
|
||||||
width_ = glyph.width;
|
width_ = glyph.width;
|
||||||
} else {
|
} else if (glyph.width) {
|
||||||
width_ += glyph.width + glyphs_.back().format->character_spacing;
|
//Only add character spacing if the character is not a zero-width part of a cluster.
|
||||||
|
width_ += glyph.width + glyphs_.back().format->character_spacing * scale_factor_;
|
||||||
}
|
}
|
||||||
glyphs_.push_back(glyph);
|
glyphs_.push_back(glyph);
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ void text_layout::shape_text(text_line_ptr line)
|
||||||
|
|
||||||
width_map_[i] += tmp.width;
|
width_map_[i] += tmp.width;
|
||||||
|
|
||||||
line->add_glyph(tmp);
|
line->add_glyph(tmp, scale_factor_);
|
||||||
}
|
}
|
||||||
line->update_max_char_height(face->get_char_height());
|
line->update_max_char_height(face->get_char_height());
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ void text_layout::shape_text(text_line_ptr line)
|
||||||
|
|
||||||
width_map_[glyphs[i].cluster] += tmp.width;
|
width_map_[glyphs[i].cluster] += tmp.width;
|
||||||
|
|
||||||
line->add_glyph(tmp);
|
line->add_glyph(tmp, scale_factor_);
|
||||||
}
|
}
|
||||||
line->update_max_char_height(face->get_char_height());
|
line->update_max_char_height(face->get_char_height());
|
||||||
break; //When we reach this point the current font had all glyphs.
|
break; //When we reach this point the current font had all glyphs.
|
||||||
|
|
Loading…
Reference in a new issue