Skip to content

Commit 67ab780

Browse files
authored
Fix incorrect scale mode caused by File::editableImages is nullptr when all image layers are editable (#3010)
1 parent 6e0c1bb commit 67ab780

File tree

4 files changed

+23
-13
lines changed

4 files changed

+23
-13
lines changed

src/codec/Codec.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,5 +304,19 @@ void Codec::UpdateFileAttributes(std::shared_ptr<File> file, CodecContext* conte
304304
file->editableImages = context->editableImages;
305305
file->editableTexts = context->editableTexts;
306306
file->imageScaleModes = context->imageScaleModes;
307+
if (file->editableImages == nullptr) {
308+
auto maxIndex = file->numImages();
309+
file->editableImages = new std::vector<int>(maxIndex);
310+
for (int i = 0; i < maxIndex; i++) {
311+
file->editableImages->at(i) = i;
312+
}
313+
}
314+
if (file->editableTexts == nullptr) {
315+
auto maxIndex = file->numTexts();
316+
file->editableTexts = new std::vector<int>(maxIndex);
317+
for (int i = 0; i < maxIndex; i++) {
318+
file->editableTexts->at(i) = i;
319+
}
320+
}
307321
}
308322
} // namespace pag

src/codec/tags/EditableIndices.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ void ReadEditableIndices(DecodeStream* stream) {
3434
}
3535

3636
TagCode WriteEditableIndices(EncodeStream* stream, const File* file) {
37-
if (file->editableImages != nullptr) {
37+
if (file->editableImages != nullptr &&
38+
file->editableImages->size() != static_cast<size_t>(file->numImages())) {
3839
stream->writeEncodedUint32(static_cast<uint32_t>(file->editableImages->size()));
3940
for (int index : *file->editableImages) {
4041
stream->writeEncodedInt32(index);
@@ -43,7 +44,8 @@ TagCode WriteEditableIndices(EncodeStream* stream, const File* file) {
4344
stream->writeEncodedUint32(0);
4445
}
4546

46-
if (file->editableTexts != nullptr) {
47+
if (file->editableTexts != nullptr &&
48+
file->editableTexts->size() != static_cast<size_t>(file->numTexts())) {
4749
stream->writeEncodedUint32(static_cast<uint32_t>(file->editableTexts->size()));
4850
for (int index : *file->editableTexts) {
4951
stream->writeEncodedInt32(index);

src/codec/tags/FileTags.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,10 @@ void WriteTagsOfFile(EncodeStream* stream, const File* file, PerformanceData* pe
178178
if (!file->images.empty()) {
179179
WriteImages(stream, &(file->images));
180180
}
181-
if (file->editableImages != nullptr || file->editableTexts != nullptr) {
181+
if ((file->editableImages != nullptr &&
182+
file->editableImages->size() != static_cast<size_t>(file->numImages())) ||
183+
(file->editableTexts != nullptr &&
184+
file->editableTexts->size() != static_cast<size_t>(file->numTexts()))) {
182185
WriteTag(stream, file, WriteEditableIndices);
183186
}
184187
if (file->imageScaleModes != nullptr) {

src/rendering/layers/PAGFile.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -216,30 +216,21 @@ bool PAGFile::isPAGFile() const {
216216
}
217217

218218
std::vector<int> PAGFile::getEditableIndices(LayerType layerType) {
219-
int maxIndex = 0;
220219
switch (layerType) {
221220
case LayerType::Image:
222221
if (file->editableImages != nullptr) {
223222
return *file->editableImages;
224223
}
225-
maxIndex = file->numImages();
226224
break;
227225
case LayerType::Text:
228226
if (file->editableTexts != nullptr) {
229227
return *file->editableTexts;
230228
}
231-
maxIndex = file->numTexts();
232229
break;
233-
case LayerType::Solid:
234-
return {-1};
235230
default:
236231
break;
237232
}
238-
std::vector<int> result;
239-
for (int i = 0; i < maxIndex; i++) {
240-
result.emplace_back(i);
241-
}
242-
return result;
233+
return {};
243234
}
244235

245236
Frame PAGFile::stretchedFrameDuration() const {

0 commit comments

Comments
 (0)