Commit 8ff4df04 authored by twanvl's avatar twanvl

stretch-overflow biw works with rotation and alignment.

parent a98bcb50
......@@ -61,7 +61,7 @@ TextStyle::TextStyle(const TextFieldP& field)
double TextStyle::getStretch() const {
if (content_width > 0 && ((alignment() & ALIGN_STRETCH) || (alignment() & ALIGN_STRETCH_OVERFLOW))) {
double factor = (width - padding_left - padding_right) / content_width;
double factor = (sideways(angle) ? height : width - padding_left - padding_right) / content_width;
if (alignment() == ALIGN_STRETCH || factor < 1.0) {
return factor;
}
......
......@@ -82,7 +82,12 @@ class TextStyle : public Style {
/// The rotation to use when drawing
inline Rotation getRotation() const {
return Rotation(angle, getRect(), 1.0, getStretch());
double stretch = getStretch();
if (sideways(angle)) {
return Rotation(angle, getRect(), stretch, 1/stretch);
} else {
return Rotation(angle, getRect(), 1.0, stretch);
}
}
/// The rotation to use when determining content layout, does not include the stretch factor
inline Rotation getRotationNoStretch() const {
......
......@@ -753,6 +753,9 @@ void TextViewer::alignParagraph(size_t start_line, size_t end_line, const vector
c += s.x + hdelta * i / count;
if (j < l.end_or_soft && chars[j++].break_after == BREAK_SPACE) i++;
}
} else if (style.alignment & ALIGN_STRETCH_OVERFLOW && width >= s.width) {
// stretching, don't center or align right
justifying = false;
} else {
// simple alignment
justifying = false;
......
......@@ -44,10 +44,10 @@ Alignment from_string(const String& s) {
if (s.find(_("justify-overflow")) !=String::npos) al = ALIGN_JUSTIFY_OVERFLOW | (al & ~ALIGN_JUSTIFY_OVERFLOW);
if (s.find(_("shrink-overflow")) !=String::npos) al = ALIGN_STRETCH_OVERFLOW | (al & ~ALIGN_STRETCH_OVERFLOW); // compatability
if (s.find(_("stretch-overflow")) !=String::npos) al = ALIGN_STRETCH_OVERFLOW | (al & ~ALIGN_STRETCH_OVERFLOW);
else if (s.find(_("stretch")) !=String::npos) al = ALIGN_STRETCH;
if (s.find(_("top")) !=String::npos) al = ALIGN_TOP | (al & ~ALIGN_VERTICAL);
if (s.find(_("middle")) !=String::npos) al = ALIGN_MIDDLE | (al & ~ALIGN_VERTICAL);
if (s.find(_("bottom")) !=String::npos) al = ALIGN_BOTTOM | (al & ~ALIGN_VERTICAL);
if (s.find(_("stretch")) !=String::npos) al = ALIGN_STRETCH;
return static_cast<Alignment>(al);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment