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) ...@@ -61,7 +61,7 @@ TextStyle::TextStyle(const TextFieldP& field)
double TextStyle::getStretch() const { double TextStyle::getStretch() const {
if (content_width > 0 && ((alignment() & ALIGN_STRETCH) || (alignment() & ALIGN_STRETCH_OVERFLOW))) { 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) { if (alignment() == ALIGN_STRETCH || factor < 1.0) {
return factor; return factor;
} }
......
...@@ -82,7 +82,12 @@ class TextStyle : public Style { ...@@ -82,7 +82,12 @@ class TextStyle : public Style {
/// The rotation to use when drawing /// The rotation to use when drawing
inline Rotation getRotation() const { 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 /// The rotation to use when determining content layout, does not include the stretch factor
inline Rotation getRotationNoStretch() const { inline Rotation getRotationNoStretch() const {
......
...@@ -753,6 +753,9 @@ void TextViewer::alignParagraph(size_t start_line, size_t end_line, const vector ...@@ -753,6 +753,9 @@ void TextViewer::alignParagraph(size_t start_line, size_t end_line, const vector
c += s.x + hdelta * i / count; c += s.x + hdelta * i / count;
if (j < l.end_or_soft && chars[j++].break_after == BREAK_SPACE) i++; 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 { } else {
// simple alignment // simple alignment
justifying = false; justifying = false;
......
...@@ -44,10 +44,10 @@ Alignment from_string(const String& s) { ...@@ -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(_("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(_("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); 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(_("top")) !=String::npos) al = ALIGN_TOP | (al & ~ALIGN_VERTICAL);
if (s.find(_("middle")) !=String::npos) al = ALIGN_MIDDLE | (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(_("bottom")) !=String::npos) al = ALIGN_BOTTOM | (al & ~ALIGN_VERTICAL);
if (s.find(_("stretch")) !=String::npos) al = ALIGN_STRETCH;
return static_cast<Alignment>(al); 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