| 1105 | } |
| 1106 | |
| 1107 | model::Mask *LottieParserImpl::parseMaskObject() |
| 1108 | { |
| 1109 | auto obj = allocator().make<model::Mask>(); |
| 1110 | |
| 1111 | RAPIDJSON_ASSERT(PeekType() == kObjectType); |
| 1112 | EnterObject(); |
| 1113 | while (const char *key = NextObjectKey()) { |
| 1114 | if (0 == strcmp(key, "inv")) { |
| 1115 | obj->mInv = GetBool(); |
| 1116 | } else if (0 == strcmp(key, "mode")) { |
| 1117 | const char *str = GetString(); |
| 1118 | if (!str) { |
| 1119 | obj->mMode = model::Mask::Mode::None; |
| 1120 | continue; |
| 1121 | } |
| 1122 | switch (str[0]) { |
| 1123 | case 'n': |
| 1124 | obj->mMode = model::Mask::Mode::None; |
| 1125 | break; |
| 1126 | case 'a': |
| 1127 | obj->mMode = model::Mask::Mode::Add; |
| 1128 | break; |
| 1129 | case 's': |
| 1130 | obj->mMode = model::Mask::Mode::Substarct; |
| 1131 | break; |
| 1132 | case 'i': |
| 1133 | obj->mMode = model::Mask::Mode::Intersect; |
| 1134 | break; |
| 1135 | case 'f': |
| 1136 | obj->mMode = model::Mask::Mode::Difference; |
| 1137 | break; |
| 1138 | default: |
| 1139 | obj->mMode = model::Mask::Mode::None; |
| 1140 | break; |
| 1141 | } |
| 1142 | } else if (0 == strcmp(key, "pt")) { |
| 1143 | parseShapeProperty(obj->mShape); |
| 1144 | } else if (0 == strcmp(key, "o")) { |
| 1145 | parseProperty(obj->mOpacity); |
| 1146 | } else { |
| 1147 | Skip(key); |
| 1148 | } |
| 1149 | } |
| 1150 | obj->mIsStatic = obj->mShape.isStatic() && obj->mOpacity.isStatic(); |
| 1151 | return obj; |
| 1152 | } |
| 1153 | |
| 1154 | void LottieParserImpl::parseShapesAttr(model::Layer *layer) |
| 1155 | { |