diff --git a/aegisub/src/ass_override.cpp b/aegisub/src/ass_override.cpp index cab919882..c86d0be7d 100644 --- a/aegisub/src/ass_override.cpp +++ b/aegisub/src/ass_override.cpp @@ -37,11 +37,14 @@ #include "ass_dialogue.h" +#include "utils.h" + #include #include #include #include +#include #include #include #include @@ -87,6 +90,9 @@ template<> std::string AssOverrideParameter::Get() const { } template<> int AssOverrideParameter::Get() const { + if (classification == PARCLASS_ALPHA) + // &Hxx&, but vsfilter lets you leave everything out + return mid(0, strtol(std::find_if(value.c_str(), value.c_str() + value.size(), isxdigit), nullptr, 16), 255); return atoi(Get().c_str()); } @@ -121,7 +127,10 @@ template<> void AssOverrideParameter::Set(std::string new_value) { } template<> void AssOverrideParameter::Set(int new_value) { - Set(std::to_string(new_value)); + if (classification == PARCLASS_ALPHA) + Set(str(boost::format("&H%02X&") % mid(0, new_value, 255))); + else + Set(std::to_string(new_value)); } template<> void AssOverrideParameter::Set(double new_value) { @@ -206,7 +215,7 @@ static void load_protos() { // Longer tag names must appear before shorter tag names - proto[0].Set("\\alpha", VARDATA_TEXT); // \alpha + proto[0].Set("\\alpha", VARDATA_TEXT, PARCLASS_ALPHA); // \alpha&H& proto[++i].Set("\\bord", VARDATA_FLOAT,PARCLASS_ABSOLUTE_SIZE); // \bord proto[++i].Set("\\xbord", VARDATA_FLOAT,PARCLASS_ABSOLUTE_SIZE); // \xbord proto[++i].Set("\\ybord", VARDATA_FLOAT,PARCLASS_ABSOLUTE_SIZE); // \ybord @@ -296,10 +305,10 @@ static void load_protos() { proto[++i].Set("\\2c", VARDATA_TEXT); // \2c&H& proto[++i].Set("\\3c", VARDATA_TEXT); // \3c&H& proto[++i].Set("\\4c", VARDATA_TEXT); // \4c&H& - proto[++i].Set("\\1a", VARDATA_TEXT); // \1a&H& - proto[++i].Set("\\2a", VARDATA_TEXT); // \2a&H& - proto[++i].Set("\\3a", VARDATA_TEXT); // \3a&H& - proto[++i].Set("\\4a", VARDATA_TEXT); // \4a&H& + proto[++i].Set("\\1a", VARDATA_TEXT, PARCLASS_ALPHA); // \1a&H& + proto[++i].Set("\\2a", VARDATA_TEXT, PARCLASS_ALPHA); // \2a&H& + proto[++i].Set("\\3a", VARDATA_TEXT, PARCLASS_ALPHA); // \3a&H& + proto[++i].Set("\\4a", VARDATA_TEXT, PARCLASS_ALPHA); // \4a&H& proto[++i].Set("\\fe", VARDATA_TEXT); // \fe proto[++i].Set("\\ko", VARDATA_INT,PARCLASS_KARAOKE); // \ko proto[++i].Set("\\kf", VARDATA_INT,PARCLASS_KARAOKE); // \kf diff --git a/aegisub/src/ass_override.h b/aegisub/src/ass_override.h index 85060212a..e405f4bb2 100644 --- a/aegisub/src/ass_override.h +++ b/aegisub/src/ass_override.h @@ -38,7 +38,7 @@ class AssDialogueBlockOverride; -/// Type of parameter; probably only used by the resample tool +/// Type of parameter enum AssParameterClass { PARCLASS_NORMAL, PARCLASS_ABSOLUTE_SIZE, @@ -49,7 +49,8 @@ enum AssParameterClass { PARCLASS_RELATIVE_TIME_START, PARCLASS_RELATIVE_TIME_END, PARCLASS_KARAOKE, - PARCLASS_DRAWING + PARCLASS_DRAWING, + PARCLASS_ALPHA }; enum VariableDataType {