forked from mia/Aegisub
Drop support for ASS2
It is very unlikely that anyone has ever actually used ASS2 for anything, and in practice it was not usable anyway as the bottom margin was always either ignored or blindly overwritten.
This commit is contained in:
parent
983d0b19eb
commit
a1fad1f947
11 changed files with 38 additions and 107 deletions
|
@ -70,13 +70,10 @@ AssDialogue::AssDialogue(AssDialogue const& that)
|
||||||
, Effect(that.Effect)
|
, Effect(that.Effect)
|
||||||
, Text(that.Text)
|
, Text(that.Text)
|
||||||
{
|
{
|
||||||
for (int i=0;i<4;i++) Margin[i] = that.Margin[i];
|
memmove(Margin, that.Margin, sizeof Margin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @brief DOCME
|
AssDialogue::AssDialogue(wxString const& data)
|
||||||
/// @param _data
|
|
||||||
/// @param version
|
|
||||||
AssDialogue::AssDialogue(wxString _data,int version)
|
|
||||||
: AssEntry(wxString(), "[Events]")
|
: AssEntry(wxString(), "[Events]")
|
||||||
, Comment(false)
|
, Comment(false)
|
||||||
, Layer(0)
|
, Layer(0)
|
||||||
|
@ -84,18 +81,7 @@ AssDialogue::AssDialogue(wxString _data,int version)
|
||||||
, End(5000)
|
, End(5000)
|
||||||
, Style("Default")
|
, Style("Default")
|
||||||
{
|
{
|
||||||
bool valid = false;
|
if (!Parse(data))
|
||||||
// Try parsing in different ways
|
|
||||||
int count = 0;
|
|
||||||
while (!valid && count < 3) {
|
|
||||||
valid = Parse(_data,version);
|
|
||||||
count++;
|
|
||||||
version++;
|
|
||||||
if (version > 2) version = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Not valid
|
|
||||||
if (!valid)
|
|
||||||
throw "Failed parsing line.";
|
throw "Failed parsing line.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +93,7 @@ void AssDialogue::ClearBlocks() {
|
||||||
delete_clear(Blocks);
|
delete_clear(Blocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AssDialogue::Parse(wxString rawData, int version) {
|
bool AssDialogue::Parse(wxString const& rawData) {
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
wxString temp;
|
wxString temp;
|
||||||
|
|
||||||
|
@ -127,11 +113,11 @@ bool AssDialogue::Parse(wxString rawData, int version) {
|
||||||
|
|
||||||
// Get first token and see if it has "Marked=" in it
|
// Get first token and see if it has "Marked=" in it
|
||||||
temp = tkn.GetNextToken().Trim(false).Trim(true);
|
temp = tkn.GetNextToken().Trim(false).Trim(true);
|
||||||
if (temp.Lower().StartsWith("marked=")) version = 0;
|
bool ssa = temp.Lower().StartsWith("marked=");
|
||||||
else if (version == 0) version = 1;
|
|
||||||
|
|
||||||
// Get layer number
|
// Get layer number
|
||||||
if (version == 0) Layer = 0;
|
if (ssa)
|
||||||
|
Layer = 0;
|
||||||
else {
|
else {
|
||||||
long templ;
|
long templ;
|
||||||
temp.ToLong(&templ);
|
temp.ToLong(&templ);
|
||||||
|
@ -158,43 +144,19 @@ bool AssDialogue::Parse(wxString rawData, int version) {
|
||||||
Actor.Trim(true);
|
Actor.Trim(true);
|
||||||
Actor.Trim(false);
|
Actor.Trim(false);
|
||||||
|
|
||||||
// Get left margin
|
// Get margins
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
if (!tkn.HasMoreTokens()) return false;
|
if (!tkn.HasMoreTokens()) return false;
|
||||||
SetMarginString(tkn.GetNextToken().Trim(false).Trim(true),0);
|
SetMarginString(tkn.GetNextToken().Trim(false).Trim(true), i);
|
||||||
|
|
||||||
// Get right margin
|
|
||||||
if (!tkn.HasMoreTokens()) return false;
|
|
||||||
SetMarginString(tkn.GetNextToken().Trim(false).Trim(true),1);
|
|
||||||
|
|
||||||
// Get top margin
|
|
||||||
if (!tkn.HasMoreTokens()) return false;
|
|
||||||
temp = tkn.GetNextToken().Trim(false).Trim(true);
|
|
||||||
SetMarginString(temp,2);
|
|
||||||
if (version == 1) SetMarginString(temp,3);
|
|
||||||
|
|
||||||
// Get bottom margin
|
|
||||||
bool rollBack = false;
|
|
||||||
if (version == 2) {
|
|
||||||
if (!tkn.HasMoreTokens()) return false;
|
|
||||||
wxString oldTemp = temp;
|
|
||||||
temp = tkn.GetNextToken().Trim(false).Trim(true);
|
|
||||||
if (!temp.IsNumber()) {
|
|
||||||
version = 1;
|
|
||||||
rollBack = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get effect
|
|
||||||
if (!rollBack) {
|
|
||||||
if (!tkn.HasMoreTokens()) return false;
|
if (!tkn.HasMoreTokens()) return false;
|
||||||
temp = tkn.GetNextToken();
|
Effect = tkn.GetNextToken();
|
||||||
}
|
|
||||||
Effect = temp;
|
|
||||||
Effect.Trim(true);
|
Effect.Trim(true);
|
||||||
Effect.Trim(false);
|
Effect.Trim(false);
|
||||||
|
|
||||||
// Get text
|
// Get text
|
||||||
Text = rawData.Mid(pos+tkn.GetPosition());
|
Text = rawData.Mid(pos + tkn.GetPosition());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -357,7 +319,7 @@ void AssDialogue::UpdateText () {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssDialogue::SetMarginString(wxString const& origvalue, int which) {
|
void AssDialogue::SetMarginString(wxString const& origvalue, int which) {
|
||||||
if (which < 0 || which >= 4) throw Aegisub::InvalidMarginIdError();
|
if (which < 0 || which > 2) throw Aegisub::InvalidMarginIdError();
|
||||||
|
|
||||||
// Make it numeric
|
// Make it numeric
|
||||||
wxString strvalue = origvalue;
|
wxString strvalue = origvalue;
|
||||||
|
@ -376,8 +338,8 @@ void AssDialogue::SetMarginString(wxString const& origvalue, int which) {
|
||||||
Margin[which] = mid<int>(0, value, 9999);
|
Margin[which] = mid<int>(0, value, 9999);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString AssDialogue::GetMarginString(int which,bool pad) const {
|
wxString AssDialogue::GetMarginString(int which, bool pad) const {
|
||||||
if (which < 0 || which >= 4) throw Aegisub::InvalidMarginIdError();
|
if (which < 0 || which > 2) throw Aegisub::InvalidMarginIdError();
|
||||||
return wxString::Format(pad ? "%04d" : "%d", Margin[which]);
|
return wxString::Format(pad ? "%04d" : "%d", Margin[which]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,8 +128,8 @@ public:
|
||||||
bool Comment;
|
bool Comment;
|
||||||
/// Layer number
|
/// Layer number
|
||||||
int Layer;
|
int Layer;
|
||||||
/// Margins: 0 = Left, 1 = Right, 2 = Top (Vertical), 3 = Bottom
|
/// Margins: 0 = Left, 1 = Right, 2 = Top (Vertical)
|
||||||
int Margin[4];
|
int Margin[3];
|
||||||
/// Starting time
|
/// Starting time
|
||||||
AssTime Start;
|
AssTime Start;
|
||||||
/// Ending time
|
/// Ending time
|
||||||
|
@ -147,9 +147,8 @@ public:
|
||||||
|
|
||||||
/// @brief Parse raw ASS data into everything else
|
/// @brief Parse raw ASS data into everything else
|
||||||
/// @param data ASS line
|
/// @param data ASS line
|
||||||
/// @param version ASS version to try first (4, 4+, ASS2)
|
|
||||||
/// @return Did it successfully parse?
|
/// @return Did it successfully parse?
|
||||||
bool Parse(wxString data,int version=1);
|
bool Parse(wxString const& data);
|
||||||
|
|
||||||
/// Parse text as ASS to generate block information
|
/// Parse text as ASS to generate block information
|
||||||
void ParseASSTags();
|
void ParseASSTags();
|
||||||
|
@ -181,12 +180,12 @@ public:
|
||||||
void SetMarginString(wxString const& value) { SetMarginString(value, which);}
|
void SetMarginString(wxString const& value) { SetMarginString(value, which);}
|
||||||
/// @brief Set a margin
|
/// @brief Set a margin
|
||||||
/// @param value New value of the margin
|
/// @param value New value of the margin
|
||||||
/// @param which 0 = left, 1 = right, 2 = vertical/top, 3 = bottom
|
/// @param which 0 = left, 1 = right, 2 = vertical
|
||||||
void SetMarginString(wxString const& value, int which);
|
void SetMarginString(wxString const& value, int which);
|
||||||
/// @brief Get a margin
|
/// @brief Get a margin
|
||||||
/// @param which 0 = left, 1 = right, 2 = vertical/top, 3 = bottom
|
/// @param which 0 = left, 1 = right, 2 = vertical
|
||||||
/// @param pad Pad the number to four digits
|
/// @param pad Pad the number to four digits
|
||||||
wxString GetMarginString(int which,bool pad=true) const;
|
wxString GetMarginString(int which, bool pad=true) const;
|
||||||
/// Get the line as SSA rather than ASS
|
/// Get the line as SSA rather than ASS
|
||||||
wxString GetSSAText() const;
|
wxString GetSSAText() const;
|
||||||
/// Does this line collide with the passed line?
|
/// Does this line collide with the passed line?
|
||||||
|
@ -196,6 +195,6 @@ public:
|
||||||
|
|
||||||
AssDialogue();
|
AssDialogue();
|
||||||
AssDialogue(AssDialogue const&);
|
AssDialogue(AssDialogue const&);
|
||||||
AssDialogue(wxString data,int version=1);
|
AssDialogue(wxString const& data);
|
||||||
~AssDialogue();
|
~AssDialogue();
|
||||||
};
|
};
|
||||||
|
|
|
@ -280,10 +280,6 @@ void AssFile::AddLine(wxString data, int *version, AssAttachment **attach) {
|
||||||
data = "[V4+ Styles]";
|
data = "[V4+ Styles]";
|
||||||
*version = 1;
|
*version = 1;
|
||||||
}
|
}
|
||||||
else if (low == "[v4++ styles]") {
|
|
||||||
data = "[V4+ Styles]";
|
|
||||||
*version = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
Line.push_back(new AssEntry(data, data));
|
Line.push_back(new AssEntry(data, data));
|
||||||
return;
|
return;
|
||||||
|
@ -305,7 +301,7 @@ void AssFile::AddLine(wxString data, int *version, AssAttachment **attach) {
|
||||||
// Dialogue
|
// Dialogue
|
||||||
else if (lowGroup == "[events]") {
|
else if (lowGroup == "[events]") {
|
||||||
if (data.StartsWith("Dialogue:") || data.StartsWith("Comment:"))
|
if (data.StartsWith("Dialogue:") || data.StartsWith("Comment:"))
|
||||||
Line.push_back(new AssDialogue(data, *version));
|
Line.push_back(new AssDialogue(data));
|
||||||
else if (data.StartsWith("Format:"))
|
else if (data.StartsWith("Format:"))
|
||||||
Line.push_back(new AssEntry("Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text", group));
|
Line.push_back(new AssEntry("Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text", group));
|
||||||
}
|
}
|
||||||
|
@ -332,14 +328,10 @@ void AssFile::AddLine(wxString data, int *version, AssAttachment **attach) {
|
||||||
trueVersion = 0;
|
trueVersion = 0;
|
||||||
else if (versionString == "v4.00+")
|
else if (versionString == "v4.00+")
|
||||||
trueVersion = 1;
|
trueVersion = 1;
|
||||||
else if (versionString == "v4.00++")
|
else
|
||||||
trueVersion = 2;
|
throw "Unknown SSA file format version";
|
||||||
else throw
|
|
||||||
"Unknown SSA file format version";
|
|
||||||
if (trueVersion != *version) {
|
if (trueVersion != *version) {
|
||||||
if (!(trueVersion == 2 && *version == 1)) {
|
|
||||||
wxLogMessage("Warning: File has the wrong extension.");
|
wxLogMessage("Warning: File has the wrong extension.");
|
||||||
}
|
|
||||||
*version = trueVersion;
|
*version = trueVersion;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,6 @@ AssStyle::AssStyle()
|
||||||
, shadow_w(2.)
|
, shadow_w(2.)
|
||||||
, alignment(2)
|
, alignment(2)
|
||||||
, encoding(1)
|
, encoding(1)
|
||||||
, relativeTo(1)
|
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
Margin[i] = 10;
|
Margin[i] = 10;
|
||||||
|
@ -255,15 +254,9 @@ AssStyle::AssStyle(wxString rawData, int version)
|
||||||
// Read right margin
|
// Read right margin
|
||||||
Margin[1] = mid(0, get_next_int(tkn), 9999);
|
Margin[1] = mid(0, get_next_int(tkn), 9999);
|
||||||
|
|
||||||
// Read top margin
|
// Read vertical margin
|
||||||
Margin[2] = mid(0, get_next_int(tkn), 9999);
|
Margin[2] = mid(0, get_next_int(tkn), 9999);
|
||||||
|
|
||||||
// Read bottom margin
|
|
||||||
if (version == 2)
|
|
||||||
Margin[3] = mid(0, get_next_int(tkn), 9999);
|
|
||||||
else
|
|
||||||
Margin[3] = Margin[2];
|
|
||||||
|
|
||||||
// Skip alpha level
|
// Skip alpha level
|
||||||
if (version == 0)
|
if (version == 0)
|
||||||
get_next_string(tkn);
|
get_next_string(tkn);
|
||||||
|
@ -271,10 +264,6 @@ AssStyle::AssStyle(wxString rawData, int version)
|
||||||
// Read encoding
|
// Read encoding
|
||||||
encoding = get_next_int(tkn);
|
encoding = get_next_int(tkn);
|
||||||
|
|
||||||
// Read relative to
|
|
||||||
if (version == 2)
|
|
||||||
relativeTo = get_next_int(tkn);
|
|
||||||
|
|
||||||
if (tkn.HasMoreTokens())
|
if (tkn.HasMoreTokens())
|
||||||
throw "Malformed style: too many fields";
|
throw "Malformed style: too many fields";
|
||||||
|
|
||||||
|
@ -305,7 +294,6 @@ AssStyle& AssStyle::operator=(AssStyle const& rgt) {
|
||||||
shadow_w = rgt.shadow_w;
|
shadow_w = rgt.shadow_w;
|
||||||
alignment = rgt.alignment;
|
alignment = rgt.alignment;
|
||||||
encoding = rgt.encoding;
|
encoding = rgt.encoding;
|
||||||
relativeTo = rgt.relativeTo;
|
|
||||||
|
|
||||||
memcpy(Margin, rgt.Margin, sizeof(Margin));
|
memcpy(Margin, rgt.Margin, sizeof(Margin));
|
||||||
|
|
||||||
|
|
|
@ -94,9 +94,8 @@ public:
|
||||||
double outline_w; ///< Outline width in pixels
|
double outline_w; ///< Outline width in pixels
|
||||||
double shadow_w; ///< Shadow distance in pixels
|
double shadow_w; ///< Shadow distance in pixels
|
||||||
int alignment; ///< \an-style line alignment
|
int alignment; ///< \an-style line alignment
|
||||||
int Margin[4]; ///< Left/Right/Vertical/Unused margins in pixels
|
int Margin[3]; ///< Left/Right/Vertical
|
||||||
int encoding; ///< ASS font encoding needed for some non-unicode fonts
|
int encoding; ///< ASS font encoding needed for some non-unicode fonts
|
||||||
int relativeTo; ///< ASS2 extension; do not use
|
|
||||||
|
|
||||||
/// Update the raw line data after one or more of the public members have been changed
|
/// Update the raw line data after one or more of the public members have been changed
|
||||||
void UpdateData();
|
void UpdateData();
|
||||||
|
|
|
@ -229,7 +229,7 @@ namespace Automation4 {
|
||||||
set_field(L, "margin_l", dia->Margin[0]);
|
set_field(L, "margin_l", dia->Margin[0]);
|
||||||
set_field(L, "margin_r", dia->Margin[1]);
|
set_field(L, "margin_r", dia->Margin[1]);
|
||||||
set_field(L, "margin_t", dia->Margin[2]);
|
set_field(L, "margin_t", dia->Margin[2]);
|
||||||
set_field(L, "margin_b", dia->Margin[3]);
|
set_field(L, "margin_b", dia->Margin[2]);
|
||||||
|
|
||||||
set_field(L, "text", dia->Text);
|
set_field(L, "text", dia->Text);
|
||||||
|
|
||||||
|
@ -267,7 +267,7 @@ namespace Automation4 {
|
||||||
set_field(L, "margin_l", sty->Margin[0]);
|
set_field(L, "margin_l", sty->Margin[0]);
|
||||||
set_field(L, "margin_r", sty->Margin[1]);
|
set_field(L, "margin_r", sty->Margin[1]);
|
||||||
set_field(L, "margin_t", sty->Margin[2]);
|
set_field(L, "margin_t", sty->Margin[2]);
|
||||||
set_field(L, "margin_b", sty->Margin[3]);
|
set_field(L, "margin_b", sty->Margin[2]);
|
||||||
|
|
||||||
set_field(L, "encoding", sty->encoding);
|
set_field(L, "encoding", sty->encoding);
|
||||||
|
|
||||||
|
@ -340,7 +340,6 @@ namespace Automation4 {
|
||||||
sty->Margin[0] = get_int_field(L, "margin_l", "style");
|
sty->Margin[0] = get_int_field(L, "margin_l", "style");
|
||||||
sty->Margin[1] = get_int_field(L, "margin_r", "style");
|
sty->Margin[1] = get_int_field(L, "margin_r", "style");
|
||||||
sty->Margin[2] = get_int_field(L, "margin_t", "style");
|
sty->Margin[2] = get_int_field(L, "margin_t", "style");
|
||||||
sty->Margin[3] = get_int_field(L, "margin_b", "style");
|
|
||||||
sty->encoding = get_int_field(L, "encoding", "style");
|
sty->encoding = get_int_field(L, "encoding", "style");
|
||||||
sty->UpdateData();
|
sty->UpdateData();
|
||||||
}
|
}
|
||||||
|
@ -357,7 +356,6 @@ namespace Automation4 {
|
||||||
dia->Margin[0] = get_int_field(L, "margin_l", "dialogue");
|
dia->Margin[0] = get_int_field(L, "margin_l", "dialogue");
|
||||||
dia->Margin[1] = get_int_field(L, "margin_r", "dialogue");
|
dia->Margin[1] = get_int_field(L, "margin_r", "dialogue");
|
||||||
dia->Margin[2] = get_int_field(L, "margin_t", "dialogue");
|
dia->Margin[2] = get_int_field(L, "margin_t", "dialogue");
|
||||||
dia->Margin[3] = get_int_field(L, "margin_b", "dialogue");
|
|
||||||
dia->Effect = get_string_field(L, "effect", "dialogue");
|
dia->Effect = get_string_field(L, "effect", "dialogue");
|
||||||
dia->Text = get_string_field(L, "text", "dialogue");
|
dia->Text = get_string_field(L, "text", "dialogue");
|
||||||
}
|
}
|
||||||
|
|
|
@ -203,7 +203,6 @@ DialogStyleEditor::DialogStyleEditor(wxWindow *parent, AssStyle *style, agi::Con
|
||||||
colorAlpha[3] = spin_ctrl(this, style->shadow.a, 255);
|
colorAlpha[3] = spin_ctrl(this, style->shadow.a, 255);
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
margin[i] = spin_ctrl(this, style->Margin[i], 9999);
|
margin[i] = spin_ctrl(this, style->Margin[i], 9999);
|
||||||
margin[3] = 0;
|
|
||||||
Alignment = new wxRadioBox(this, -1, _("Alignment"), wxDefaultPosition, wxDefaultSize, 9, alignValues, 3, wxRA_SPECIFY_COLS);
|
Alignment = new wxRadioBox(this, -1, _("Alignment"), wxDefaultPosition, wxDefaultSize, 9, alignValues, 3, wxRA_SPECIFY_COLS);
|
||||||
Outline = num_text_ctrl(this, style->outline_w, wxSize(50, -1));
|
Outline = num_text_ctrl(this, style->outline_w, wxSize(50, -1));
|
||||||
Shadow = num_text_ctrl(this, style->shadow_w, wxSize(50, -1));
|
Shadow = num_text_ctrl(this, style->shadow_w, wxSize(50, -1));
|
||||||
|
@ -508,9 +507,8 @@ void DialogStyleEditor::UpdateWorkStyle() {
|
||||||
|
|
||||||
work->alignment = ControlToAlign(Alignment->GetSelection());
|
work->alignment = ControlToAlign(Alignment->GetSelection());
|
||||||
|
|
||||||
for (int i=0;i<3;i++)
|
for (size_t i = 0; i < 3; ++i)
|
||||||
work->Margin[i] = margin[i]->GetValue();
|
work->Margin[i] = margin[i]->GetValue();
|
||||||
work->Margin[3] = margin[2]->GetValue();
|
|
||||||
|
|
||||||
work->primary.a = colorAlpha[0]->GetValue();
|
work->primary.a = colorAlpha[0]->GetValue();
|
||||||
work->secondary.a = colorAlpha[1]->GetValue();
|
work->secondary.a = colorAlpha[1]->GetValue();
|
||||||
|
|
|
@ -102,7 +102,7 @@ class DialogStyleEditor : public wxDialog {
|
||||||
wxSpinCtrl *colorAlpha[4];
|
wxSpinCtrl *colorAlpha[4];
|
||||||
|
|
||||||
/// DOCME
|
/// DOCME
|
||||||
wxSpinCtrl *margin[4];
|
wxSpinCtrl *margin[3];
|
||||||
|
|
||||||
/// DOCME
|
/// DOCME
|
||||||
wxRadioBox *Alignment;
|
wxRadioBox *Alignment;
|
||||||
|
|
|
@ -536,13 +536,8 @@ void SubsEditBox::OnMarginRChange(wxCommandEvent &) {
|
||||||
if (line) change_value(MarginR, line->GetMarginString(1, false));
|
if (line) change_value(MarginR, line->GetMarginString(1, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_margin_v(AssDialogue* diag, wxString value) {
|
|
||||||
diag->SetMarginString(value, 2);
|
|
||||||
diag->SetMarginString(value, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubsEditBox::OnMarginVChange(wxCommandEvent &) {
|
void SubsEditBox::OnMarginVChange(wxCommandEvent &) {
|
||||||
SetSelectedRows(set_margin_v, MarginV->GetValue(), _("MarginV change"), AssFile::COMMIT_DIAG_META);
|
SetSelectedRows(std::mem_fun(&AssDialogue::SetMarginString<2>), MarginV->GetValue(), _("MarginV change"), AssFile::COMMIT_DIAG_META);
|
||||||
if (line) change_value(MarginV, line->GetMarginString(2, false));
|
if (line) change_value(MarginV, line->GetMarginString(2, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ void SubtitlesPreview::SetStyle(AssStyle const& newStyle) {
|
||||||
*style = newStyle;
|
*style = newStyle;
|
||||||
style->name = "Default";
|
style->name = "Default";
|
||||||
style->alignment = 5;
|
style->alignment = 5;
|
||||||
memset(style->Margin, 0, 4 * sizeof(int));
|
memset(style->Margin, 0, sizeof style->Margin);
|
||||||
style->UpdateData();
|
style->UpdateData();
|
||||||
UpdateBitmap();
|
UpdateBitmap();
|
||||||
}
|
}
|
||||||
|
|
|
@ -404,13 +404,13 @@ Vector2D VisualToolBase::GetLinePosition(AssDialogue *diag) {
|
||||||
if (Vector2D ret = vec_or_bad(find_tag(diag, "\\move"), 0, 1)) return ret;
|
if (Vector2D ret = vec_or_bad(find_tag(diag, "\\move"), 0, 1)) return ret;
|
||||||
|
|
||||||
// Get default position
|
// Get default position
|
||||||
int margin[4];
|
int margin[3];
|
||||||
std::copy(diag->Margin, diag->Margin + 4, margin);
|
memcpy(margin, diag->Margin, sizeof margin);
|
||||||
int align = 2;
|
int align = 2;
|
||||||
|
|
||||||
if (AssStyle *style = c->ass->GetStyle(diag->Style)) {
|
if (AssStyle *style = c->ass->GetStyle(diag->Style)) {
|
||||||
align = style->alignment;
|
align = style->alignment;
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
if (margin[i] == 0)
|
if (margin[i] == 0)
|
||||||
margin[i] = style->Margin[i];
|
margin[i] = style->Margin[i];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue