mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 13:06:59 -04:00
Margin top in <margin> tag
This commit is contained in:
+21
-12
@@ -27,6 +27,10 @@ Color param_colors[] =
|
||||
};
|
||||
const size_t param_colors_count = sizeof(param_colors) / sizeof(param_colors[0]);
|
||||
|
||||
struct Margins {
|
||||
double left, right, top;
|
||||
};
|
||||
|
||||
// Helper class for TextElements::fromString, to allow persistent formating state accross recusive calls
|
||||
struct TextElementsFromString {
|
||||
// What formatting is enabled?
|
||||
@@ -37,7 +41,7 @@ struct TextElementsFromString {
|
||||
vector<Color> colors;
|
||||
vector<double> sizes;
|
||||
vector<String> fonts;
|
||||
vector<pair<double,double>> margins;
|
||||
vector<Margins> margins;
|
||||
vector<Alignment> aligns;
|
||||
|
||||
const TextStyle& style;
|
||||
@@ -168,17 +172,21 @@ private:
|
||||
} else if (is_substr(text, tag_start, _("<margin"))) {
|
||||
size_t colon = text.find_first_of(_(">:"), tag_start);
|
||||
if (colon < pos - 1 && text.GetChar(colon) == _(':')) {
|
||||
size_t colon2 = text.find_first_of(_(">:"), colon+1);
|
||||
double margin_left = 0., margin_right = 0.;
|
||||
text.substr(colon + 1, colon2 - colon - 2).ToDouble(&margin_left);
|
||||
text.substr(colon2 + 1, pos - colon2 - 2).ToDouble(&margin_right);
|
||||
size_t colon2 = text.find_first_of(_(">:"), colon + 1);
|
||||
size_t colon3 = colon2 < pos-1 ? text.find_first_of(_(">:"), colon2 + 1) : colon2;
|
||||
Margins m = {0.,0.,0.};
|
||||
text.substr(colon + 1, colon2 - colon - 2).ToDouble(&m.left);
|
||||
text.substr(colon2 + 1, colon3 - colon2 - 2).ToDouble(&m.right);
|
||||
text.substr(colon3 + 1, pos - colon3 - 2).ToDouble(&m.top);
|
||||
if (!margins.empty()) {
|
||||
margin_left += margins.back().first;
|
||||
margin_right += margins.back().second;
|
||||
m.left += margins.back().left;
|
||||
m.right += margins.back().right;
|
||||
m.top += margins.back().top;
|
||||
}
|
||||
margins.emplace_back(margin_left, margin_right);
|
||||
paragraphs.back().margin_left = margin_left;
|
||||
paragraphs.back().margin_right = margin_right;
|
||||
margins.emplace_back(m);
|
||||
paragraphs.back().margin_left = m.left;
|
||||
paragraphs.back().margin_right = m.right;
|
||||
paragraphs.back().margin_top = m.top;
|
||||
}
|
||||
} else if (is_substr(text, tag_start, _("</margin"))) {
|
||||
if (!margins.empty()) margins.pop_back();
|
||||
@@ -267,8 +275,9 @@ private:
|
||||
paragraphs.back().start = i + 1;
|
||||
paragraphs.back().margin_end_char = i + 1;
|
||||
if (!margins.empty()) {
|
||||
paragraphs.back().margin_left = margins.back().first;
|
||||
paragraphs.back().margin_right = margins.back().second;
|
||||
paragraphs.back().margin_left = margins.back().left;
|
||||
paragraphs.back().margin_right = margins.back().right;
|
||||
paragraphs.back().margin_top = margins.back().top;
|
||||
}
|
||||
if (!aligns.empty()) {
|
||||
paragraphs.back().alignment = aligns.back();
|
||||
|
||||
@@ -149,7 +149,7 @@ class TextParagraph {
|
||||
public:
|
||||
optional<Alignment> alignment;
|
||||
double margin_left = 0., margin_right = 0.;
|
||||
//double margin_top = 0., margin_bottom = 0.; // TODO: more margin options?
|
||||
double margin_top = 0.; //, margin_bottom = 0.; // TODO: more margin options?
|
||||
size_t start = String::npos, end = String::npos;
|
||||
size_t margin_end_char = 0; // end position of characters that are added to the margin (i.e. bullet points)
|
||||
};
|
||||
|
||||
@@ -691,6 +691,7 @@ bool TextViewer::prepareLinesAtScale(RotatedDC& dc, const vector<CharInfo>& char
|
||||
assert(elements.paragraphs[i_para].start == i + 1);
|
||||
line.margin_left = elements.paragraphs[i_para].margin_left;
|
||||
line.margin_right = elements.paragraphs[i_para].margin_right;
|
||||
line.top += elements.paragraphs[i_para].margin_top;
|
||||
line.alignment = elements.paragraphs[i_para].alignment;
|
||||
}
|
||||
line.break_after = LineBreak::NO;
|
||||
|
||||
Reference in New Issue
Block a user