DocumentServer/OfficeWeb/sdk/PowerPoint/Editor/TrackObjects/ResizeTracks.js
nikolay ivanov a8be6b9e72 init repo
2014-07-05 18:22:49 +00:00

1946 lines
84 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2014
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
var TRANSLATE_HANDLE_NO_FLIP = [];
TRANSLATE_HANDLE_NO_FLIP[0] = 0;
TRANSLATE_HANDLE_NO_FLIP[1] = 1;
TRANSLATE_HANDLE_NO_FLIP[2] = 2;
TRANSLATE_HANDLE_NO_FLIP[3] = 3;
TRANSLATE_HANDLE_NO_FLIP[4] = 4;
TRANSLATE_HANDLE_NO_FLIP[5] = 5;
TRANSLATE_HANDLE_NO_FLIP[6] = 6;
TRANSLATE_HANDLE_NO_FLIP[7] = 7;
var TRANSLATE_HANDLE_FLIP_H = [];
TRANSLATE_HANDLE_FLIP_H[0] = 2;
TRANSLATE_HANDLE_FLIP_H[1] = 1;
TRANSLATE_HANDLE_FLIP_H[2] = 0;
TRANSLATE_HANDLE_FLIP_H[3] = 7;
TRANSLATE_HANDLE_FLIP_H[4] = 6;
TRANSLATE_HANDLE_FLIP_H[5] = 5;
TRANSLATE_HANDLE_FLIP_H[6] = 4;
TRANSLATE_HANDLE_FLIP_H[7] = 3;
var TRANSLATE_HANDLE_FLIP_V = [];
TRANSLATE_HANDLE_FLIP_V[0] = 6;
TRANSLATE_HANDLE_FLIP_V[1] = 5;
TRANSLATE_HANDLE_FLIP_V[2] = 4;
TRANSLATE_HANDLE_FLIP_V[3] = 3;
TRANSLATE_HANDLE_FLIP_V[4] = 2;
TRANSLATE_HANDLE_FLIP_V[5] = 1;
TRANSLATE_HANDLE_FLIP_V[6] = 0;
TRANSLATE_HANDLE_FLIP_V[7] = 7;
var TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V = [];
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[0] = 4;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[1] = 5;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[2] = 6;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[3] = 7;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[4] = 0;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[5] = 1;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[6] = 2;
TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[7] = 3;
var SHAPE_ASPECTS = {};
SHAPE_ASPECTS["can"] = 3616635 / 4810125;
SHAPE_ASPECTS["moon"] = 0.5;
SHAPE_ASPECTS["leftBracket"] = 0.08;
SHAPE_ASPECTS["rightBracket"] = 0.08;
SHAPE_ASPECTS["leftBrace"] = 0.17;
SHAPE_ASPECTS["rightBrace"] = 0.17;
var MIN_SHAPE_SIZE = 1.27;
var MIN_SHAPE_SIZE_DIV2 = MIN_SHAPE_SIZE / 2;
var MIN_ANGLE = 0.07000000000000001;
function ResizeTrackShapeImage(originalObject, cardDirection) {
this.originalObject = originalObject;
this.numberHandle = originalObject.getNumByCardDirection(cardDirection);
var numberHandle = this.numberHandle;
this.flipH = originalObject.flipH;
this.flipV = originalObject.flipV;
var _flip_h = originalObject.flipH;
var _flip_v = originalObject.flipV;
var _half_height = originalObject.extY * 0.5;
var _half_width = originalObject.extX * 0.5;
var _sin = Math.sin(originalObject.rot);
var _cos = Math.cos(originalObject.rot);
var _translated_num_handle;
if (!_flip_h && !_flip_v) {
_translated_num_handle = numberHandle;
} else {
if (_flip_h && !_flip_v) {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H[numberHandle];
} else {
if (!_flip_h && _flip_v) {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_V[numberHandle];
} else {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[numberHandle];
}
}
}
this.bAspect = numberHandle % 2 === 0;
this.aspect = this.bAspect === true ? this.originalObject.getAspect(_translated_num_handle) : 0;
this.sin = _sin;
this.cos = _cos;
this.translatetNumberHandle = _translated_num_handle;
switch (_translated_num_handle) {
case 0:
case 1:
this.fixedPointX = (_half_width * _cos - _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (_half_width * _sin + _half_height * _cos) + _half_height + originalObject.y;
break;
case 2:
case 3:
this.fixedPointX = (-_half_width * _cos - _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (-_half_width * _sin + _half_height * _cos) + _half_height + originalObject.y;
break;
case 4:
case 5:
this.fixedPointX = (-_half_width * _cos + _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (-_half_width * _sin - _half_height * _cos) + _half_height + originalObject.y;
break;
case 6:
case 7:
this.fixedPointX = (_half_width * _cos + _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (_half_width * _sin - _half_height * _cos) + _half_height + originalObject.y;
break;
}
this.mod = this.translatetNumberHandle % 4;
this.centerPointX = originalObject.x + _half_width;
this.centerPointY = originalObject.y + _half_height;
this.originalExtX = originalObject.extX;
this.originalExtY = originalObject.extY;
this.originalFlipH = _flip_h;
this.originalFlipV = _flip_v;
this.usedExtX = this.originalExtX === 0 ? (0.01) : this.originalExtX;
this.usedExtY = this.originalExtY === 0 ? (0.01) : this.originalExtY;
this.resizedExtX = this.originalExtX;
this.resizedExtY = this.originalExtY;
this.resizedflipH = _flip_h;
this.resizedflipV = _flip_v;
this.resizedPosX = originalObject.x;
this.resizedPosY = originalObject.y;
this.resizedRot = originalObject.rot;
this.transform = originalObject.transform.CreateDublicate();
this.geometry = originalObject.spPr.geometry ? originalObject.spPr.geometry.createDuplicate() : (function () {
var geometry = CreateGeometry("rect");
geometry.Init(5, 5);
return geometry;
})();
this.brush = originalObject.brush;
this.pen = originalObject.pen;
this.isLine = originalObject.spPr.geometry && originalObject.spPr.geometry.preset === "line";
this.bChangeCoef = this.translatetNumberHandle % 2 === 0 && this.originalFlipH !== this.originalFlipV;
this.overlayObject = new OverlayObject(this.geometry, this.resizedExtX, this.resizedExtY, this.brush, this.pen, this.transform);
this.track = function (kd1, kd2, e) {
if (!e.CtrlKey) {
this.resize(kd1, kd2, e.ShiftKey);
} else {
this.resizeRelativeCenter(kd1, kd2, e.ShiftKey);
}
};
this.resize = function (kd1, kd2, ShiftKey) {
var _cos = this.cos;
var _sin = this.sin;
var _real_height, _real_width;
var _abs_height, _abs_width;
var _new_resize_half_width;
var _new_resize_half_height;
var _new_used_half_width;
var _new_used_half_height;
var _temp;
if (ShiftKey === true && this.bAspect === true) {
var _new_aspect = this.aspect * (Math.abs(kd1 / kd2));
if (_new_aspect >= this.aspect) {
kd2 = Math.abs(kd1) * (kd2 >= 0 ? 1 : -1);
} else {
kd1 = Math.abs(kd2) * (kd1 >= 0 ? 1 : -1);
}
}
if (this.bChangeCoef) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
switch (this.translatetNumberHandle) {
case 0:
case 1:
if (this.translatetNumberHandle === 0) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
}
if (this.translatetNumberHandle === 1) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
if (this.isLine && ShiftKey) {
this.resizedflipH = !this.originalFlipH;
}
} else {
this.resizedflipV = this.originalFlipV;
if (this.isLine && ShiftKey && this.resizedflipH !== this.originalFlipH) {
this.resizedflipV = !this.originalFlipV;
}
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width * _cos + _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width * _sin - _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 2:
case 3:
if (this.translatetNumberHandle === 2) {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
}
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
if (this.isLine && ShiftKey) {
this.resizedflipV = !this.originalFlipV;
}
} else {
this.resizedflipH = this.originalFlipH;
if (this.isLine && ShiftKey && this.resizedflipV !== this.originalFlipV) {
this.resizedflipH = !this.originalFlipH;
}
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width * _cos + _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width * _sin - _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 4:
case 5:
if (this.translatetNumberHandle === 4) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
} else {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
if (this.isLine && ShiftKey) {
this.resizedflipH = !this.originalFlipH;
}
} else {
this.resizedflipV = this.originalFlipV;
if (this.isLine && ShiftKey && this.resizedflipH !== this.originalFlipH) {
this.resizedflipV = !this.originalFlipV;
}
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width * _cos - _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width * _sin + _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 6:
case 7:
if (this.translatetNumberHandle === 6) {
_real_height = this.usedExtY * kd1;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
} else {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_width = this.usedExtX * kd2;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
if (this.isLine && ShiftKey) {
this.resizedflipV = !this.originalFlipV;
}
} else {
this.resizedflipH = this.originalFlipH;
if (this.isLine && ShiftKey && this.resizedflipV !== this.originalFlipV) {
this.resizedflipH = !this.originalFlipH;
}
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width * _cos - _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width * _sin + _new_used_half_height * _cos) - _new_resize_half_height;
break;
}
this.geometry.Recalculate(this.resizedExtX, this.resizedExtY);
this.overlayObject.updateExtents(this.resizedExtX, this.resizedExtY);
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX * 0.5;
var _vertical_center = this.resizedExtY * 0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if (this.resizedflipH) {
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if (this.resizedflipV) {
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
};
this.resizeRelativeCenter = function (kd1, kd2, ShiftKey) {
if (this.isLine) {
this.resize(kd1, kd2, ShiftKey);
return;
}
kd1 = 2 * kd1 - 1;
kd2 = 2 * kd2 - 1;
var _real_height, _real_width;
var _abs_height, _abs_width;
if (ShiftKey === true && this.bAspect === true) {
var _new_aspect = this.aspect * (Math.abs(kd1 / kd2));
if (_new_aspect >= this.aspect) {
kd2 = Math.abs(kd1) * (kd2 >= 0 ? 1 : -1);
} else {
kd1 = Math.abs(kd2) * (kd1 >= 0 ? 1 : -1);
}
}
var _temp;
if (this.bChangeCoef) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
if (this.mod === 0 || this.mod === 1) {
if (this.mod === 0) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
} else {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
} else {
if (this.mod === 2) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
}
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
}
this.resizedPosX = this.centerPointX - this.resizedExtX * 0.5;
this.resizedPosY = this.centerPointY - this.resizedExtY * 0.5;
this.geometry.Recalculate(this.resizedExtX, this.resizedExtY);
this.overlayObject.updateExtents(this.resizedExtX, this.resizedExtY);
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX * 0.5;
var _vertical_center = this.resizedExtY * 0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if (this.resizedflipH) {
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if (this.resizedflipV) {
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
};
this.draw = function (overlay) {
this.overlayObject.draw(overlay);
};
this.getBounds = function () {
var bounds_checker = new CSlideBoundsChecker();
bounds_checker.init(Page_Width, Page_Height, Page_Width, Page_Height);
this.draw(bounds_checker);
return {
l: bounds_checker.Bounds.min_x,
t: bounds_checker.Bounds.min_y,
r: bounds_checker.Bounds.max_x,
b: bounds_checker.Bounds.max_y
};
};
this.getBoundsRect = function () {
var t = this.transform;
var max_x, min_x, max_y, min_y;
min_x = t.TransformPointX(0, 0);
max_x = min_x;
min_y = t.TransformPointY(0, 0);
max_y = min_y;
var arr = [{
x: this.resizedExtX,
y: 0
},
{
x: this.resizedExtX,
y: this.resizedExtY
},
{
x: 0,
y: this.resizedExtY
}];
var t_x, t_y;
for (var i = 0; i < arr.length; ++i) {
var p = arr[i];
t_x = t.TransformPointX(p.x, p.y);
t_y = t.TransformPointY(p.x, p.y);
if (t_x < min_x) {
min_x = t_x;
}
if (t_x > max_x) {
max_x = t_x;
}
if (t_y < min_y) {
min_y = t_y;
}
if (t_y > max_y) {
max_y = t_y;
}
}
return {
l: min_x,
t: min_y,
r: max_x,
b: max_y
};
};
this.trackEnd = function () {
this.originalObject.setXfrm(this.resizedPosX, this.resizedPosY, this.resizedExtX, this.resizedExtY, null, this.resizedflipH, this.resizedflipV);
};
}
function ResizeTrackShapeImageInGroup(originalObject, cardDirection) {
this.originalObject = originalObject;
this.numberHandle = originalObject.getNumByCardDirection(cardDirection);
var numberHandle = this.numberHandle;
this.flipH = originalObject.flipH;
this.flipV = originalObject.flipV;
var _flip_h = originalObject.flipH;
var _flip_v = originalObject.flipV;
var _half_height = originalObject.extY * 0.5;
var _half_width = originalObject.extX * 0.5;
var _sin = Math.sin(originalObject.rot);
var _cos = Math.cos(originalObject.rot);
var _translated_num_handle;
if (!_flip_h && !_flip_v) {
_translated_num_handle = numberHandle;
} else {
if (_flip_h && !_flip_v) {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H[numberHandle];
} else {
if (!_flip_h && _flip_v) {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_V[numberHandle];
} else {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[numberHandle];
}
}
}
this.bAspect = numberHandle % 2 === 0;
this.aspect = this.bAspect === true ? this.originalObject.getAspect(_translated_num_handle) : 0;
this.sin = _sin;
this.cos = _cos;
this.translatetNumberHandle = _translated_num_handle;
switch (_translated_num_handle) {
case 0:
case 1:
this.fixedPointX = (_half_width * _cos - _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (_half_width * _sin + _half_height * _cos) + _half_height + originalObject.y;
break;
case 2:
case 3:
this.fixedPointX = (-_half_width * _cos - _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (-_half_width * _sin + _half_height * _cos) + _half_height + originalObject.y;
break;
case 4:
case 5:
this.fixedPointX = (-_half_width * _cos + _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (-_half_width * _sin - _half_height * _cos) + _half_height + originalObject.y;
break;
case 6:
case 7:
this.fixedPointX = (_half_width * _cos + _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (_half_width * _sin - _half_height * _cos) + _half_height + originalObject.y;
break;
}
this.mod = this.translatetNumberHandle % 4;
this.centerPointX = originalObject.x + _half_width;
this.centerPointY = originalObject.y + _half_height;
this.originalExtX = originalObject.extX;
this.originalExtY = originalObject.extY;
this.originalFlipH = _flip_h;
this.originalFlipV = _flip_v;
this.usedExtX = this.originalExtX === 0 ? (0.01) : this.originalExtX;
this.usedExtY = this.originalExtY === 0 ? (0.01) : this.originalExtY;
this.resizedExtX = this.originalExtX;
this.resizedExtY = this.originalExtY;
this.resizedflipH = _flip_h;
this.resizedflipV = _flip_v;
this.resizedPosX = originalObject.x;
this.resizedPosY = originalObject.y;
this.resizedRot = originalObject.rot;
this.transform = originalObject.transform.CreateDublicate();
this.geometry = originalObject.spPr.geometry.createDuplicate();
this.brush = originalObject.brush;
this.pen = originalObject.pen;
this.isLine = originalObject.spPr.geometry && originalObject.spPr.geometry.preset === "line";
this.bChangeCoef = this.translatetNumberHandle % 2 === 0 && this.originalFlipH !== this.originalFlipV;
this.overlayObject = new OverlayObject(this.geometry, this.resizedExtX, this.resizedExtY, this.brush, this.pen, this.transform);
this.track = function (kd1, kd2, e) {
if (!e.CtrlKey) {
this.resize(kd1, kd2, e.ShiftKey);
} else {
this.resizeRelativeCenter(kd1, kd2, e.ShiftKey);
}
};
this.resize = function (kd1, kd2, ShiftKey) {
var _cos = this.cos;
var _sin = this.sin;
var _real_height, _real_width;
var _abs_height, _abs_width;
var _new_resize_half_width;
var _new_resize_half_height;
var _new_used_half_width;
var _new_used_half_height;
var _temp;
if (ShiftKey === true && this.bAspect === true) {
var _new_aspect = this.aspect * (Math.abs(kd1 / kd2));
if (_new_aspect >= this.aspect) {
kd2 = Math.abs(kd1) * (kd2 >= 0 ? 1 : -1);
} else {
kd1 = Math.abs(kd2) * (kd1 >= 0 ? 1 : -1);
}
}
if (this.bChangeCoef) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
switch (this.translatetNumberHandle) {
case 0:
case 1:
if (this.translatetNumberHandle === 0) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
}
if (this.translatetNumberHandle === 1) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width * _cos + _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width * _sin - _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 2:
case 3:
if (this.translatetNumberHandle === 2) {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
}
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width * _cos + _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width * _sin - _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 4:
case 5:
if (this.translatetNumberHandle === 4) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
} else {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width * _cos - _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width * _sin + _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 6:
case 7:
if (this.translatetNumberHandle === 6) {
_real_height = this.usedExtY * kd1;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.isLine ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
} else {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_width = this.usedExtX * kd2;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.isLine ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width * _cos - _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width * _sin + _new_used_half_height * _cos) - _new_resize_half_height;
break;
}
this.geometry.Recalculate(this.resizedExtX, this.resizedExtY);
this.overlayObject.updateExtents(this.resizedExtX, this.resizedExtY);
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX * 0.5;
var _vertical_center = this.resizedExtY * 0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if (this.resizedflipH) {
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if (this.resizedflipV) {
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
global_MatrixTransformer.MultiplyAppend(_transform, this.originalObject.group.getTransformMatrix());
};
this.resizeRelativeCenter = function (kd1, kd2, ShiftKey) {
kd1 = 2 * kd1 - 1;
kd2 = 2 * kd2 - 1;
var _real_height, _real_width;
var _abs_height, _abs_width;
if (ShiftKey === true && this.bAspect === true) {
var _new_aspect = this.aspect * (Math.abs(kd1 / kd2));
if (_new_aspect >= this.aspect) {
kd2 = Math.abs(kd1) * (kd2 >= 0 ? 1 : -1);
} else {
kd1 = Math.abs(kd2) * (kd1 >= 0 ? 1 : -1);
}
}
var _temp;
if (this.bChangeCoef) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
if (this.mod === 0 || this.mod === 1) {
if (this.mod === 0) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
} else {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
} else {
if (this.mod === 2) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
}
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
}
this.resizedPosX = this.centerPointX - this.resizedExtX * 0.5;
this.resizedPosY = this.centerPointY - this.resizedExtY * 0.5;
this.geometry.Recalculate(this.resizedExtX, this.resizedExtY);
this.overlayObject.updateExtents(this.resizedExtX, this.resizedExtY);
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX * 0.5;
var _vertical_center = this.resizedExtY * 0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if (this.resizedflipH) {
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if (this.resizedflipV) {
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
global_MatrixTransformer.MultiplyAppend(_transform, this.originalObject.group.getTransformMatrix());
};
this.draw = function (overlay) {
this.overlayObject.draw(overlay);
};
this.getBounds = function () {
var bounds_checker = new CSlideBoundsChecker();
bounds_checker.init(Page_Width, Page_Height, Page_Width, Page_Height);
this.draw(bounds_checker);
return {
l: bounds_checker.Bounds.min_x,
t: bounds_checker.Bounds.min_y,
r: bounds_checker.Bounds.max_x,
b: bounds_checker.Bounds.max_y
};
};
this.getBoundsRect = function () {
var t = this.transform;
var max_x, min_x, max_y, min_y;
min_x = t.TransformPointX(0, 0);
max_x = min_x;
min_y = t.TransformPointY(0, 0);
max_y = min_y;
var arr = [{
x: this.resizedExtX,
y: 0
},
{
x: this.resizedExtX,
y: this.resizedExtY
},
{
x: 0,
y: this.resizedExtY
}];
var t_x, t_y;
for (var i = 0; i < arr.length; ++i) {
var p = arr[i];
t_x = t.TransformPointX(p.x, p.y);
t_y = t.TransformPointY(p.x, p.y);
if (t_x < min_x) {
min_x = t_x;
}
if (t_x > max_x) {
max_x = t_x;
}
if (t_y < min_y) {
min_y = t_y;
}
if (t_y > max_y) {
max_y = t_y;
}
}
return {
l: min_x,
t: min_y,
r: max_x,
b: max_y
};
};
this.trackEnd = function () {
var scale_scale_coefficients = this.originalObject.group.getResultScaleCoefficients();
var xfrm = this.originalObject.group.spPr.xfrm;
this.originalObject.setOffset(this.resizedPosX / scale_scale_coefficients.cx + xfrm.chOffX, this.resizedPosY / scale_scale_coefficients.cy + xfrm.chOffY);
this.originalObject.setExtents(this.resizedExtX / scale_scale_coefficients.cx, this.resizedExtY / scale_scale_coefficients.cy);
this.originalObject.setFlips(this.resizedflipH, this.resizedflipV);
};
}
function ResizeTrackGroup(originalObject, cardDirection, parentTrack) {
this.original = originalObject;
this.originalObject = originalObject;
this.parentTrack = parentTrack;
var numberHandle;
if (isRealNumber(cardDirection)) {
this.numberHandle = originalObject.getNumByCardDirection(cardDirection);
numberHandle = this.numberHandle;
}
this.x = originalObject.x;
this.y = originalObject.y;
this.extX = originalObject.extX;
this.extY = originalObject.extY;
this.rot = originalObject.rot;
this.flipH = originalObject.flipH;
this.flipV = originalObject.flipV;
this.transform = originalObject.transform.CreateDublicate();
this.bSwapCoef = !(this.rot < Math.PI * 0.25 || this.rot > Math.PI * 1.75 || (this.rot > Math.PI * 0.75 && this.rot < Math.PI * 1.25));
this.childs = [];
var a = originalObject.spTree;
for (var i = 0; i < a.length; ++i) {
if (a[i].isGroup()) {
this.childs[i] = new ResizeTrackGroup(a[i], null, this);
} else {
this.childs[i] = new ShapeForResizeInGroup(a[i], this);
}
}
if (typeof numberHandle === "number") {
var _translated_num_handle;
var _flip_h = this.flipH;
var _flip_v = this.flipV;
var _sin = Math.sin(this.rot);
var _cos = Math.cos(this.rot);
var _half_width = this.extX * 0.5;
var _half_height = this.extY * 0.5;
if (!_flip_h && !_flip_v) {
_translated_num_handle = numberHandle;
} else {
if (_flip_h && !_flip_v) {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H[numberHandle];
} else {
if (!_flip_h && _flip_v) {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_V[numberHandle];
} else {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[numberHandle];
}
}
}
this.bAspect = numberHandle % 2 === 0;
this.aspect = this.bAspect === true ? this.original.getAspect(_translated_num_handle) : 0;
this.sin = _sin;
this.cos = _cos;
this.translatetNumberHandle = _translated_num_handle;
switch (_translated_num_handle) {
case 0:
case 1:
this.fixedPointX = (_half_width * _cos - _half_height * _sin) + _half_width + this.x;
this.fixedPointY = (_half_width * _sin + _half_height * _cos) + _half_height + this.y;
break;
case 2:
case 3:
this.fixedPointX = (-_half_width * _cos - _half_height * _sin) + _half_width + this.x;
this.fixedPointY = (-_half_width * _sin + _half_height * _cos) + _half_height + this.y;
break;
case 4:
case 5:
this.fixedPointX = (-_half_width * _cos + _half_height * _sin) + _half_width + this.x;
this.fixedPointY = (-_half_width * _sin - _half_height * _cos) + _half_height + this.y;
break;
case 6:
case 7:
this.fixedPointX = (_half_width * _cos + _half_height * _sin) + _half_width + this.x;
this.fixedPointY = (_half_width * _sin - _half_height * _cos) + _half_height + this.y;
break;
}
this.mod = this.translatetNumberHandle % 4;
this.centerPointX = this.x + _half_width;
this.centerPointY = this.y + _half_height;
this.lineFlag = false;
this.originalExtX = this.extX;
this.originalExtY = this.extY;
this.originalFlipH = _flip_h;
this.originalFlipV = _flip_v;
this.usedExtX = this.originalExtX === 0 ? (0.01) : this.originalExtX;
this.usedExtY = this.originalExtY === 0 ? (0.01) : this.originalExtY;
this.resizedExtX = this.originalExtX;
this.resizedExtY = this.originalExtY;
this.resizedflipH = _flip_h;
this.resizedflipV = _flip_v;
this.resizedPosX = this.x;
this.resizedPosY = this.y;
this.resizedRot = this.rot;
this.bChangeCoef = this.translatetNumberHandle % 2 === 0 && this.originalFlipH !== this.originalFlipV;
}
if (this.parentTrack) {
this.centerDistX = this.x + this.extX * 0.5 - this.parentTrack.extX * 0.5;
this.centerDistY = this.y + this.extY * 0.5 - this.parentTrack.extY * 0.5;
}
this.track = function (kd1, kd2, e) {
if (!e.CtrlKey) {
this.resize(kd1, kd2, e.ShiftKey);
} else {
this.resizeRelativeCenter(kd1, kd2, e.ShiftKey);
}
};
this.resize = function (kd1, kd2, ShiftKey) {
var _cos = this.cos;
var _sin = this.sin;
var _real_height, _real_width;
var _abs_height, _abs_width;
var _new_resize_half_width;
var _new_resize_half_height;
var _new_used_half_width;
var _new_used_half_height;
var _temp;
if (ShiftKey === true && this.bAspect === true) {
var _new_aspect = this.aspect * (Math.abs(kd1 / kd2));
if (_new_aspect >= this.aspect) {
kd2 = Math.abs(kd1) * (kd2 >= 0 ? 1 : -1);
} else {
kd1 = Math.abs(kd2) * (kd1 >= 0 ? 1 : -1);
}
}
if (this.bChangeCoef) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
switch (this.translatetNumberHandle) {
case 0:
case 1:
if (this.translatetNumberHandle === 0) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
}
if (this.translatetNumberHandle === 1) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width * _cos + _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width * _sin - _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 2:
case 3:
if (this.translatetNumberHandle === 2) {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
}
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width * _cos + _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width * _sin - _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 4:
case 5:
if (this.translatetNumberHandle === 4) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
} else {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width * _cos - _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width * _sin + _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 6:
case 7:
if (this.translatetNumberHandle === 6) {
_real_height = this.usedExtY * kd1;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
} else {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_width = this.usedExtX * kd2;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width * _cos - _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width * _sin + _new_used_half_height * _cos) - _new_resize_half_height;
break;
}
this.x = this.resizedPosX;
this.y = this.resizedPosY;
this.extX = this.resizedExtX;
this.extY = this.resizedExtY;
this.flipH = this.resizedflipH;
this.flipV = this.resizedflipV;
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX * 0.5;
var _vertical_center = this.resizedExtY * 0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if (this.resizedflipH) {
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if (this.resizedflipV) {
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
var xfrm = this.original.spPr.xfrm;
var kw = this.resizedExtX / xfrm.extX;
var kh = this.resizedExtY / xfrm.extY;
for (var i = 0; i < this.childs.length; ++i) {
var cur_child = this.childs[i];
cur_child.updateSize(kw, kh);
}
};
this.resizeRelativeCenter = function (kd1, kd2, ShiftKey) {
kd1 = 2 * kd1 - 1;
kd2 = 2 * kd2 - 1;
var _real_height, _real_width;
var _abs_height, _abs_width;
if (ShiftKey === true && this.bAspect === true) {
var _new_aspect = this.aspect * (Math.abs(kd1 / kd2));
if (_new_aspect >= this.aspect) {
kd2 = Math.abs(kd1) * (kd2 >= 0 ? 1 : -1);
} else {
kd1 = Math.abs(kd2) * (kd1 >= 0 ? 1 : -1);
}
}
var _temp;
if (this.bChangeCoef) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
if (this.mod === 0 || this.mod === 1) {
if (this.mod === 0) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
} else {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
} else {
if (this.mod === 2) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
}
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE || this.lineFlag ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
}
this.resizedPosX = this.centerPointX - this.resizedExtX * 0.5;
this.resizedPosY = this.centerPointY - this.resizedExtY * 0.5;
this.x = this.resizedPosX;
this.y = this.resizedPosY;
this.extX = this.resizedExtX;
this.extY = this.resizedExtY;
this.flipH = this.resizedflipH;
this.flipV = this.resizedflipV;
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX * 0.5;
var _vertical_center = this.resizedExtY * 0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if (this.resizedflipH) {
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if (this.resizedflipV) {
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
var xfrm = this.original.spPr.xfrm;
var kw = this.resizedExtX / xfrm.extX;
var kh = this.resizedExtY / xfrm.extY;
for (var i = 0; i < this.childs.length; ++i) {
this.childs[i].updateSize(kw, kh);
}
};
this.updateSize = function (kw, kh) {
var _kw, _kh;
if (this.bSwapCoef) {
_kw = kh;
_kh = kw;
} else {
_kw = kw;
_kh = kh;
}
var xfrm = this.original.spPr.xfrm;
this.extX = xfrm.extX * _kw;
this.extY = xfrm.extY * _kh;
this.x = this.centerDistX * kw + this.parentTrack.extX * 0.5 - this.extX * 0.5;
this.y = this.centerDistY * kh + this.parentTrack.extY * 0.5 - this.extY * 0.5;
this.transform.Reset();
var t = this.transform;
global_MatrixTransformer.TranslateAppend(t, -this.extX * 0.5, -this.extY * 0.5);
if (xfrm.flipH == null ? false : xfrm.flipH) {
global_MatrixTransformer.ScaleAppend(t, -1, 1);
}
if (xfrm.flipV == null ? false : xfrm.flipV) {
global_MatrixTransformer.ScaleAppend(t, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(t, xfrm.rot == null ? 0 : -xfrm.rot);
global_MatrixTransformer.TranslateAppend(t, this.x + this.extX * 0.5, this.y + this.extY * 0.5);
global_MatrixTransformer.MultiplyAppend(t, this.parentTrack.transform);
for (var i = 0; i < this.childs.length; ++i) {
this.childs[i].updateSize(_kw, _kh);
}
};
this.draw = function (graphics) {
for (var i = 0; i < this.childs.length; ++i) {
this.childs[i].draw(graphics);
}
};
this.getBoundsRect = function () {
var t = this.transform;
var min_x, max_x, min_y, max_y;
min_x = t.TransformPointX(0, 0);
max_x = min_x;
min_y = t.TransformPointY(0, 0);
max_y = min_y;
var arr = [{
x: this.extX,
y: 0
},
{
x: this.extX,
y: this.extY
},
{
x: 0,
y: this.extY
}];
var t_x, t_y;
for (var i = 0; i < arr.length; ++i) {
var p = arr[i];
t_x = t.TransformPointX(p.x, p.y);
t_y = t.TransformPointY(p.x, p.y);
if (t_x < min_x) {
min_x = t_x;
}
if (t_x > max_x) {
max_x = t_x;
}
if (t_y < min_y) {
min_y = t_y;
}
if (t_y > max_y) {
max_y = t_y;
}
}
return {
l: min_x,
t: min_y,
r: max_x,
b: max_y
};
};
this.trackEnd = function () {
if (!isRealObject(this.original.group)) {
this.original.normalize();
}
this.original.setOffset(this.x, this.y);
this.original.setExtents(this.extX, this.extY);
this.original.setChildExtents(this.extX, this.extY);
this.original.setFlips(this.flipH, this.flipV);
for (var i = 0; i < this.childs.length; ++i) {
this.childs[i].trackEnd();
}
};
}
function ShapeForResizeInGroup(originalObject, parentTrack) {
this.originalObject = originalObject;
this.parentTrack = parentTrack;
this.x = originalObject.x;
this.y = originalObject.y;
this.extX = originalObject.extX;
this.extY = originalObject.extY;
this.rot = originalObject.rot;
this.flipH = originalObject.flipH;
this.flipV = originalObject.flipV;
this.transform = originalObject.transform.CreateDublicate();
this.bSwapCoef = !(this.rot < Math.PI * 0.25 || this.rot > Math.PI * 1.75 || (this.rot > Math.PI * 0.75 && this.rot < Math.PI * 1.25));
this.centerDistX = this.x + this.extX * 0.5 - this.parentTrack.extX * 0.5;
this.centerDistY = this.y + this.extY * 0.5 - this.parentTrack.extY * 0.5;
this.geometry = originalObject.spPr.geometry !== null ? originalObject.spPr.geometry.createDuplicate() : null;
if (this.geometry) {
this.geometry.Recalculate(this.extX, this.extY);
}
this.overlayObject = new OverlayObject(this.geometry, this.extX, this.extY, originalObject.brush, originalObject.pen, this.transform);
this.updateSize = function (kw, kh) {
var _kw, _kh;
if (this.bSwapCoef) {
_kw = kh;
_kh = kw;
} else {
_kw = kw;
_kh = kh;
}
this.extX = this.originalObject.extX * _kw;
this.extY = this.originalObject.extY * _kh;
this.x = this.centerDistX * kw + this.parentTrack.extX * 0.5 - this.extX * 0.5;
this.y = this.centerDistY * kh + this.parentTrack.extY * 0.5 - this.extY * 0.5;
if (this.geometry) {
this.geometry.Recalculate(this.extX, this.extY);
}
this.transform.Reset();
var t = this.transform;
global_MatrixTransformer.TranslateAppend(t, -this.extX * 0.5, -this.extY * 0.5);
if (this.flipH) {
global_MatrixTransformer.ScaleAppend(t, -1, 1);
}
if (this.flipV) {
global_MatrixTransformer.ScaleAppend(t, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(t, -this.rot);
global_MatrixTransformer.TranslateAppend(t, this.x + this.extX * 0.5, this.y + this.extY * 0.5);
global_MatrixTransformer.MultiplyAppend(t, this.parentTrack.transform);
};
this.draw = function (overlay) {
this.overlayObject.draw(overlay);
};
this.getBounds = function () {
var bounds_checker = new CSlideBoundsChecker();
bounds_checker.init(Page_Width, Page_Height, Page_Width, Page_Height);
this.draw(bounds_checker);
return {
l: bounds_checker.Bounds.min_x,
t: bounds_checker.Bounds.min_y,
r: bounds_checker.Bounds.max_x,
b: bounds_checker.Bounds.max_y
};
};
this.trackEnd = function () {
this.originalObject.setOffset(this.x, this.y);
this.originalObject.setExtents(this.extX, this.extY);
if (this.originalObject.spPr.geometry !== null) {
this.originalObject.spPr.geometry.Recalculate(this.extX, this.extY);
}
};
this.updateTransform = function () {
this.transform.Reset();
var t = this.transform;
global_MatrixTransformer.TranslateAppend(t, -this.extX * 0.5, -this.extY * 0.5);
if (this.flipH) {
global_MatrixTransformer.ScaleAppend(t, -1, 1);
}
if (this.flipV) {
global_MatrixTransformer.ScaleAppend(t, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(t, -this.rot);
global_MatrixTransformer.TranslateAppend(t, this.x + this.extX * 0.5, this.y + this.extY * 0.5);
if (this.parentTrack) {
global_MatrixTransformer.MultiplyAppend(t, this.parentTrack.transform);
}
};
}
function ResizeTrackChart(originalObject, cardDirection) {
this.originalObject = originalObject;
this.numberHandle = originalObject.getNumByCardDirection(cardDirection);
var numberHandle = this.numberHandle;
this.flipH = false;
this.flipV = false;
var _flip_h = false;
var _flip_v = false;
var _half_height = originalObject.extY * 0.5;
var _half_width = originalObject.extX * 0.5;
var _sin = Math.sin(0);
var _cos = Math.cos(0);
var _translated_num_handle;
if (!_flip_h && !_flip_v) {
_translated_num_handle = numberHandle;
} else {
if (_flip_h && !_flip_v) {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H[numberHandle];
} else {
if (!_flip_h && _flip_v) {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_V[numberHandle];
} else {
_translated_num_handle = TRANSLATE_HANDLE_FLIP_H_AND_FLIP_V[numberHandle];
}
}
}
this.bAspect = numberHandle % 2 === 0;
this.aspect = this.bAspect === true ? this.originalObject.getAspect(_translated_num_handle) : 0;
this.sin = _sin;
this.cos = _cos;
this.translatetNumberHandle = _translated_num_handle;
switch (_translated_num_handle) {
case 0:
case 1:
this.fixedPointX = (_half_width * _cos - _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (_half_width * _sin + _half_height * _cos) + _half_height + originalObject.y;
break;
case 2:
case 3:
this.fixedPointX = (-_half_width * _cos - _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (-_half_width * _sin + _half_height * _cos) + _half_height + originalObject.y;
break;
case 4:
case 5:
this.fixedPointX = (-_half_width * _cos + _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (-_half_width * _sin - _half_height * _cos) + _half_height + originalObject.y;
break;
case 6:
case 7:
this.fixedPointX = (_half_width * _cos + _half_height * _sin) + _half_width + originalObject.x;
this.fixedPointY = (_half_width * _sin - _half_height * _cos) + _half_height + originalObject.y;
break;
}
this.mod = this.translatetNumberHandle % 4;
this.centerPointX = originalObject.x + _half_width;
this.centerPointY = originalObject.y + _half_height;
this.originalExtX = originalObject.extX;
this.originalExtY = originalObject.extY;
this.originalFlipH = _flip_h;
this.originalFlipV = _flip_v;
this.usedExtX = this.originalExtX === 0 ? (0.01) : this.originalExtX;
this.usedExtY = this.originalExtY === 0 ? (0.01) : this.originalExtY;
this.resizedExtX = this.originalExtX;
this.resizedExtY = this.originalExtY;
this.resizedflipH = _flip_h;
this.resizedflipV = _flip_v;
this.resizedPosX = originalObject.x;
this.resizedPosY = originalObject.y;
this.resizedRot = 0;
this.transform = originalObject.transform.CreateDublicate();
this.geometry = originalObject.spPr.geometry.createDuplicate();
this.brush = originalObject.brush;
this.pen = originalObject.pen;
this.geometry = CreateGeometry("rect");
this.geometry.Init(this.originalObject.extX, this.originalObject.extY);
this.geometry.Recalculate(this.originalObject.extX, this.originalObject.extY);
this.brush = new CUniFill();
this.brush.fill = new CSolidFill();
this.brush.fill.color = new CUniColor();
this.brush.fill.color.RGBA = {
R: 255,
G: 255,
B: 255,
A: 255
};
this.brush.fill.color.color = new CRGBColor();
this.brush.fill.color.color.RGBA = {
R: 255,
G: 255,
B: 255,
A: 255
};
this.pen = new CLn();
this.pen.Fill = new CUniFill();
this.pen.Fill.fill = new CSolidFill();
this.pen.Fill.fill.color = new CUniColor();
this.pen.Fill.fill.color.color = new CRGBColor();
this.bChangeCoef = this.translatetNumberHandle % 2 === 0 && this.originalFlipH !== this.originalFlipV;
this.overlayObject = new OverlayObject(this.geometry, this.resizedExtX, this.resizedExtY, this.brush, this.pen, this.transform);
this.track = function (kd1, kd2, e) {
if (!e.CtrlKey) {
this.resize(kd1, kd2, e.ShiftKey);
} else {
this.resizeRelativeCenter(kd1, kd2, e.ShiftKey);
}
};
this.resize = function (kd1, kd2, ShiftKey) {
var _cos = this.cos;
var _sin = this.sin;
var _real_height, _real_width;
var _abs_height, _abs_width;
var _new_resize_half_width;
var _new_resize_half_height;
var _new_used_half_width;
var _new_used_half_height;
var _temp;
if (ShiftKey === true && this.bAspect === true) {
var _new_aspect = this.aspect * (Math.abs(kd1 / kd2));
if (_new_aspect >= this.aspect) {
kd2 = Math.abs(kd1) * (kd2 >= 0 ? 1 : -1);
} else {
kd1 = Math.abs(kd2) * (kd1 >= 0 ? 1 : -1);
}
}
if (this.bChangeCoef) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
switch (this.translatetNumberHandle) {
case 0:
case 1:
if (this.translatetNumberHandle === 0) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
}
if (this.translatetNumberHandle === 1) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width * _cos + _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width * _sin - _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 2:
case 3:
if (this.translatetNumberHandle === 2) {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
}
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width * _cos + _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width * _sin - _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 4:
case 5:
if (this.translatetNumberHandle === 4) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
} else {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (_new_used_half_width * _cos - _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (_new_used_half_width * _sin + _new_used_half_height * _cos) - _new_resize_half_height;
break;
case 6:
case 7:
if (this.translatetNumberHandle === 6) {
_real_height = this.usedExtY * kd1;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : MIN_SHAPE_SIZE;
if (_real_height < 0) {
this.resizedflipV = !this.originalFlipV;
} else {
this.resizedflipV = this.originalFlipV;
}
} else {
_temp = kd2;
kd2 = kd1;
kd1 = _temp;
}
_real_width = this.usedExtX * kd2;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : MIN_SHAPE_SIZE;
if (_real_width < 0) {
this.resizedflipH = !this.originalFlipH;
} else {
this.resizedflipH = this.originalFlipH;
}
_new_resize_half_width = this.resizedExtX * 0.5;
_new_resize_half_height = this.resizedExtY * 0.5;
if (this.resizedflipH !== this.originalFlipH) {
_new_used_half_width = -_new_resize_half_width;
} else {
_new_used_half_width = _new_resize_half_width;
}
if (this.resizedflipV !== this.originalFlipV) {
_new_used_half_height = -_new_resize_half_height;
} else {
_new_used_half_height = _new_resize_half_height;
}
this.resizedPosX = this.fixedPointX + (-_new_used_half_width * _cos - _new_used_half_height * _sin) - _new_resize_half_width;
this.resizedPosY = this.fixedPointY + (-_new_used_half_width * _sin + _new_used_half_height * _cos) - _new_resize_half_height;
break;
}
this.geometry.Recalculate(this.resizedExtX, this.resizedExtY);
this.overlayObject.updateExtents(this.resizedExtX, this.resizedExtY);
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX * 0.5;
var _vertical_center = this.resizedExtY * 0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if (this.resizedflipH) {
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if (this.resizedflipV) {
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
};
this.resizeRelativeCenter = function (kd1, kd2, ShiftKey) {
kd1 = 2 * kd1 - 1;
kd2 = 2 * kd2 - 1;
var _real_height, _real_width;
var _abs_height, _abs_width;
if (ShiftKey === true && this.bAspect === true) {
var _new_aspect = this.aspect * (Math.abs(kd1 / kd2));
if (_new_aspect >= this.aspect) {
kd2 = Math.abs(kd1) * (kd2 >= 0 ? 1 : -1);
} else {
kd1 = Math.abs(kd2) * (kd1 >= 0 ? 1 : -1);
}
}
var _temp;
if (this.bChangeCoef) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
if (this.mod === 0 || this.mod === 1) {
if (this.mod === 0) {
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
} else {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
}
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
} else {
if (this.mod === 2) {
_temp = kd1;
kd1 = kd2;
kd2 = _temp;
_real_height = this.usedExtY * kd2;
_abs_height = Math.abs(_real_height);
this.resizedExtY = _abs_height >= MIN_SHAPE_SIZE ? _abs_height : MIN_SHAPE_SIZE;
this.resizedflipV = _real_height < 0 ? !this.originalFlipV : this.originalFlipV;
}
_real_width = this.usedExtX * kd1;
_abs_width = Math.abs(_real_width);
this.resizedExtX = _abs_width >= MIN_SHAPE_SIZE ? _abs_width : MIN_SHAPE_SIZE;
this.resizedflipH = _real_width < 0 ? !this.originalFlipH : this.originalFlipH;
}
this.resizedPosX = this.centerPointX - this.resizedExtX * 0.5;
this.resizedPosY = this.centerPointY - this.resizedExtY * 0.5;
this.geometry.Recalculate(this.resizedExtX, this.resizedExtY);
this.overlayObject.updateExtents(this.resizedExtX, this.resizedExtY);
var _transform = this.transform;
_transform.Reset();
var _horizontal_center = this.resizedExtX * 0.5;
var _vertical_center = this.resizedExtY * 0.5;
global_MatrixTransformer.TranslateAppend(_transform, -_horizontal_center, -_vertical_center);
if (this.resizedflipH) {
global_MatrixTransformer.ScaleAppend(_transform, -1, 1);
}
if (this.resizedflipV) {
global_MatrixTransformer.ScaleAppend(_transform, 1, -1);
}
global_MatrixTransformer.RotateRadAppend(_transform, -this.resizedRot);
global_MatrixTransformer.TranslateAppend(_transform, this.resizedPosX, this.resizedPosY);
global_MatrixTransformer.TranslateAppend(_transform, _horizontal_center, _vertical_center);
};
this.draw = function (overlay) {
this.overlayObject.draw(overlay);
};
this.getBounds = function () {
var bounds_checker = new CSlideBoundsChecker();
bounds_checker.init(Page_Width, Page_Height, Page_Width, Page_Height);
this.draw(bounds_checker);
return {
l: bounds_checker.Bounds.min_x,
t: bounds_checker.Bounds.min_y,
r: bounds_checker.Bounds.max_x,
b: bounds_checker.Bounds.max_y
};
};
this.getBoundsRect = function () {
var t = this.transform;
var max_x, min_x, max_y, min_y;
min_x = t.TransformPointX(0, 0);
max_x = min_x;
min_y = t.TransformPointY(0, 0);
max_y = min_y;
var arr = [{
x: this.resizedExtX,
y: 0
},
{
x: this.resizedExtX,
y: this.resizedExtY
},
{
x: 0,
y: this.resizedExtY
}];
var t_x, t_y;
for (var i = 0; i < arr.length; ++i) {
var p = arr[i];
t_x = t.TransformPointX(p.x, p.y);
t_y = t.TransformPointY(p.x, p.y);
if (t_x < min_x) {
min_x = t_x;
}
if (t_x > max_x) {
max_x = t_x;
}
if (t_y < min_y) {
min_y = t_y;
}
if (t_y > max_y) {
max_y = t_y;
}
}
return {
l: min_x,
t: min_y,
r: max_x,
b: max_y
};
};
this.trackEnd = function () {
this.originalObject.x = this.resizedPosX;
this.originalObject.y = this.resizedPosY;
this.originalObject.extX = this.resizedExtX;
this.originalObject.extY = this.resizedExtY;
this.originalObject.setOffset(this.resizedPosX, this.resizedPosY);
this.originalObject.setExtents(this.resizedExtX, this.resizedExtY);
};
}