fix filter scale for export with custom graphic scale

This commit is contained in:
2017-06-19 03:49:35 +07:00
parent 4033ca68e8
commit 8142f49e90
4 changed files with 59 additions and 21 deletions

View File

@@ -158,12 +158,7 @@ ft.array_foldr = function (arr, func, acc) {
ft.array_clone = function (arr) {
ft.type_assert(arr, Array);
var new_arr = [];
for (var index = 0; index < arr.length; ++index) {
var value = arr[index];
new_arr.push(value);
}
return new_arr;
return arr.concat();
};
ft.array_filter = function (arr, filter) {
@@ -179,6 +174,19 @@ ft.array_filter = function (arr, filter) {
return new_arr;
};
ft.array_merge = function (arrA, arrB) {
ft.type_assert(arrA, Array);
ft.type_assert(arrB, Array);
return arrA.concat(ft.array_filter(arrB, function (value) {
return !ft.array_contains(arrA, value);
}));
};
ft.array_contains = function (arr, elem) {
ft.type_assert(arr, Array);
return arr.indexOf(elem) >= 0;
};
ft.array_foreach = function (arr, func, filter) {
ft.type_assert(arr, Array);
ft.type_assert(func, Function);
@@ -191,7 +199,7 @@ ft.array_foreach = function (arr, func, filter) {
}
};
ft.array_group_by = function(arr, func) {
ft.array_group_by = function (arr, func) {
return ft.array_foldl(arr, function (value, acc) {
if (acc.length > 0 && func(acc.peek().peek()) === func(value)) {
acc.peek().push(value);

View File

@@ -124,7 +124,7 @@
(function() {
var wrapper_item_name = ft.gen_unique_name();
var wrapper_item = doc.convertToSymbol("graphic", wrapper_item_name , "top left");
fttim.recursive_scale_filters(doc, wrapper_item.timeline, final_scale);
fttim.recursive_scale_filters(doc, wrapper_item, final_scale);
var elem = doc.selection[0];
elem.setTransformationPoint({x: 0, y: 0});
@@ -150,6 +150,8 @@
elem.setTransformationPoint({x: (elem_x - elem.x), y: (elem_y - elem.y)});
doc.scaleSelection(1.0 / final_scale, 1.0 / final_scale);
fttim.recursive_scale_filters(doc, wrapper_item, 1.0 / final_scale);
})();
}
};
@@ -648,23 +650,51 @@
var frame_height = Math.max(0, bounds.bottom - bounds.top);
return Math.round(frame_width) * Math.round(frame_height);
};
fttim.scale_elem_filters = function (elem, scale) {
if (fttim.is_symbol_instance(elem)) {
var elem_filters = elem.filters;
if (elem_filters && elem_filters !== undefined) {
ft.array_foreach(elem_filters, function (elem_filter, filter_index) {
elem_filter.blurX *= scale;
elem_filter.blurY *= scale;
});
elem.filters = elem_filters;
}
}
if (fttim.is_group_shape_element(elem)) {
ft.array_foreach(elem.members, function(member) {
fttim.scale_elem_filters(member, scale);
});
}
};
fttim.recursive_scale_filters = function (doc, timeline, scale) {
fttim.recursive_scale_filters = function (doc, item, scale, optional_scaled_items) {
ft.type_assert(doc, Document);
ft.type_assert(timeline, Timeline);
ft.array_foreach(timeline.layers, function (layer) {
ft.type_assert(item, LibraryItem);
ft.type_assert(scale, 'number');
ft.type_assert_if_defined(optional_scaled_items, Array);
var scaled_items = optional_scaled_items || [];
if (ft.array_contains(scaled_items, item)) {
return;
} else {
scaled_items.push(item);
}
ft.array_foreach(item.timeline.layers, function (layer) {
ft.array_foreach(layer.frames, function (frame, frame_index) {
ft.array_foreach(frame.elements, function (elem) {
var elem_filters = elem.filters;
if (elem_filters && elem_filters !== undefined) {
ft.array_foreach(elem_filters, function (elem_filter, filter_index) {
elem_filter.blurX *= scale;
elem_filter.blurY *= scale;
});
elem.filters = elem_filters;
fttim.scale_elem_filters(elem, scale);
if (fttim.is_group_shape_element(elem)) {
ft.array_foreach(elem.members, function(member) {
fttim.recursive_scale_filters(doc, member.libraryItem, scale, scaled_items);
}, fttim.is_symbol_instance);
}
fttim.recursive_scale_filters(doc, elem.libraryItem.timeline, scale);
}, fttim.is_symbol_instance);
if (fttim.is_symbol_instance(elem)) {
fttim.recursive_scale_filters(doc, elem.libraryItem, scale, scaled_items);
}
});
}, fttim.is_keyframe);
}, fttim.is_not_guide_layer);
};

View File

@@ -93,7 +93,7 @@ http://ru.esotericsoftware.com/forum/Submeshes-render-in-random-order-with-ortho
**** DONE Шейпы в классических твинах (да, это ошибка, но флеш её пропускает) не растеризуются
**** DONE При множественном импорте ошибка в импорте по поводу удаление из-под носа ассета воспроизводится 100%
**** DONE Некорректно кончающиеся твинны плохо дружат с оптимизацией и растеризацией
**** TODO Скейл фильтров не заходит в группы
**** DONE Скейл фильтров не заходит в группы
**** TODO Использовать textureRectOffset для спрайта (пакер атласов кропит спрайты!)
** DONE Версия 1.3.7
*** Баги