4373 lines
149 KiB
JavaScript
4373 lines
149 KiB
JavaScript
/*
|
||
* (c) Copyright Ascensio System SIA 2010-2024
|
||
*
|
||
* 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 20A-6 Ernesta Birznieka-Upish
|
||
* street, Riga, Latvia, EU, LV-1050.
|
||
*
|
||
* 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
|
||
*
|
||
*/
|
||
|
||
"use strict";
|
||
|
||
// Import
|
||
var global_MatrixTransformer = AscCommon.global_MatrixTransformer;
|
||
var g_dKoef_mm_to_pix = AscCommon.g_dKoef_mm_to_pix;
|
||
|
||
function CCacheSlideImage()
|
||
{
|
||
this.Image = null;
|
||
this.SlideNum = -1;
|
||
this.Color = { r: 0, g: 0, b: 0};
|
||
}
|
||
CCacheSlideImage.prototype.Clear = function()
|
||
{
|
||
this.Image = null;
|
||
this.SlideNum = -1;
|
||
};
|
||
|
||
var __nextFrame = (function() {
|
||
return window.requestAnimationFrame ||
|
||
window.webkitRequestAnimationFrame ||
|
||
window.mozRequestAnimationFrame ||
|
||
window.oRequestAnimationFrame ||
|
||
window.msRequestAnimationFrame ||
|
||
function(callback) { return setTimeout(callback, 25); };
|
||
})();
|
||
|
||
var __cancelFrame = (function () {
|
||
return window.cancelAnimationFrame ||
|
||
window.cancelRequestAnimationFrame ||
|
||
window.webkitCancelAnimationFrame ||
|
||
window.webkitCancelRequestAnimationFrame ||
|
||
window.mozCancelRequestAnimationFrame ||
|
||
window.oCancelRequestAnimationFrame ||
|
||
window.msCancelRequestAnimationFrame ||
|
||
clearTimeout;
|
||
})();
|
||
|
||
function CTransitionAnimation(htmlpage)
|
||
{
|
||
this.HtmlPage = htmlpage;
|
||
|
||
this.Type = 0;
|
||
this.Param = 0;
|
||
this.Duration = 0;
|
||
|
||
this.StartTime = 0;
|
||
this.EndTime = 0;
|
||
this.CurrentTime = 0;
|
||
|
||
this.CacheImage1 = new CCacheSlideImage();
|
||
this.CacheImage2 = new CCacheSlideImage();
|
||
|
||
this.Rect = new AscCommon._rect();
|
||
this.Params = null;
|
||
this.Morph = null;
|
||
|
||
this.IsBackward = false;
|
||
this.DemonstrationObject = null;
|
||
|
||
this.TimerId = null;
|
||
var oThis = this;
|
||
|
||
this.CalculateRect = function()
|
||
{
|
||
// эта функция определяет, где находится рект для перехода
|
||
|
||
|
||
var _rect = editor.WordControl.m_oDrawingDocument.SlideCurrectRect;
|
||
|
||
this.Rect.x = AscCommon.AscBrowser.convertToRetinaValue(_rect.left, true);
|
||
this.Rect.y = AscCommon.AscBrowser.convertToRetinaValue(_rect.top, true);
|
||
this.Rect.w = AscCommon.AscBrowser.convertToRetinaValue(_rect.right - _rect.left, true);
|
||
this.Rect.h = AscCommon.AscBrowser.convertToRetinaValue(_rect.bottom - _rect.top, true);
|
||
};
|
||
|
||
this.CalculateRectDemonstration = function()
|
||
{
|
||
var _width = this.HtmlPage.DemonstrationManager.Canvas.width;
|
||
var _height = this.HtmlPage.DemonstrationManager.Canvas.height;
|
||
|
||
var _w_mm = this.HtmlPage.m_oLogicDocument.GetWidthMM();
|
||
var _h_mm = this.HtmlPage.m_oLogicDocument.GetHeightMM();
|
||
|
||
// проверим аспект
|
||
var aspectDisplay = _width / _height;
|
||
var aspectPres = _w_mm / _h_mm;
|
||
|
||
var _l = 0;
|
||
var _t = 0;
|
||
var _w = 0;
|
||
var _h = 0;
|
||
|
||
if (aspectPres > aspectDisplay)
|
||
{
|
||
_w = _width;
|
||
_h = _w / aspectPres;
|
||
_l = 0;
|
||
_t = (_height - _h) >> 1;
|
||
}
|
||
else
|
||
{
|
||
_h = _height;
|
||
_w = _h * aspectPres;
|
||
_t = 0;
|
||
_l = (_width - _w) >> 1;
|
||
}
|
||
|
||
this.Rect.x = _l >> 0;
|
||
this.Rect.y = _t >> 0;
|
||
this.Rect.w = _w >> 0;
|
||
this.Rect.h = _h >> 0;
|
||
};
|
||
|
||
this.SetBaseTransform = function()
|
||
{
|
||
if (this.DemonstrationObject == null)
|
||
{
|
||
var ctx1 = this.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
ctx1.setTransform(1, 0, 0, 1, 0, 0);
|
||
this.HtmlPage.m_oOverlayApi.SetBaseTransform();
|
||
}
|
||
else
|
||
{
|
||
var _ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.setTransform(1, 0, 0, 1, 0, 0);
|
||
|
||
var _ctx2 = oThis.DemonstrationObject.Overlay.getContext('2d');
|
||
_ctx2.setTransform(1, 0, 0, 1, 0, 0);
|
||
}
|
||
};
|
||
|
||
this.DrawImage = function(CacheImage, slide_num)
|
||
{
|
||
var _w = this.Rect.w;
|
||
var _h = this.Rect.h;
|
||
CacheImage.Image = this.CreateImage(_w, _h);
|
||
CacheImage.SlideNum = slide_num;
|
||
var oSlide = this.GetSlide(slide_num);
|
||
var oPlayer = oSlide.getAnimationPlayer();
|
||
|
||
// не кэшируем вотермарк никогда
|
||
let oldWatermark = this.HtmlPage.m_oApi.watermarkDraw;
|
||
this.HtmlPage.m_oApi.watermarkDraw = null;
|
||
oPlayer.drawFrame(CacheImage.Image, {x: 0, y: 0, w: _w, h: _h});
|
||
this.HtmlPage.m_oApi.watermarkDraw = oldWatermark;
|
||
};
|
||
|
||
this.DrawImage1 = function(slide_num, _not_use_prev)
|
||
{
|
||
if (undefined === slide_num)
|
||
{
|
||
if (null == this.DemonstrationObject)
|
||
{
|
||
slide_num = this.HtmlPage.m_oDrawingDocument.SlideCurrent;
|
||
if (slide_num >= this.GetSlidesCount())
|
||
slide_num = this.GetSlidesCount() - 1;
|
||
}
|
||
else
|
||
{
|
||
slide_num = this.DemonstrationObject.SlideNum;
|
||
if (slide_num >= this.GetSlidesCount())
|
||
slide_num = this.GetSlidesCount() - 1;
|
||
}
|
||
}
|
||
|
||
if (slide_num > 0 && (_not_use_prev !== true))
|
||
{
|
||
this.DrawImage(this.CacheImage1, slide_num - 1);
|
||
}
|
||
};
|
||
|
||
this.DrawImage2 = function(slide_num)
|
||
{
|
||
if (undefined === slide_num)
|
||
{
|
||
if (null == this.DemonstrationObject)
|
||
{
|
||
slide_num = this.HtmlPage.m_oDrawingDocument.SlideCurrent;
|
||
if (slide_num >= this.GetSlidesCount())
|
||
slide_num = this.GetSlidesCount() - 1;
|
||
}
|
||
else
|
||
{
|
||
slide_num = this.DemonstrationObject.SlideNum;
|
||
if (slide_num >= this.GetSlidesCount())
|
||
slide_num = this.GetSlidesCount() - 1;
|
||
}
|
||
}
|
||
|
||
if (slide_num >= 0)
|
||
{
|
||
this.DrawImage(this.CacheImage2, slide_num);
|
||
}
|
||
};
|
||
|
||
this.GetPresentation = function ()
|
||
{
|
||
return Asc.editor.private_GetLogicDocument();
|
||
};
|
||
|
||
this.GetSlide = function(nIdx)
|
||
{
|
||
let oPresentation = this.GetPresentation();
|
||
if(oPresentation)
|
||
{
|
||
return oPresentation.Slides[nIdx];
|
||
}
|
||
return null;
|
||
};
|
||
this.GetSlidesCount = function()
|
||
{
|
||
let oPresentation = this.GetPresentation();
|
||
if(oPresentation)
|
||
{
|
||
return oPresentation.Slides.length;
|
||
}
|
||
return 0;
|
||
};
|
||
|
||
this.StopIfPlaying = function()
|
||
{
|
||
if (this.IsPlaying())
|
||
{
|
||
__cancelFrame(this.TimerId);
|
||
this.TimerId = null;
|
||
}
|
||
};
|
||
|
||
this.Start = function(isButtonPreview, endCallback)
|
||
{
|
||
this.endCallback = endCallback
|
||
this.StopIfPlaying();
|
||
|
||
if (true == isButtonPreview)
|
||
{
|
||
this.CalculateRect();
|
||
|
||
var _currentSlide = 0;
|
||
if (null == this.DemonstrationObject)
|
||
{
|
||
_currentSlide = this.HtmlPage.m_oDrawingDocument.SlideCurrent;
|
||
if (_currentSlide >= this.GetSlidesCount())
|
||
_currentSlide = this.GetSlidesCount() - 1;
|
||
}
|
||
else
|
||
{
|
||
_currentSlide = this.DemonstrationObject.GetPrevVisibleSlide(true);
|
||
}
|
||
|
||
this.DrawImage1(_currentSlide, false);
|
||
this.DrawImage2(_currentSlide);
|
||
}
|
||
|
||
this.StartTime = new Date().getTime();
|
||
this.EndTime = this.StartTime + this.Duration;
|
||
|
||
const nType = this.Type;
|
||
switch (nType)
|
||
{
|
||
case c_oAscSlideTransitionTypes.Fade:
|
||
{
|
||
this._startFade();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionTypes.Push:
|
||
{
|
||
this._startPush();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionTypes.Wipe:
|
||
{
|
||
this._startWipe();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionTypes.Split:
|
||
{
|
||
this._startSplit();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionTypes.UnCover:
|
||
{
|
||
this._startUnCover();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionTypes.Cover:
|
||
{
|
||
this._startCover();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionTypes.Clock:
|
||
{
|
||
this._startClock();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionTypes.Zoom:
|
||
{
|
||
this._startZoom();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionTypes.Morph:
|
||
{
|
||
this._startMorph();
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
this.End(true);
|
||
break;
|
||
}
|
||
}
|
||
};
|
||
|
||
this.End = function(bIsAttack)
|
||
{
|
||
if (bIsAttack === true && null != this.TimerId)
|
||
__cancelFrame(this.TimerId);
|
||
|
||
this.TimerId = null;
|
||
this.Params = null;
|
||
if(this.Morph)
|
||
{
|
||
this.Morph.end();
|
||
this.Morph = null;
|
||
}
|
||
|
||
if (this.endCallback)
|
||
this.endCallback()
|
||
|
||
if (this.DemonstrationObject != null)
|
||
{
|
||
this.DemonstrationObject.OnEndTransition(bIsAttack);
|
||
|
||
this.CacheImage1.Clear();
|
||
this.CacheImage2.Clear();
|
||
return;
|
||
}
|
||
|
||
this.CacheImage1.Clear();
|
||
this.CacheImage2.Clear();
|
||
|
||
var ctx1 = this.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
ctx1.setTransform(1, 0, 0, 1, 0, 0);
|
||
this.HtmlPage.OnScroll();
|
||
|
||
};
|
||
|
||
this.IsPlaying = function()
|
||
{
|
||
return (null != this.TimerId) ? true : false;
|
||
};
|
||
|
||
this.CreateImage = function(w, h)
|
||
{
|
||
var _im = document.createElement('canvas');
|
||
_im.width = w;
|
||
_im.height = h;
|
||
return _im;
|
||
};
|
||
|
||
this.OnAfterAnimationDraw = function()
|
||
{
|
||
this.HtmlPage.DemonstrationManager.CheckWatermark(this);
|
||
};
|
||
|
||
// animations
|
||
this._startFade = function()
|
||
{
|
||
oThis.CurrentTime = new Date().getTime();
|
||
|
||
if (oThis.CurrentTime >= oThis.EndTime)
|
||
{
|
||
oThis.End(false);
|
||
return;
|
||
}
|
||
|
||
oThis.SetBaseTransform();
|
||
|
||
if (oThis.TimerId === null)
|
||
{
|
||
oThis.Params = { IsFirstAfterHalf : true };
|
||
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
|
||
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage1.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx1.beginPath();
|
||
}
|
||
}
|
||
|
||
var _ctx2 = null;
|
||
if (oThis.DemonstrationObject == null)
|
||
{
|
||
oThis.HtmlPage.m_oOverlayApi.Clear();
|
||
oThis.HtmlPage.m_oOverlayApi.CheckRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
|
||
_ctx2 = oThis.HtmlPage.m_oOverlayApi.m_oContext;
|
||
}
|
||
else
|
||
{
|
||
_ctx2 = oThis.DemonstrationObject.Overlay.getContext('2d');
|
||
_ctx2.clearRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
|
||
let _part = oThis._getPart();
|
||
|
||
if (oThis.Param == c_oAscSlideTransitionParams.Fade_Smoothly)
|
||
{
|
||
_ctx2.globalAlpha = _part;
|
||
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage2.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx2.beginPath();
|
||
}
|
||
|
||
_ctx2.globalAlpha = 1;
|
||
}
|
||
else if (oThis.Param == c_oAscSlideTransitionParams.Fade_Through_Black)
|
||
{
|
||
if (!oThis.IsBackward)
|
||
{
|
||
if (oThis.Params.IsFirstAfterHalf)
|
||
{
|
||
if (_part > 0.5)
|
||
{
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
}
|
||
|
||
_ctx1.fillStyle = "rgb(0,0,0)";
|
||
_ctx1.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx1.beginPath();
|
||
|
||
oThis.Params.IsFirstAfterHalf = false;
|
||
}
|
||
}
|
||
|
||
if (oThis.Params.IsFirstAfterHalf)
|
||
{
|
||
_ctx2.globalAlpha = (2 * _part);
|
||
_ctx2.fillStyle = "rgb(0,0,0)";
|
||
_ctx2.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx2.beginPath();
|
||
}
|
||
else
|
||
{
|
||
_ctx2.globalAlpha = (2 * (_part - 0.5));
|
||
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage2.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx2.beginPath();
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (oThis.Params.IsFirstAfterHalf)
|
||
{
|
||
if (_part < 0.5)
|
||
{
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
}
|
||
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage1.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx1.beginPath();
|
||
}
|
||
|
||
oThis.Params.IsFirstAfterHalf = false;
|
||
}
|
||
}
|
||
|
||
if (!oThis.Params.IsFirstAfterHalf)
|
||
{
|
||
_ctx2.globalAlpha = (2 * _part);
|
||
_ctx2.fillStyle = "rgb(0,0,0)";
|
||
_ctx2.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx2.beginPath();
|
||
}
|
||
else
|
||
{
|
||
_ctx2.globalAlpha = (2 * (_part - 0.5));
|
||
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage2.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx2.beginPath();
|
||
}
|
||
}
|
||
}
|
||
|
||
_ctx2.globalAlpha = 1;
|
||
}
|
||
|
||
oThis.TimerId = __nextFrame(oThis._startFade);
|
||
oThis.OnAfterAnimationDraw();
|
||
};
|
||
|
||
this._startPush = function()
|
||
{
|
||
oThis.CurrentTime = new Date().getTime();
|
||
|
||
if (oThis.CurrentTime >= oThis.EndTime)
|
||
{
|
||
oThis.End(false);
|
||
return;
|
||
}
|
||
|
||
oThis.SetBaseTransform();
|
||
|
||
var _xDst = oThis.Rect.x;
|
||
var _yDst = oThis.Rect.y;
|
||
var _wDst = oThis.Rect.w;
|
||
var _hDst = oThis.Rect.h;
|
||
|
||
if (oThis.TimerId === null)
|
||
{
|
||
oThis.Params = { IsFirstAfterHalf : true };
|
||
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
var _ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
var _ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
}
|
||
|
||
var _xSrc = 0;
|
||
var _ySrc = 0;
|
||
|
||
var _xDstO = oThis.Rect.x;
|
||
var _yDstO = oThis.Rect.y;
|
||
var _wDstO = oThis.Rect.w;
|
||
var _hDstO = oThis.Rect.h;
|
||
|
||
var _xSrcO = 0;
|
||
var _ySrcO = 0;
|
||
|
||
|
||
let _part = oThis._getPart();
|
||
|
||
var _offX = (_wDst * (1 - _part)) >> 0;
|
||
var _offY = (_hDst * (1 - _part)) >> 0;
|
||
|
||
switch (oThis.Param)
|
||
{
|
||
case c_oAscSlideTransitionParams.Param_Left:
|
||
{
|
||
_xSrc = _offX;
|
||
_wDst -= _offX;
|
||
|
||
_xDstO += _wDst;
|
||
_wDstO -= _wDst;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Right:
|
||
{
|
||
_xDst += _offX;
|
||
_wDst -= _offX;
|
||
|
||
_xSrcO = _wDst;
|
||
_wDstO -= _wDst;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Top:
|
||
{
|
||
_ySrc = _offY;
|
||
_hDst -= _offY;
|
||
|
||
_yDstO += _hDst;
|
||
_hDstO -= _hDst;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Bottom:
|
||
{
|
||
_yDst += _offY;
|
||
_hDst -= _offY;
|
||
|
||
_ySrcO = _hDst;
|
||
_hDstO -= _hDst;
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
|
||
var _ctx2 = null;
|
||
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
oThis.HtmlPage.m_oOverlayApi.Clear();
|
||
oThis.HtmlPage.m_oOverlayApi.CheckRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx2 = oThis.HtmlPage.m_oOverlayApi.m_oContext;
|
||
}
|
||
else
|
||
{
|
||
_ctx2 = oThis.DemonstrationObject.Overlay.getContext('2d');
|
||
}
|
||
|
||
if (_wDstO > 0 && _hDstO > 0)
|
||
{
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage1.Image, _xSrcO, _ySrcO, _wDstO, _hDstO, _xDstO, _yDstO, _wDstO, _hDstO);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(_xDstO, _yDstO, _wDstO, _hDstO);
|
||
_ctx2.beginPath();
|
||
}
|
||
}
|
||
|
||
if (_wDst > 0 && _hDst > 0)
|
||
{
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage2.Image, _xSrc, _ySrc, _wDst, _hDst, _xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.beginPath();
|
||
}
|
||
}
|
||
|
||
oThis.TimerId = __nextFrame(oThis._startPush);
|
||
oThis.OnAfterAnimationDraw();
|
||
};
|
||
|
||
this._startWipe = function()
|
||
{
|
||
oThis.CurrentTime = new Date().getTime();
|
||
|
||
if (oThis.CurrentTime >= oThis.EndTime)
|
||
{
|
||
oThis.End(false);
|
||
return;
|
||
}
|
||
|
||
oThis.SetBaseTransform();
|
||
|
||
if (oThis.TimerId === null)
|
||
{
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage1.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx1.beginPath();
|
||
}
|
||
}
|
||
|
||
var _xDst = oThis.Rect.x;
|
||
var _yDst = oThis.Rect.y;
|
||
var _wDst = oThis.Rect.w;
|
||
var _hDst = oThis.Rect.h;
|
||
|
||
|
||
let _part = oThis._getPart();
|
||
|
||
var _ctx2 = null;
|
||
if (oThis.DemonstrationObject == null)
|
||
{
|
||
oThis.HtmlPage.m_oOverlayApi.Clear();
|
||
oThis.HtmlPage.m_oOverlayApi.CheckRect(_xDst, _yDst, _wDst, _hDst);
|
||
|
||
_ctx2 = oThis.HtmlPage.m_oOverlayApi.m_oContext;
|
||
}
|
||
else
|
||
{
|
||
_ctx2 = oThis.DemonstrationObject.Overlay.getContext('2d');
|
||
_ctx2.clearRect(_xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
|
||
var _koefWipeLen = 1;
|
||
|
||
switch (oThis.Param)
|
||
{
|
||
case c_oAscSlideTransitionParams.Param_Left:
|
||
{
|
||
if (null == oThis.TimerId)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
_canvasTmp.width = 256;
|
||
_canvasTmp.height = 1;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(256, 1);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = 255 - i;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _xPosStart = (_xDst - _koefWipeLen * _wDst) >> 0;
|
||
var _xPos = (_xPosStart + (_part * (1 + _koefWipeLen) * _wDst)) >> 0;
|
||
var _gradW = (_koefWipeLen * _wDst) >> 0;
|
||
|
||
if (_xPos > _xDst)
|
||
{
|
||
if ((_xPos + _gradW) > (_xDst + _wDst))
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xDst, _yDst, _xPos - _xDst + 1, _hDst);
|
||
_ctx2.beginPath();
|
||
|
||
var _srcImageW = (256 * (_wDst - _xPos + _xDst) / _gradW) >> 0;
|
||
if (_srcImageW > 0 && (_wDst - _xPos + _xDst) > 0)
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, _srcImageW, 1, _xPos, _yDst, _wDst - _xPos + _xDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xDst, _yDst, _xPos - _xDst + 1, _hDst);
|
||
_ctx2.beginPath();
|
||
|
||
if (_gradW > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, _xPos, _yDst, _gradW, _hDst);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _srcImageW = _xPos + _gradW - _xDst;
|
||
var _srcImageWW = 256 * (_xPos + _gradW - _xDst) / _gradW;
|
||
|
||
if (_srcImageW > 0 && _srcImageWW > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, 256 - _srcImageWW, 0, _srcImageWW, 1, _xDst, _yDst, _srcImageW, _hDst);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Right:
|
||
{
|
||
if (null == oThis.TimerId)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
_canvasTmp.width = 256;
|
||
_canvasTmp.height = 1;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(256, 1);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = i;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _rDst = _xDst + _wDst;
|
||
|
||
var _xPosStart = (_rDst + _koefWipeLen * _wDst) >> 0;
|
||
var _xPos = (_xPosStart - (_part * (1 + _koefWipeLen) * _wDst)) >> 0;
|
||
var _gradW = (_koefWipeLen * _wDst) >> 0;
|
||
|
||
if (_xPos < _rDst)
|
||
{
|
||
if ((_xPos - _gradW) < _xDst)
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xPos, _yDst, _rDst - _xPos, _hDst);
|
||
_ctx2.beginPath();
|
||
|
||
var _srcImageW = (256 * (_xDst - _xPos + _gradW) / _gradW) >> 0;
|
||
if (_srcImageW > 0 && (_xPos - _xDst) > 0)
|
||
_ctx2.drawImage(oThis.Params.GradImage, _srcImageW, 0, 256 - _srcImageW, 1, _xDst, _yDst, _xPos - _xDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xPos, _yDst, _rDst - _xPos + 1, _hDst);
|
||
_ctx2.beginPath();
|
||
|
||
if (_gradW > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, _xPos - _gradW, _yDst, _gradW, _hDst);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _gradWW = _xPosStart - _xPos;
|
||
if (_gradWW > 0)
|
||
{
|
||
var _srcImageW = 256 * _gradWW / _gradW;
|
||
|
||
if (_srcImageW > 0 && (_rDst - _xPos + _gradW) > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, _srcImageW, 1, _xPos - _gradW, _yDst, _rDst - _xPos + _gradW, _hDst);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Top:
|
||
{
|
||
if (null == oThis.TimerId)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
_canvasTmp.width = 1;
|
||
_canvasTmp.height = 256;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(1, 256);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = 255 - i;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _yPosStart = (_yDst - _koefWipeLen * _hDst) >> 0;
|
||
var _yPos = (_yPosStart + (_part * (1 + _koefWipeLen) * _hDst)) >> 0;
|
||
var _gradH = (_koefWipeLen * _hDst) >> 0;
|
||
|
||
if (_yPos > _yDst)
|
||
{
|
||
if ((_yPos + _gradH) > (_yDst + _hDst))
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _yPos - _yDst + 1);
|
||
_ctx2.beginPath();
|
||
|
||
var _srcImageH = (256 * (_hDst - _yPos + _yDst) / _gradH) >> 0;
|
||
if (_srcImageH > 0 && (_hDst - _yPos + _yDst) > 0)
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 1, _srcImageH, _xDst, _yPos, _wDst, _hDst - _yPos + _yDst);
|
||
}
|
||
else
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _yPos - _yDst + 1);
|
||
_ctx2.beginPath();
|
||
|
||
if (_gradH > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, _xDst, _yPos, _wDst, _gradH);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _srcImageH = _yPos + _gradH - _yDst;
|
||
var _srcImageHH = 256 * (_yPos + _gradH - _yDst) / _gradH;
|
||
|
||
if (_srcImageH > 0 && _srcImageHH > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 256 - _srcImageHH, 1, _srcImageHH, _xDst, _yDst, _wDst, _srcImageH);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Bottom:
|
||
{
|
||
if (null == oThis.TimerId)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
_canvasTmp.width = 1;
|
||
_canvasTmp.height = 256;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(1, 256);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = i;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _bDst = _yDst + _hDst;
|
||
var _yPosStart = (_bDst + _koefWipeLen * _hDst) >> 0;
|
||
var _yPos = (_yPosStart - (_part * (1 + _koefWipeLen) * _hDst)) >> 0;
|
||
var _gradH = (_koefWipeLen * _hDst) >> 0;
|
||
|
||
if (_yPos < _bDst)
|
||
{
|
||
if ((_yPos - _gradH) < _yDst)
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xDst, _yPos, _wDst, _bDst - _yPos);
|
||
_ctx2.beginPath();
|
||
|
||
var _srcImageH = (256 * (_yPos - _yDst) / _gradH) >> 0;
|
||
if (_srcImageH > 0 && (_yPos - _yDst) > 0)
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 256 - _srcImageH, 1, _srcImageH, _xDst, _yDst, _wDst, _yPos - _yDst);
|
||
}
|
||
else
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xDst, _yPos, _wDst, _bDst - _yPos);
|
||
_ctx2.beginPath();
|
||
|
||
if (_gradH > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, _xDst, _yPos - _gradH, _wDst, _gradH);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _srcImageH = _bDst - (_yPos - _gradH);
|
||
var _srcImageHH = 256 * _srcImageH / _gradH;
|
||
|
||
if (_srcImageH > 0 && _srcImageHH > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 1, _srcImageHH, _xDst, _bDst - _srcImageH, _wDst, _srcImageH);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_TopLeft:
|
||
{
|
||
if (null == oThis.TimerId)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
_canvasTmp.width = 256;
|
||
_canvasTmp.height = 1;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(256, 1);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = 255 - i;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _ang = Math.atan(_hDst / _wDst);
|
||
var _sin = Math.sin(_ang);
|
||
var _cos = Math.cos(_ang);
|
||
|
||
var _hDstN2 = _wDst * _sin;
|
||
var _hDstN = 2 * _hDstN2;
|
||
var _wDstN = _wDst * _cos + _hDst * _sin;
|
||
|
||
var _e_off_x = -_sin;
|
||
var _e_off_y = -_cos;
|
||
|
||
var _gradW = (_koefWipeLen * _hDstN) >> 0;
|
||
|
||
var _cX = _xDst + _wDst / 2;
|
||
var _cY = _yDst + _hDst / 2;
|
||
var _cStartX = _cX + (_hDstN2 + _gradW / 2) * _e_off_x;
|
||
var _cStartY = _cY + (_hDstN2 + _gradW / 2) * _e_off_y;
|
||
|
||
var _cPosX = _cStartX - _e_off_x * _part * (_gradW + _hDstN);
|
||
var _cPosY = _cStartY - _e_off_y * _part * (_gradW + _hDstN);
|
||
|
||
_ctx2.save();
|
||
_ctx2.beginPath();
|
||
_ctx2.rect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.clip();
|
||
_ctx2.beginPath();
|
||
|
||
_ctx2.translate(_cPosX, _cPosY);
|
||
_ctx2.rotate(Math.PI/2 - _ang);
|
||
|
||
// потом расчитать точнее!!!
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(-_hDstN2 - _gradW, -_wDstN / 2, _gradW, _wDstN);
|
||
_ctx2.beginPath();
|
||
|
||
_ctx2.drawImage(oThis.Params.GradImage, -_hDstN2, -_wDstN / 2, _hDstN, _wDstN);
|
||
|
||
_ctx2.restore();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_TopRight:
|
||
{
|
||
if (null == oThis.TimerId)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
_canvasTmp.width = 256;
|
||
_canvasTmp.height = 1;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(256, 1);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = i;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _ang = Math.atan(_hDst / _wDst);
|
||
var _sin = Math.sin(_ang);
|
||
var _cos = Math.cos(_ang);
|
||
|
||
var _wDstN2 = _wDst * _sin;
|
||
var _wDstN = 2 * _wDstN2;
|
||
var _hDstN = _wDst * _cos + _hDst * _sin;
|
||
|
||
var _e_off_x = _sin;
|
||
var _e_off_y = -_cos;
|
||
|
||
var _gradW = (_koefWipeLen * _wDstN) >> 0;
|
||
|
||
var _cX = _xDst + _wDst / 2;
|
||
var _cY = _yDst + _hDst / 2;
|
||
var _cStartX = _cX + (_wDstN2 + _gradW / 2) * _e_off_x;
|
||
var _cStartY = _cY + (_wDstN2 + _gradW / 2) * _e_off_y;
|
||
|
||
var _cPosX = _cStartX - _e_off_x * _part * (_gradW + _wDstN);
|
||
var _cPosY = _cStartY - _e_off_y * _part * (_gradW + _wDstN);
|
||
|
||
_ctx2.save();
|
||
_ctx2.beginPath();
|
||
_ctx2.rect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.clip();
|
||
_ctx2.beginPath();
|
||
|
||
_ctx2.translate(_cPosX, _cPosY);
|
||
_ctx2.rotate(_ang - Math.PI / 2);
|
||
|
||
// потом расчитать точнее!!!
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_wDstN2, -_hDstN / 2, _gradW, _hDstN);
|
||
_ctx2.beginPath();
|
||
|
||
_ctx2.drawImage(oThis.Params.GradImage, -_wDstN2, -_hDstN / 2, _wDstN, _hDstN);
|
||
|
||
_ctx2.restore();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_BottomLeft:
|
||
{
|
||
if (null == oThis.TimerId)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
_canvasTmp.width = 256;
|
||
_canvasTmp.height = 1;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(256, 1);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = 255 - i;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _ang = Math.atan(_hDst / _wDst);
|
||
var _sin = Math.sin(_ang);
|
||
var _cos = Math.cos(_ang);
|
||
|
||
var _wDstN2 = _wDst * _sin;
|
||
var _wDstN = 2 * _wDstN2;
|
||
var _hDstN = _wDst * _cos + _hDst * _sin;
|
||
|
||
var _e_off_x = _sin;
|
||
var _e_off_y = -_cos;
|
||
|
||
var _gradW = (_koefWipeLen * _wDstN) >> 0;
|
||
|
||
var _cX = _xDst + _wDst / 2;
|
||
var _cY = _yDst + _hDst / 2;
|
||
var _cStartX = _cX - (_wDstN2 + _gradW / 2) * _e_off_x;
|
||
var _cStartY = _cY - (_wDstN2 + _gradW / 2) * _e_off_y;
|
||
|
||
var _cPosX = _cStartX + _e_off_x * _part * (_gradW + _wDstN);
|
||
var _cPosY = _cStartY + _e_off_y * _part * (_gradW + _wDstN);
|
||
|
||
_ctx2.save();
|
||
_ctx2.beginPath();
|
||
_ctx2.rect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.clip();
|
||
_ctx2.beginPath();
|
||
|
||
_ctx2.translate(_cPosX, _cPosY);
|
||
_ctx2.rotate(_ang - Math.PI / 2);
|
||
|
||
// потом расчитать точнее!!!
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(-_wDstN2 - _gradW, -_hDstN / 2, _gradW, _hDstN);
|
||
_ctx2.beginPath();
|
||
|
||
_ctx2.drawImage(oThis.Params.GradImage, -_wDstN2, -_hDstN / 2, _wDstN, _hDstN);
|
||
|
||
_ctx2.restore();
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_BottomRight:
|
||
{
|
||
if (null == oThis.TimerId)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
_canvasTmp.width = 256;
|
||
_canvasTmp.height = 1;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(256, 1);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = i;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _ang = Math.atan(_hDst / _wDst);
|
||
var _sin = Math.sin(_ang);
|
||
var _cos = Math.cos(_ang);
|
||
|
||
var _hDstN2 = _wDst * _sin;
|
||
var _hDstN = 2 * _hDstN2;
|
||
var _wDstN = _wDst * _cos + _hDst * _sin;
|
||
|
||
var _e_off_x = _sin;
|
||
var _e_off_y = _cos;
|
||
|
||
var _gradW = (_koefWipeLen * _hDstN) >> 0;
|
||
|
||
var _cX = _xDst + _wDst / 2;
|
||
var _cY = _yDst + _hDst / 2;
|
||
var _cStartX = _cX + (_hDstN2 + _gradW / 2) * _e_off_x;
|
||
var _cStartY = _cY + (_hDstN2 + _gradW / 2) * _e_off_y;
|
||
|
||
var _cPosX = _cStartX - _e_off_x * _part * (_gradW + _hDstN);
|
||
var _cPosY = _cStartY - _e_off_y * _part * (_gradW + _hDstN);
|
||
|
||
_ctx2.save();
|
||
_ctx2.beginPath();
|
||
_ctx2.rect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.clip();
|
||
_ctx2.beginPath();
|
||
|
||
_ctx2.translate(_cPosX, _cPosY);
|
||
_ctx2.rotate(Math.PI/2 - _ang);
|
||
|
||
// потом расчитать точнее!!!
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_hDstN2, -_wDstN / 2, _gradW, _wDstN);
|
||
_ctx2.beginPath();
|
||
|
||
_ctx2.drawImage(oThis.Params.GradImage, -_hDstN2, -_wDstN / 2, _hDstN, _wDstN);
|
||
|
||
_ctx2.restore();
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
|
||
_ctx2.globalCompositeOperation = "source-atop";
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage2.Image, _xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.beginPath();
|
||
}
|
||
|
||
_ctx2.globalCompositeOperation = "source-over";
|
||
|
||
oThis.TimerId = __nextFrame(oThis._startWipe);
|
||
oThis.OnAfterAnimationDraw();
|
||
};
|
||
|
||
this._startSplit = function()
|
||
{
|
||
oThis.CurrentTime = new Date().getTime();
|
||
|
||
if (oThis.CurrentTime >= oThis.EndTime)
|
||
{
|
||
oThis.End(false);
|
||
return;
|
||
}
|
||
|
||
oThis.SetBaseTransform();
|
||
|
||
var _xDst = oThis.Rect.x;
|
||
var _yDst = oThis.Rect.y;
|
||
var _wDst = oThis.Rect.w;
|
||
var _hDst = oThis.Rect.h;
|
||
|
||
|
||
let _part = oThis._getPart();
|
||
|
||
var _ctx2 = null;
|
||
if (oThis.DemonstrationObject == null)
|
||
{
|
||
oThis.HtmlPage.m_oOverlayApi.Clear();
|
||
oThis.HtmlPage.m_oOverlayApi.CheckRect(_xDst, _yDst, _wDst, _hDst);
|
||
|
||
_ctx2 = oThis.HtmlPage.m_oOverlayApi.m_oContext;
|
||
}
|
||
else
|
||
{
|
||
_ctx2 = oThis.DemonstrationObject.Overlay.getContext('2d');
|
||
_ctx2.clearRect(_xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
|
||
if (oThis.TimerId === null)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage1.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx1.beginPath();
|
||
}
|
||
}
|
||
|
||
var _koefWipeLen = 1;
|
||
|
||
switch (oThis.Param)
|
||
{
|
||
case c_oAscSlideTransitionParams.Split_VerticalOut:
|
||
{
|
||
if (oThis.TimerId === null)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
var __w = 256 + 255;
|
||
_canvasTmp.width = __w;
|
||
_canvasTmp.height = 1;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(_canvasTmp.width, 1);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = i;
|
||
for (var i = 256; i < __w; i++)
|
||
_data.data[4 * i + 3] = __w - i - 1;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _cX = _xDst + _wDst / 2;
|
||
|
||
if (_part <= 0.5)
|
||
{
|
||
var _w = (_part * 2 * _wDst) >> 0;
|
||
var _w2 = _w >> 1;
|
||
|
||
if (_w > 0 && _w2 > 0)
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(Math.max(_xDst, _cX - _w2 / 2 - 1), _yDst, Math.min(_w2 + 2, _wDst), _hDst);
|
||
_ctx2.beginPath();
|
||
|
||
var _w4 = _w2 >> 1;
|
||
var _x = _cX - _w2;
|
||
var _r = _cX + _w4;
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 255, 1, _x, _yDst, _w4, _hDst);
|
||
_ctx2.drawImage(oThis.Params.GradImage, 255, 0, 255, 1, _r, _yDst, _w4, _hDst);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _w = (_part * _wDst) >> 0;
|
||
var _w2 = _w >> 1;
|
||
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(Math.max(_xDst, _cX - _w2 - 1), _yDst, Math.min(_w + 2, _wDst), _hDst);
|
||
_ctx2.beginPath();
|
||
|
||
var _gradWW = (_wDst - _w) >> 1;
|
||
var _gradW = (_wDst / 4) >> 0;
|
||
|
||
var _srcOff = 256 * _gradWW / _gradW;
|
||
if (_gradWW > 0)
|
||
{
|
||
//_ctx2.drawImage(oThis.Params.GradImage, 256 - _srcOff, 0, _srcOff, 1, _xDst, _yDst, _gradWW, _hDst);
|
||
//_ctx2.drawImage(oThis.Params.GradImage, 255, 0, _srcOff, 1, _cX + _w2, _yDst, _gradWW, _hDst);
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 255, 1, _xDst, _yDst, _gradWW, _hDst);
|
||
_ctx2.drawImage(oThis.Params.GradImage, 255, 0, 255, 1, _cX + _w2, _yDst, _gradWW, _hDst);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Split_VerticalIn:
|
||
{
|
||
if (oThis.TimerId === null)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
var __w = 256 + 255;
|
||
_canvasTmp.width = __w;
|
||
_canvasTmp.height = 1;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(_canvasTmp.width, 1);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = i;
|
||
for (var i = 256; i < __w; i++)
|
||
_data.data[4 * i + 3] = __w - i - 1;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _cX = _xDst + _wDst / 2;
|
||
|
||
if (_part <= 0.5)
|
||
{
|
||
var _w = (_part * 2 * _wDst) >> 0;
|
||
var _w2 = _w >> 1;
|
||
var _w4 = _w2 >> 1;
|
||
|
||
if (_w4 > 0)
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
|
||
_ctx2.fillRect(_xDst, _yDst, _w4 + 1, _hDst);
|
||
_ctx2.beginPath();
|
||
_ctx2.fillRect(_xDst + _wDst - _w4 - 1, _yDst, _w4 + 1, _hDst);
|
||
_ctx2.beginPath();
|
||
|
||
var _x = _xDst + _w4;
|
||
var _r = _xDst + _wDst - _w2;
|
||
_ctx2.drawImage(oThis.Params.GradImage, 255, 0, 255, 1, _x, _yDst, _w4, _hDst);
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 255, 1, _r, _yDst, _w4, _hDst);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _w = (_part * _wDst) >> 0;
|
||
var _w2 = _w >> 1;
|
||
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
|
||
_ctx2.fillRect(_xDst, _yDst, _w2 + 1, _hDst);
|
||
_ctx2.beginPath();
|
||
_ctx2.fillRect(_xDst + _wDst - _w2 - 1, _yDst, _w2 + 1, _hDst);
|
||
_ctx2.beginPath();
|
||
|
||
var _gradWW = (_wDst - _w) >> 1;
|
||
var _gradW = (_wDst / 4) >> 0;
|
||
|
||
var _srcOff = 256 * _gradWW / _gradW;
|
||
|
||
if (_gradWW > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, 255, 0, 255, 1, _xDst + _w2, _yDst, _gradWW, _hDst);
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 255, 1, _cX, _yDst, _gradWW, _hDst);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Split_HorizontalOut:
|
||
{
|
||
if (oThis.TimerId === null)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
var __w = 256 + 255;
|
||
_canvasTmp.width = 1;
|
||
_canvasTmp.height = __w;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(1, __w);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = i;
|
||
for (var i = 256; i < __w; i++)
|
||
_data.data[4 * i + 3] = __w - i - 1;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _cY = _yDst + _hDst / 2;
|
||
|
||
if (_part <= 0.5)
|
||
{
|
||
var _h = (_part * 2 * _hDst) >> 0;
|
||
var _h2 = _h >> 1;
|
||
|
||
if (_h > 0 && _h2 > 0)
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xDst, Math.max(_cY - _h2 / 2 - 1), _wDst, Math.min(_h2 + 2, _hDst));
|
||
_ctx2.beginPath();
|
||
|
||
var _h4 = _h2 >> 1;
|
||
var _y = _cY - _h2;
|
||
var _b = _cY + _h4;
|
||
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 1, 255, _xDst, _y, _wDst, _h4);
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 255, 1, 255, _xDst, _b, _wDst, _h4);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _h = (_part * _hDst) >> 0;
|
||
var _h2 = _h >> 1;
|
||
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
_ctx2.fillRect(_xDst, Math.max(_yDst, _cY - _h2 - 1), _wDst, Math.min(_h + 2, _hDst));
|
||
_ctx2.beginPath();
|
||
|
||
var _gradHH = (_hDst - _h) >> 1;
|
||
var _gradH = (_hDst / 4) >> 0;
|
||
|
||
//var _srcOff = 256 * _gradHH / _gradH;
|
||
if (_gradHH > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 1, 255, _xDst, _yDst, _wDst, _gradHH);
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 255, 1, 255, _xDst, _cY + _h2, _wDst, _gradHH);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Split_HorizontalIn:
|
||
{
|
||
if (oThis.TimerId === null)
|
||
{
|
||
var _canvasTmp = document.createElement('canvas');
|
||
var __w = 256 + 255;
|
||
_canvasTmp.width = 1;
|
||
_canvasTmp.height = __w;
|
||
var _canvasTmpCtx = _canvasTmp.getContext('2d');
|
||
var _data = _canvasTmpCtx.createImageData(1, __w);
|
||
for (var i = 0; i < 256; i++)
|
||
_data.data[4 * i + 3] = i;
|
||
for (var i = 256; i < __w; i++)
|
||
_data.data[4 * i + 3] = __w - i - 1;
|
||
_canvasTmpCtx.putImageData(_data, 0, 0);
|
||
|
||
oThis.Params = { GradImage : _canvasTmp };
|
||
}
|
||
|
||
var _cY = _yDst + _hDst / 2;
|
||
|
||
if (_part <= 0.5)
|
||
{
|
||
var _h = (_part * 2 * _hDst) >> 0;
|
||
var _h2 = _h >> 1;
|
||
var _h4 = _h2 >> 1;
|
||
|
||
if (_h4 > 0)
|
||
{
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _h4 + 1);
|
||
_ctx2.beginPath();
|
||
_ctx2.fillRect(_xDst, _yDst + _hDst - _h4 - 1, _wDst, _h4 + 1);
|
||
_ctx2.beginPath();
|
||
|
||
var _y = _yDst + _h4;
|
||
var _b = _yDst + _hDst - _h2;
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 255, 1, 255, _xDst, _y, _wDst, _h4);
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 1, 255, _xDst, _b, _wDst, _h4);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _h = (_part * _hDst) >> 0;
|
||
var _h2 = _h >> 1;
|
||
|
||
_ctx2.beginPath();
|
||
_ctx2.fillStyle = "#000000";
|
||
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _h2 + 1);
|
||
_ctx2.beginPath();
|
||
_ctx2.fillRect(_xDst, _yDst + _hDst - _h2 - 1, _wDst, _h2 + 1);
|
||
_ctx2.beginPath();
|
||
|
||
var _gradHH = (_hDst - _h) >> 1;
|
||
var _gradH = (_hDst / 4) >> 0;
|
||
|
||
//var _srcOff = 256 * _gradHH / _gradH;
|
||
if (_gradHH > 0)
|
||
{
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 255, 1, 255, _xDst, _yDst + _h2, _wDst, _gradHH);
|
||
_ctx2.drawImage(oThis.Params.GradImage, 0, 0, 1, 255, _xDst, _cY, _wDst, _gradHH);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
|
||
_ctx2.globalCompositeOperation = "source-atop";
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage2.Image, _xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.beginPath();
|
||
}
|
||
|
||
_ctx2.globalCompositeOperation = "source-over";
|
||
|
||
oThis.TimerId = __nextFrame(oThis._startSplit);
|
||
oThis.OnAfterAnimationDraw();
|
||
};
|
||
|
||
this._startUnCover = function()
|
||
{
|
||
oThis.CurrentTime = new Date().getTime();
|
||
|
||
if (oThis.CurrentTime >= oThis.EndTime)
|
||
{
|
||
oThis.End(false);
|
||
return;
|
||
}
|
||
|
||
oThis.SetBaseTransform();
|
||
|
||
if (oThis.TimerId === null)
|
||
{
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage2.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx1.beginPath();
|
||
}
|
||
}
|
||
|
||
var _xDst = oThis.Rect.x;
|
||
var _yDst = oThis.Rect.y;
|
||
var _wDst = oThis.Rect.w;
|
||
var _hDst = oThis.Rect.h;
|
||
|
||
var _xSrc = 0;
|
||
var _ySrc = 0;
|
||
|
||
|
||
let _part = oThis._getPart();
|
||
|
||
var _offX = (_wDst * _part) >> 0;
|
||
var _offY = (_hDst * _part) >> 0;
|
||
|
||
switch (oThis.Param)
|
||
{
|
||
case c_oAscSlideTransitionParams.Param_Left:
|
||
{
|
||
_xDst += _offX;
|
||
_wDst -= _offX;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Right:
|
||
{
|
||
_xSrc = _offX;
|
||
_wDst -= _offX;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Top:
|
||
{
|
||
_yDst += _offY;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Bottom:
|
||
{
|
||
_ySrc = _offY;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_TopLeft:
|
||
{
|
||
_xDst += _offX;
|
||
_yDst += _offY;
|
||
_wDst -= _offX;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_TopRight:
|
||
{
|
||
_xSrc = _offX;
|
||
_yDst += _offY;
|
||
_wDst -= _offX;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_BottomLeft:
|
||
{
|
||
_xDst += _offX;
|
||
_ySrc = _offY;
|
||
_wDst -= _offX;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_BottomRight:
|
||
{
|
||
_xSrc = _offX;
|
||
_ySrc = _offY;
|
||
_wDst -= _offX;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
|
||
var _ctx2 = null;
|
||
if (oThis.DemonstrationObject == null)
|
||
{
|
||
oThis.HtmlPage.m_oOverlayApi.Clear();
|
||
oThis.HtmlPage.m_oOverlayApi.CheckRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
|
||
_ctx2 = oThis.HtmlPage.m_oOverlayApi.m_oContext;
|
||
}
|
||
else
|
||
{
|
||
_ctx2 = oThis.DemonstrationObject.Overlay.getContext('2d');
|
||
_ctx2.clearRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
|
||
if (_wDst > 0 && _hDst > 0)
|
||
{
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage1.Image, _xSrc, _ySrc, _wDst, _hDst, _xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.beginPath();
|
||
}
|
||
}
|
||
|
||
oThis.TimerId = __nextFrame(oThis._startUnCover);
|
||
oThis.OnAfterAnimationDraw();
|
||
};
|
||
|
||
this._startCover = function()
|
||
{
|
||
oThis.CurrentTime = new Date().getTime();
|
||
|
||
if (oThis.CurrentTime >= oThis.EndTime)
|
||
{
|
||
oThis.End(false);
|
||
return;
|
||
}
|
||
|
||
oThis.SetBaseTransform();
|
||
|
||
if (oThis.TimerId === null)
|
||
{
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage1.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx1.beginPath();
|
||
}
|
||
}
|
||
|
||
var _xDst = oThis.Rect.x;
|
||
var _yDst = oThis.Rect.y;
|
||
var _wDst = oThis.Rect.w;
|
||
var _hDst = oThis.Rect.h;
|
||
|
||
var _xSrc = 0;
|
||
var _ySrc = 0;
|
||
|
||
|
||
let _part = oThis._getPart();
|
||
|
||
var _offX = (_wDst * (1 - _part)) >> 0;
|
||
var _offY = (_hDst * (1 - _part)) >> 0;
|
||
|
||
switch (oThis.Param)
|
||
{
|
||
case c_oAscSlideTransitionParams.Param_Left:
|
||
{
|
||
_xSrc = _offX;
|
||
_wDst -= _offX;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Right:
|
||
{
|
||
_xDst += _offX;
|
||
_wDst -= _offX;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Top:
|
||
{
|
||
_ySrc = _offY;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_Bottom:
|
||
{
|
||
_yDst += _offY;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_TopLeft:
|
||
{
|
||
_xSrc = _offX;
|
||
_ySrc = _offY;
|
||
_wDst -= _offX;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_TopRight:
|
||
{
|
||
_xDst += _offX;
|
||
_ySrc = _offY;
|
||
_wDst -= _offX;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_BottomLeft:
|
||
{
|
||
_xSrc = _offX;
|
||
_yDst += _offY;
|
||
_wDst -= _offX;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Param_BottomRight:
|
||
{
|
||
_xDst += _offX;
|
||
_yDst += _offY;
|
||
_wDst -= _offX;
|
||
_hDst -= _offY;
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
|
||
var _ctx2 = null;
|
||
if (oThis.DemonstrationObject == null)
|
||
{
|
||
oThis.HtmlPage.m_oOverlayApi.Clear();
|
||
oThis.HtmlPage.m_oOverlayApi.CheckRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
|
||
_ctx2 = oThis.HtmlPage.m_oOverlayApi.m_oContext;
|
||
}
|
||
else
|
||
{
|
||
_ctx2 = oThis.DemonstrationObject.Overlay.getContext('2d');
|
||
_ctx2.clearRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
|
||
if (_wDst > 0 && _hDst > 0)
|
||
{
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage2.Image, _xSrc, _ySrc, _wDst, _hDst, _xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.beginPath();
|
||
}
|
||
}
|
||
|
||
oThis.TimerId = __nextFrame(oThis._startCover);
|
||
oThis.OnAfterAnimationDraw();
|
||
};
|
||
|
||
this._startClock = function()
|
||
{
|
||
oThis.CurrentTime = new Date().getTime();
|
||
|
||
if (oThis.CurrentTime >= oThis.EndTime)
|
||
{
|
||
oThis.End(false);
|
||
return;
|
||
}
|
||
|
||
oThis.SetBaseTransform();
|
||
|
||
if (oThis.TimerId === null)
|
||
{
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage1.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx1.beginPath();
|
||
}
|
||
}
|
||
|
||
var _xDst = oThis.Rect.x;
|
||
var _yDst = oThis.Rect.y;
|
||
var _wDst = oThis.Rect.w;
|
||
var _hDst = oThis.Rect.h;
|
||
|
||
|
||
let _part = oThis._getPart();
|
||
|
||
var _anglePart1 = Math.atan(_wDst / _hDst);
|
||
var _anglePart2 = Math.PI / 2 - _anglePart1;
|
||
var _offset = 0;
|
||
|
||
var _ctx2 = null;
|
||
if (oThis.DemonstrationObject == null)
|
||
{
|
||
oThis.HtmlPage.m_oOverlayApi.Clear();
|
||
oThis.HtmlPage.m_oOverlayApi.CheckRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
|
||
_ctx2 = oThis.HtmlPage.m_oOverlayApi.m_oContext;
|
||
}
|
||
else
|
||
{
|
||
_ctx2 = oThis.DemonstrationObject.Overlay.getContext('2d');
|
||
_ctx2.clearRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
|
||
_ctx2.save();
|
||
_ctx2.beginPath();
|
||
|
||
var _cX = _xDst + _wDst / 2;
|
||
var _cY = _yDst + _hDst / 2;
|
||
|
||
switch (oThis.Param)
|
||
{
|
||
case c_oAscSlideTransitionParams.Clock_Clockwise:
|
||
{
|
||
var _angle = 2 * Math.PI * _part;
|
||
var _x = 0;
|
||
var _y = 0;
|
||
|
||
var _mainPart = (2 * _angle / Math.PI) >> 0;
|
||
var _nomainPart = _angle - (_mainPart * Math.PI / 2);
|
||
|
||
switch (_mainPart)
|
||
{
|
||
case 0:
|
||
{
|
||
if (_nomainPart > _anglePart1)
|
||
{
|
||
_offset = _wDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_x = _xDst + _wDst;
|
||
_y = _cY - _offset;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_x, _yDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _hDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_x = _cX + _offset;
|
||
_y = _yDst;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
if (_nomainPart > _anglePart2)
|
||
{
|
||
_offset = _hDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_x = _cX + _offset;
|
||
_y = _yDst + _hDst;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _wDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_x = _xDst + _wDst;
|
||
_y = _cY + _offset;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_x, _yDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
if (_nomainPart > _anglePart1)
|
||
{
|
||
_offset = _wDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_x = _xDst;
|
||
_y = _cY + _offset;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _hDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_x = _cX - _offset;
|
||
_y = _yDst + _hDst;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
if (_nomainPart > _anglePart2)
|
||
{
|
||
_offset = _hDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_x = _cX - _offset;
|
||
_y = _yDst;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst, _yDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _wDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_x = _xDst;
|
||
_y = _cY - _offset;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Clock_Counterclockwise:
|
||
{
|
||
var _angle = 2 * Math.PI * _part;
|
||
var _x = 0;
|
||
var _y = 0;
|
||
|
||
var _mainPart = (2 * _angle / Math.PI) >> 0;
|
||
var _nomainPart = _angle - (_mainPart * Math.PI / 2);
|
||
|
||
switch (_mainPart)
|
||
{
|
||
case 0:
|
||
{
|
||
if (_nomainPart > _anglePart1)
|
||
{
|
||
_offset = _wDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_x = _xDst;
|
||
_y = _cY - _offset;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_x, _yDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _hDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_x = _cX - _offset;
|
||
_y = _yDst;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
if (_nomainPart > _anglePart2)
|
||
{
|
||
_offset = _hDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_x = _cX - _offset;
|
||
_y = _yDst + _hDst;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _wDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_x = _xDst;
|
||
_y = _cY + _offset;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_x, _yDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
if (_nomainPart > _anglePart1)
|
||
{
|
||
_offset = _wDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_x = _xDst + _wDst;
|
||
_y = _cY + _offset;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _hDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_x = _cX + _offset;
|
||
_y = _yDst + _hDst;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
if (_nomainPart > _anglePart2)
|
||
{
|
||
_offset = _hDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_x = _cX + _offset;
|
||
_y = _yDst;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _wDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_x = _xDst + _wDst;
|
||
_y = _cY - _offset;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst);
|
||
_ctx2.lineTo(_xDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_x, _y);
|
||
_ctx2.closePath();
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Clock_Wedge:
|
||
{
|
||
var _angle = Math.PI * _part;
|
||
var _x = 0;
|
||
var _y = 0;
|
||
|
||
var _mainPart = (2 * _angle / Math.PI) >> 0;
|
||
var _nomainPart = _angle - (_mainPart * Math.PI / 2);
|
||
|
||
switch (_mainPart)
|
||
{
|
||
case 0:
|
||
{
|
||
if (_nomainPart > _anglePart1)
|
||
{
|
||
_offset = _wDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_xDst, _cY - _offset);
|
||
_ctx2.lineTo(_xDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _cY - _offset);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _hDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX - _offset, _yDst);
|
||
_ctx2.lineTo(_cX + _offset, _yDst);
|
||
_ctx2.closePath();
|
||
}
|
||
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
if (_nomainPart > _anglePart2)
|
||
{
|
||
_offset = _hDst * Math.tan((Math.PI / 2) - _nomainPart) / 2;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_cX - _offset, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_xDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst + _hDst);
|
||
_ctx2.lineTo(_cX + _offset, _yDst + _hDst);
|
||
_ctx2.closePath();
|
||
}
|
||
else
|
||
{
|
||
_offset = _wDst * Math.tan(_nomainPart) / 2;
|
||
|
||
_ctx2.moveTo(_cX, _cY);
|
||
_ctx2.lineTo(_xDst, _cY + _offset);
|
||
_ctx2.lineTo(_xDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _yDst);
|
||
_ctx2.lineTo(_xDst + _wDst, _cY + _offset);
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
|
||
_ctx2.clip();
|
||
|
||
if (_wDst > 0 && _hDst > 0)
|
||
{
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage2.Image, _xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.beginPath();
|
||
}
|
||
}
|
||
|
||
_ctx2.restore();
|
||
|
||
oThis.TimerId = __nextFrame(oThis._startClock);
|
||
oThis.OnAfterAnimationDraw();
|
||
};
|
||
|
||
this._startZoom = function()
|
||
{
|
||
oThis.CurrentTime = new Date().getTime();
|
||
|
||
if (oThis.CurrentTime >= oThis.EndTime)
|
||
{
|
||
oThis.End(false);
|
||
return;
|
||
}
|
||
|
||
oThis.SetBaseTransform();
|
||
|
||
var _xDst = oThis.Rect.x;
|
||
var _yDst = oThis.Rect.y;
|
||
var _wDst = oThis.Rect.w;
|
||
var _hDst = oThis.Rect.h;
|
||
|
||
|
||
let _part = oThis._getPart();
|
||
|
||
switch (oThis.Param)
|
||
{
|
||
case c_oAscSlideTransitionParams.Zoom_In:
|
||
{
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
|
||
|
||
var _w = ((0.5 * _wDst) * (1 + _part)) >> 0;
|
||
var _h = ((0.5 * _hDst) * (1 + _part)) >> 0;
|
||
var _x = (_wDst - _w) >> 1;
|
||
var _y = (_hDst - _h) >> 1;
|
||
|
||
var _x1 = (0.25 * _wDst - _x) >> 0;
|
||
var _y1 = (0.25 * _hDst - _y) >> 0;
|
||
var _w1 = _wDst - 2 * _x1;
|
||
var _h1 = _hDst - 2 * _y1;
|
||
|
||
if (_w > 0 && _h > 0)
|
||
{
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage2.Image, _xDst + _x, _yDst + _y, _w, _h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(_xDst + _x, _yDst + _y, _w, _h);
|
||
_ctx1.beginPath();
|
||
}
|
||
}
|
||
|
||
_ctx1.globalAlpha = (1 - _part);
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage1.Image, _x1, _y1, _w1, _h1, _xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx1.beginPath();
|
||
}
|
||
_ctx1.globalAlpha = 1;
|
||
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Zoom_Out:
|
||
{
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
|
||
_part = 1 - _part;
|
||
var _w = ((0.5 * _wDst) * (1 + _part)) >> 0;
|
||
var _h = ((0.5 * _hDst) * (1 + _part)) >> 0;
|
||
var _x = (_wDst - _w) >> 1;
|
||
var _y = (_hDst - _h) >> 1;
|
||
|
||
var _x1 = (0.25 * _wDst - _x) >> 0;
|
||
var _y1 = (0.25 * _hDst - _y) >> 0;
|
||
var _w1 = _wDst - 2 * _x1;
|
||
var _h1 = _hDst - 2 * _y1;
|
||
|
||
if (_w > 0 && _h > 0)
|
||
{
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage1.Image, _xDst + _x, _yDst + _y, _w, _h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(_xDst + _x, _yDst + _y, _w, _h);
|
||
_ctx1.beginPath();
|
||
}
|
||
}
|
||
|
||
_ctx1.globalAlpha = (1 - _part);
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage2.Image, _x1, _y1, _w1, _h1, _xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx1.beginPath();
|
||
}
|
||
_ctx1.globalAlpha = 1;
|
||
|
||
break;
|
||
}
|
||
case c_oAscSlideTransitionParams.Zoom_AndRotate:
|
||
{
|
||
if (oThis.TimerId === null)
|
||
{
|
||
var _ctx1 = null;
|
||
if (null == oThis.DemonstrationObject)
|
||
{
|
||
// отрисовываем на основной канве картинку первого слайда
|
||
_ctx1 = oThis.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
_ctx1.fillStyle = GlobalSkin.BackgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.HtmlPage.m_oEditor.HtmlElement.width, oThis.HtmlPage.m_oEditor.HtmlElement.height);
|
||
}
|
||
else
|
||
{
|
||
_ctx1 = oThis.DemonstrationObject.Canvas.getContext('2d');
|
||
_ctx1.fillStyle = oThis.DemonstrationObject.Canvas.style.backgroundColor;
|
||
_ctx1.fillRect(0, 0, oThis.DemonstrationObject.Canvas.width, oThis.DemonstrationObject.Canvas.height);
|
||
}
|
||
|
||
if (null != oThis.CacheImage1.Image)
|
||
{
|
||
_ctx1.drawImage(oThis.CacheImage1.Image, oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage1.Color;
|
||
_ctx1.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx1.fillRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
_ctx1.beginPath();
|
||
}
|
||
}
|
||
|
||
var _ctx2 = null;
|
||
if (oThis.DemonstrationObject == null)
|
||
{
|
||
oThis.HtmlPage.m_oOverlayApi.Clear();
|
||
oThis.HtmlPage.m_oOverlayApi.CheckRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
|
||
_ctx2 = oThis.HtmlPage.m_oOverlayApi.m_oContext;
|
||
}
|
||
else
|
||
{
|
||
_ctx2 = oThis.DemonstrationObject.Overlay.getContext('2d');
|
||
_ctx2.clearRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
}
|
||
|
||
// начинаем с угла в -45 градусов. затем крутим против часовой стрелки на 360 + 45 градусов
|
||
// размер - от 5% до 100%
|
||
var _angle = -45 + 405 * _part;
|
||
var _scale = (0.05 + 0.95 * _part);
|
||
_angle *= (Math.PI / 180);
|
||
|
||
_ctx2.save();
|
||
_ctx2.beginPath();
|
||
_ctx2.rect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.clip();
|
||
_ctx2.beginPath();
|
||
|
||
var _xC = _xDst + _wDst / 2;
|
||
var _yC = _yDst + _hDst / 2;
|
||
|
||
var localTransform = new AscCommon.CMatrix();
|
||
global_MatrixTransformer.TranslateAppend(localTransform, -_xC, -_yC);
|
||
global_MatrixTransformer.ScaleAppend(localTransform, _scale, _scale);
|
||
global_MatrixTransformer.RotateRadAppend(localTransform, _angle);
|
||
global_MatrixTransformer.TranslateAppend(localTransform, _xC, _yC);
|
||
|
||
_ctx2.transform(localTransform.sx, localTransform.shy, localTransform.shx, localTransform.sy, localTransform.tx, localTransform.ty);
|
||
|
||
if (null != oThis.CacheImage2.Image)
|
||
{
|
||
_ctx2.drawImage(oThis.CacheImage2.Image, _xDst, _yDst, _wDst, _hDst);
|
||
}
|
||
else
|
||
{
|
||
var _c = oThis.CacheImage2.Color;
|
||
_ctx2.fillStyle = "rgb(" + _c.r + "," + _c.g + "," + _c.b + ")";
|
||
_ctx2.fillRect(_xDst, _yDst, _wDst, _hDst);
|
||
_ctx2.beginPath();
|
||
}
|
||
|
||
_ctx2.restore();
|
||
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
|
||
oThis.TimerId = __nextFrame(oThis._startZoom);
|
||
oThis.OnAfterAnimationDraw();
|
||
};
|
||
this._startMorph = function()
|
||
{
|
||
|
||
const nSlide1 = oThis.CacheImage1.SlideNum;
|
||
const nSlide2 = oThis.CacheImage2.SlideNum;
|
||
if(nSlide1 === -1 || nSlide2 === -1)
|
||
{
|
||
oThis.Type = c_oAscSlideTransitionTypes.Fade;
|
||
oThis.Param = c_oAscSlideTransitionParams.Fade_Smoothly;
|
||
oThis._startFade();
|
||
return;
|
||
}
|
||
oThis.CurrentTime = new Date().getTime();
|
||
|
||
|
||
oThis.SetBaseTransform();
|
||
|
||
if (oThis.CurrentTime >= oThis.EndTime)
|
||
{
|
||
oThis.End(false);
|
||
return;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
let _part = oThis._getPart();
|
||
|
||
|
||
if(!oThis.Morph)
|
||
{
|
||
const oPr = editor.WordControl.m_oLogicDocument;
|
||
const oSlide1 = oPr.Slides[nSlide1];
|
||
const oSlide2 = oPr.Slides[nSlide2];
|
||
oThis.Morph = new AscCommonSlide.CSlideMorphEffect(oSlide1, oSlide2, oThis.Param)
|
||
}
|
||
let oCanvas;
|
||
if(oThis.DemonstrationObject)
|
||
{
|
||
oCanvas = oThis.DemonstrationObject.Canvas;
|
||
}
|
||
else
|
||
{
|
||
|
||
oCanvas = oThis.HtmlPage.m_oOverlayApi.m_oControl.HtmlElement;
|
||
}
|
||
|
||
|
||
|
||
oThis.HtmlPage.m_oOverlayApi.Clear();
|
||
oThis.HtmlPage.m_oOverlayApi.CheckRect(oThis.Rect.x, oThis.Rect.y, oThis.Rect.w, oThis.Rect.h);
|
||
|
||
|
||
|
||
oThis.Morph.morph(_part);
|
||
oThis.Morph.draw(oCanvas, oThis.Rect, _part)
|
||
|
||
oThis.TimerId = __nextFrame(oThis._startMorph);
|
||
};
|
||
|
||
this._easeFunction = function(t)
|
||
{
|
||
let dT = (1 - t);
|
||
return 1 - dT*dT*dT;
|
||
};
|
||
|
||
this._getPart = function()
|
||
{
|
||
let _part = (oThis.CurrentTime - oThis.StartTime) / oThis.Duration;
|
||
_part = oThis._easeFunction(_part);
|
||
if (oThis.IsBackward)
|
||
_part = 1 - _part;
|
||
return _part;
|
||
};
|
||
}
|
||
|
||
function CDemonstrationManager(htmlpage)
|
||
{
|
||
this.HtmlPage = htmlpage;
|
||
this.Transition = new CTransitionAnimation(htmlpage);
|
||
|
||
this.DivWidth = 0;
|
||
this.DivHeight = 0;
|
||
|
||
this.MainDivId = "";
|
||
this.DemonstrationDiv = null;
|
||
this.DivEndPresentation = null;
|
||
this.EndShowMessage = "";
|
||
|
||
this.SlideNum = -1;
|
||
|
||
this.Mode = false;
|
||
this.Canvas = null;
|
||
this.Overlay = null;
|
||
|
||
this.SlideImage = null;
|
||
|
||
this.IsPlayMode = true;
|
||
this.CheckSlideDuration = -1;
|
||
this.WaitAnimationEnd = false;
|
||
this.Transition.DemonstrationObject = this;
|
||
|
||
this.CacheImagesManager = new CCacheManager();
|
||
this.SlideImages = new Array(2);
|
||
this.SlideImages[0] = null;
|
||
this.SlideImages[1] = null;
|
||
|
||
this.SlideIndexes = new Array(2);
|
||
this.SlideIndexes[0] = -1;
|
||
this.SlideIndexes[1] = -1;
|
||
|
||
this.waitReporterObject = null;
|
||
|
||
this.PointerDiv = null;
|
||
|
||
this.isMouseDown = false;
|
||
this.StartSlideNum = -1;
|
||
this.StartSlideObject = null;
|
||
this.TmpSlideVisible = -1;
|
||
this.LastMoveTime = null;
|
||
|
||
this.GoToSlideShortcutStack = [];
|
||
|
||
this.SlideAnnotations = new AscCommonSlide.CSlideShowAnnotations();
|
||
|
||
var oThis = this;
|
||
|
||
this.CacheSlide = function(slide_num, slide_index)
|
||
{
|
||
const _w = this.Transition.Rect.w;
|
||
const _h = this.Transition.Rect.h;
|
||
const _image = this.CacheImagesManager.Lock(_w, _h);
|
||
const oSlide = this.GetSlide(slide_num);
|
||
const oPlayer = oSlide.getAnimationPlayer();
|
||
|
||
// не кэшируем вотермарк никогда
|
||
let oldWatermark = this.HtmlPage.m_oApi.watermarkDraw;
|
||
this.HtmlPage.m_oApi.watermarkDraw = null;
|
||
const oOldAnnotations = this.SlideAnnotations;
|
||
this.SlideAnnotations = null;
|
||
oPlayer.drawFrame(_image.image, {x:0, y: 0, w: _w, h: _h});
|
||
this.SlideAnnotations = oOldAnnotations;
|
||
this.HtmlPage.m_oApi.watermarkDraw = oldWatermark;
|
||
const oSlideImage = new CCacheSlideImage();
|
||
oSlideImage.Image = _image;
|
||
oSlideImage.SlideNum = slide_num;
|
||
this.SlideImages[slide_index] = oSlideImage;
|
||
this.SlideIndexes[slide_index] = slide_num;
|
||
};
|
||
|
||
this.PrepareTransition = function(is_first, is_backward)
|
||
{
|
||
var _slide1 = -1;
|
||
var _slide2 = -1;
|
||
|
||
this.Transition.IsBackward = false;
|
||
if (is_first)
|
||
{
|
||
_slide1 = -1;
|
||
_slide2 = this.SlideNum;
|
||
}
|
||
else if (!is_backward)
|
||
{
|
||
_slide1 = this.GetPrevVisibleSlide();
|
||
_slide2 = this.SlideNum;
|
||
}
|
||
else
|
||
{
|
||
this.Transition.IsBackward = true;
|
||
_slide1 = this.GetPrevVisibleSlide();
|
||
_slide2 = this.SlideNum;
|
||
}
|
||
|
||
this.Transition.CalculateRectDemonstration();
|
||
|
||
if (this.SlideImages[0])
|
||
this.CacheImagesManager.UnLock(this.SlideImages[0].Image);
|
||
this.SlideImages[0] = null;
|
||
this.SlideIndexes[0] = -1;
|
||
|
||
if (this.SlideImages[1])
|
||
this.CacheImagesManager.UnLock(this.SlideImages[1].Image);
|
||
this.SlideImages[1] = null;
|
||
this.SlideIndexes[1] = -1;
|
||
if (_slide1 == -1)
|
||
{
|
||
this.Transition.CacheImage1.Clear();
|
||
}
|
||
else
|
||
{
|
||
this.CacheSlide(_slide1, 0);
|
||
this.Transition.CacheImage1.Image = this.SlideImages[0].Image.image;
|
||
this.Transition.CacheImage1.SlideNum = this.SlideImages[0].SlideNum;
|
||
}
|
||
if (_slide2 == -1)
|
||
{
|
||
this.Transition.CacheImage2.Clear();
|
||
}
|
||
else
|
||
{
|
||
this.CacheSlide(_slide2, 1);
|
||
this.Transition.CacheImage2.Image = this.SlideImages[1].Image.image;
|
||
this.Transition.CacheImage2.SlideNum = this.SlideImages[1].SlideNum;
|
||
}
|
||
};
|
||
this.GetSlidesCount = function()
|
||
{
|
||
return this.Transition.GetSlidesCount();
|
||
};
|
||
this.GetSlide = function(nIdx)
|
||
{
|
||
return this.Transition.GetSlide(nIdx);
|
||
};
|
||
|
||
this.PrepareSlide = function()
|
||
{
|
||
if (this.SlideNum < 0 || this.SlideNum >= this.GetSlidesCount())
|
||
{
|
||
this.SlideImage = -1;
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
if (this.SlideNum != this.SlideIndexes[0])
|
||
{
|
||
if (this.SlideImages[0])
|
||
this.CacheImagesManager.UnLock(this.SlideImages[0].Image);
|
||
this.SlideImages[0] = null;
|
||
this.SlideIndexes[0] = -1;
|
||
}
|
||
if (this.SlideNum != this.SlideIndexes[1])
|
||
{
|
||
if (this.SlideImages[1])
|
||
this.CacheImagesManager.UnLock(this.SlideImages[1].Image);
|
||
this.SlideImages[1] = null;
|
||
this.SlideIndexes[1] = -1;
|
||
}
|
||
|
||
if (this.SlideNum == this.SlideIndexes[0])
|
||
{
|
||
this.SlideImage = 0;
|
||
}
|
||
else if (this.SlideNum == this.SlideIndexes[1])
|
||
{
|
||
this.SlideImage = 1;
|
||
}
|
||
else
|
||
{
|
||
this.CacheSlide(this.SlideNum, 0);
|
||
this.SlideImage = 0;
|
||
}
|
||
}
|
||
};
|
||
|
||
this.CorrectSlideNum = function()
|
||
{
|
||
if (this.SlideNum > this.GetSlidesCount())
|
||
this.SlideNum = this.GetSlidesCount();
|
||
};
|
||
|
||
this.StartWaitReporter = function(main_div_id, start_slide_num, is_play_mode)
|
||
{
|
||
var _parent = document.getElementById(main_div_id);
|
||
if (_parent)
|
||
{
|
||
var _elem = document.createElement('div');
|
||
_elem.setAttribute("id", "dem_id_wait_reporter");
|
||
_elem.setAttribute("style", "line-height:100%;overflow:hidden;position:absolute;margin:0px;padding:25% 0px 0px 0px;left:0px;top:0px;width:100%;height:100%;z-index:20;background-color:#000000;text-align:center;font-family:monospace;font-size:12pt;color:#FFFFFF;");
|
||
_elem.innerHTML = AscCommon.translateManager.getValue("Loading");
|
||
_parent.appendChild(_elem);
|
||
}
|
||
|
||
this.waitReporterObject = [main_div_id, start_slide_num, is_play_mode];
|
||
|
||
if (undefined !== window["AscDesktopEditor"])
|
||
{
|
||
this.HtmlPage.m_oApi.hideMediaControl();
|
||
window["AscDesktopEditor"]["SetFullscreen"](true);
|
||
}
|
||
};
|
||
|
||
this.EndWaitReporter = function(isNoStart)
|
||
{
|
||
var _parent = document.getElementById(this.waitReporterObject[0]);
|
||
var _elem = document.getElementById("dem_id_wait_reporter");
|
||
try
|
||
{
|
||
_parent.removeChild(_elem);
|
||
}
|
||
catch (err)
|
||
{
|
||
}
|
||
|
||
if (true !== isNoStart)
|
||
this.Start(this.waitReporterObject[0], this.waitReporterObject[1], this.waitReporterObject[2], true);
|
||
this.waitReporterObject = null;
|
||
};
|
||
|
||
this.wrapKeyboard = function()
|
||
{
|
||
if (this.HtmlPage.m_oApi.isReporterMode)
|
||
return;
|
||
|
||
var _t = this;
|
||
this._funcWrapKeyboard = function(e) {
|
||
if (document.activeElement === document.body)
|
||
_t.onKeyDown(e);
|
||
};
|
||
window.addEventListener("keydown", this._funcWrapKeyboard, false);
|
||
};
|
||
this.unwrapKeyboard = function()
|
||
{
|
||
if (this._funcWrapKeyboard)
|
||
window.removeEventListener("keydown", this._funcWrapKeyboard);
|
||
};
|
||
|
||
this.CheckBackgroundColor = function()
|
||
{
|
||
if(this.Canvas)
|
||
{
|
||
if(Asc.editor.demoBackgroundColor)
|
||
{
|
||
this.Canvas.style.backgroundColor = Asc.editor.demoBackgroundColor;
|
||
}
|
||
else
|
||
{
|
||
this.Canvas.style.backgroundColor = "#000000";
|
||
}
|
||
}
|
||
};
|
||
|
||
this.Start = function(main_div_id, start_slide_num, is_play_mode, is_no_fullscreen)
|
||
{
|
||
let nStartSlideNum = start_slide_num;
|
||
if(Asc.editor.isMasterMode())
|
||
{
|
||
nStartSlideNum = 0;
|
||
this.StartSlideNum = nStartSlideNum;
|
||
this.StartSlideObject = this.HtmlPage.m_oApi.WordControl.m_oLogicDocument.GetCurrentSlide();
|
||
}
|
||
else
|
||
{
|
||
this.StartSlideNum = nStartSlideNum;
|
||
if (-1 == nStartSlideNum)
|
||
nStartSlideNum = 0;
|
||
}
|
||
|
||
this.DemonstrationDiv = document.getElementById(main_div_id);
|
||
if (this.DemonstrationDiv == null || nStartSlideNum < 0 || nStartSlideNum >= this.GetSlidesCount())
|
||
return;
|
||
|
||
if (undefined !== window["AscDesktopEditor"] && (true !== is_no_fullscreen))
|
||
window["AscDesktopEditor"]["SetFullscreen"](true);
|
||
|
||
this.MainDivId = main_div_id;
|
||
var _width = this.DemonstrationDiv.clientWidth;
|
||
var _height = this.DemonstrationDiv.clientHeight;
|
||
|
||
this.DivWidth = _width;
|
||
this.DivHeight = _height;
|
||
|
||
this.Mode = true;
|
||
this.Canvas = document.createElement('canvas');
|
||
this.Canvas.setAttribute("style", "touch-action:none;position:absolute;margin:0;padding:0;left:0px;top:0px;width:100%;height:100%;zIndex:2;background-color:#000000;");
|
||
this.CheckBackgroundColor();
|
||
|
||
|
||
this.Canvas.width = AscCommon.AscBrowser.convertToRetinaValue(_width, true);
|
||
this.Canvas.height = AscCommon.AscBrowser.convertToRetinaValue(_height, true);
|
||
|
||
this.SlideNum = nStartSlideNum;
|
||
|
||
this.HtmlPage.m_oApi.sync_DemonstrationSlideChanged(this.SlideNum);
|
||
|
||
|
||
AscCommon.addMouseEvent(this.Canvas, "down", this.onMouseDown);
|
||
AscCommon.addMouseEvent(this.Canvas, "move", this.onMouseMove);
|
||
AscCommon.addMouseEvent(this.Canvas, "up", this.onMouseUp);
|
||
this.Canvas.onmouseleave = this.onMouseLeave;
|
||
|
||
this.wrapKeyboard();
|
||
|
||
this.Canvas.onmousewheel = this.onMouseWhell;
|
||
if (this.Canvas.addEventListener)
|
||
this.Canvas.addEventListener("DOMMouseScroll", this.onMouseWhell, false);
|
||
|
||
this.DemonstrationDiv.appendChild(this.Canvas);
|
||
this.IsPlayMode = true;
|
||
|
||
if (false === is_play_mode)
|
||
this.IsPlayMode = false;
|
||
|
||
this.SlideAnnotations.clear();
|
||
|
||
this.SlideIndexes[0] = -1;
|
||
this.SlideIndexes[1] = -1;
|
||
|
||
this.GoToSlideShortcutStack = [];
|
||
this.StartSlide(true, true);
|
||
};
|
||
|
||
this.StartSlide = function(is_transition_use, is_first_play)
|
||
{
|
||
oThis.HtmlPage.m_oApi.hideMediaControl();
|
||
if (oThis.Canvas)
|
||
{
|
||
oThis.Canvas.style.cursor = "default";
|
||
}
|
||
|
||
oThis.StopTransition();
|
||
|
||
if (oThis.SlideNum == oThis.GetSlidesCount())
|
||
{
|
||
if (null == oThis.DivEndPresentation)
|
||
{
|
||
oThis.DivEndPresentation = document.createElement('div');
|
||
oThis.DivEndPresentation.setAttribute("style", "position:absolute;margin:0px;padding:0px;left:0px;top:0px;width:100%;height:100%;z-index:4;background-color:#000000;text-align:center;font-family:monospace;font-size:12pt;color:#FFFFFF;");
|
||
oThis.DivEndPresentation.innerHTML = AscCommon.translateManager.getValue(oThis.EndShowMessage);
|
||
if ("" == oThis.EndShowMessage)
|
||
oThis.DivEndPresentation.innerHTML = AscCommon.translateManager.getValue("The end of slide preview. Click to exit.");
|
||
|
||
//oThis.DemonstrationDivEndPresentation.onmousedown = oThis.onMouseDownDemonstration;
|
||
//oThis.DemonstrationDivEndPresentation.onmousemove = oThis.onMouseMoveDemonstration;
|
||
|
||
AscCommon.addMouseEvent(this.DivEndPresentation, "down", oThis.onMouseDown);
|
||
AscCommon.addMouseEvent(this.DivEndPresentation, "up", oThis.onMouseUp);
|
||
|
||
oThis.DivEndPresentation.onmousewheel = oThis.onMouseWhell;
|
||
if (oThis.DivEndPresentation.addEventListener)
|
||
oThis.DivEndPresentation.addEventListener("DOMMouseScroll", oThis.onMouseWhell, false);
|
||
|
||
oThis.DemonstrationDiv.appendChild(oThis.DivEndPresentation);
|
||
}
|
||
return;
|
||
}
|
||
else if (null != oThis.DivEndPresentation)
|
||
{
|
||
this.DemonstrationDiv.removeChild(this.DivEndPresentation);
|
||
this.DivEndPresentation = null;
|
||
}
|
||
|
||
var _slides = oThis.HtmlPage.m_oLogicDocument.Slides;
|
||
var _transition = null;
|
||
if (is_transition_use && _slides[oThis.SlideNum])
|
||
{
|
||
_transition = _slides[oThis.SlideNum].transition;
|
||
|
||
if (_transition.TransitionType != c_oAscSlideTransitionTypes.None && _transition.TransitionDuration > 0)
|
||
{
|
||
oThis.StartTransition(_transition, is_first_play, false);
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
oThis.StartAnimation(oThis.SlideNum);
|
||
}
|
||
}
|
||
|
||
oThis.OnPaintSlide(false);
|
||
};
|
||
|
||
this.StartAnimation = function(nSlideNum)
|
||
{
|
||
var oSlide = this.GetSlide(nSlideNum);
|
||
if(oSlide)
|
||
{
|
||
return oSlide.getAnimationPlayer().start();
|
||
}
|
||
return false;
|
||
};
|
||
|
||
this.StopAnimation = function(nSlideNum)
|
||
{
|
||
if(this.HtmlPage.m_oLogicDocument)
|
||
{
|
||
var oSlide = this.GetSlide(nSlideNum);
|
||
if(oSlide)
|
||
{
|
||
oSlide.getAnimationPlayer().stop();
|
||
}
|
||
}
|
||
};
|
||
this.StopAllAnimations = function()
|
||
{
|
||
if(this.HtmlPage.m_oLogicDocument)
|
||
{
|
||
this.HtmlPage.m_oLogicDocument.StopAnimation();
|
||
}
|
||
};
|
||
|
||
this.PauseAnimation = function(nSlideNum)
|
||
{
|
||
var oSlide = this.GetSlide(nSlideNum);
|
||
if(oSlide)
|
||
{
|
||
oSlide.getAnimationPlayer().pause();
|
||
}
|
||
};
|
||
this.IsPausedAnimation = function(nSlideNum)
|
||
{
|
||
var oSlide = this.GetSlide(nSlideNum);
|
||
if(oSlide)
|
||
{
|
||
return oSlide.getAnimationPlayer().isPaused();
|
||
}
|
||
return false;
|
||
};
|
||
|
||
this.OnAnimMainSeqFinished = function(nSlideNum)
|
||
{
|
||
if(oThis.WaitAnimationEnd)
|
||
{
|
||
oThis.WaitAnimationEnd = false;
|
||
if(oThis.SlideNum === nSlideNum)
|
||
{
|
||
oThis.AdvanceAfter();
|
||
}
|
||
}
|
||
};
|
||
|
||
this.IsMainSeqFinished = function(nSlideNum)
|
||
{
|
||
var oSlide = this.GetSlide(nSlideNum);
|
||
if(oSlide)
|
||
{
|
||
return oSlide.getAnimationPlayer().isMainSequenceFinished();
|
||
}
|
||
return true;
|
||
};
|
||
|
||
this.StartSlideBackward = function()
|
||
{
|
||
oThis.HtmlPage.m_oApi.hideMediaControl();
|
||
var _is_transition = oThis.Transition.IsPlaying();
|
||
oThis.StopTransition();
|
||
var nOldSlideNum = this.SlideNum;
|
||
|
||
oThis.SlideImages[0] = null;
|
||
oThis.SlideImages[1] = null;
|
||
|
||
oThis.SlideIndexes[0] = -1;
|
||
oThis.SlideIndexes[1] = -1;
|
||
|
||
if (oThis.SlideNum == oThis.GetSlidesCount())
|
||
{
|
||
oThis.SlideNum = this.GetPrevVisibleSlide(true);
|
||
|
||
oThis.StartAnimation(oThis.SlideNum);
|
||
oThis.OnPaintSlide(false);
|
||
if (null != oThis.DivEndPresentation)
|
||
{
|
||
oThis.DemonstrationDiv.removeChild(oThis.DivEndPresentation);
|
||
oThis.DivEndPresentation = null;
|
||
}
|
||
if(!this.isLoop())
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
|
||
if (this.GetFirstVisibleSlide() > this.SlideNum)
|
||
{
|
||
this.SlideNum = this.GetFirstVisibleSlide();
|
||
if(!this.isLoop())
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
|
||
var _slides = oThis.HtmlPage.m_oLogicDocument.Slides;
|
||
var _transition = _slides[oThis.SlideNum].transition;
|
||
|
||
if (!_is_transition && (_transition.TransitionType != c_oAscSlideTransitionTypes.None && _transition.TransitionDuration > 0))
|
||
{
|
||
oThis.StartTransition(_transition, false, true);
|
||
oThis.StopAnimation(nOldSlideNum);
|
||
return;
|
||
}
|
||
|
||
oThis.StopAnimation(nOldSlideNum);
|
||
if (!_is_transition)
|
||
oThis.SlideNum = this.GetPrevVisibleSlide();
|
||
|
||
|
||
oThis.StartAnimation(oThis.SlideNum);
|
||
oThis.OnPaintSlide(false);
|
||
};
|
||
|
||
this.StopTransition = function()
|
||
{
|
||
if (oThis.Transition.TimerId)
|
||
oThis.Transition.End(true);
|
||
|
||
if (-1 != this.CheckSlideDuration)
|
||
clearTimeout(this.CheckSlideDuration);
|
||
|
||
this.CheckSlideDuration = -1;
|
||
this.WaitAnimationEnd = false;
|
||
};
|
||
|
||
this.StartTransition = function(_transition, is_first, is_backward)
|
||
{
|
||
// сначала проверим, создан ли уже оверлей (в идеале спрашивать еще у транзишна, нужен ли ему оверлей)
|
||
// пока так.
|
||
if (null == oThis.Overlay)
|
||
{
|
||
oThis.Overlay = document.createElement('canvas');
|
||
oThis.Overlay.setAttribute("style", "touch-action:none;position:absolute;margin:0;padding:0;left:0px;top:0px;width:100%;height:100%;zIndex:3;");
|
||
oThis.Overlay.width = oThis.Canvas.width;
|
||
oThis.Overlay.height = oThis.Canvas.height;
|
||
|
||
|
||
|
||
AscCommon.addMouseEvent(oThis.Overlay, "down", oThis.onMouseDown);
|
||
AscCommon.addMouseEvent(oThis.Overlay, "move", oThis.onMouseMove);
|
||
AscCommon.addMouseEvent(oThis.Overlay, "up", oThis.onMouseUp);
|
||
oThis.Overlay.onmouseleave = oThis.onMouseLeave;
|
||
|
||
oThis.Overlay.onmousewheel = oThis.onMouseWhell;
|
||
if (oThis.Overlay.addEventListener)
|
||
oThis.Overlay.addEventListener("DOMMouseScroll", oThis.onMouseWhell, false);
|
||
|
||
this.DemonstrationDiv.appendChild(oThis.Overlay);
|
||
}
|
||
|
||
let oTypeAndOption = _transition.getTypeAndOption();
|
||
oThis.Transition.Type = oTypeAndOption.Type;
|
||
oThis.Transition.Param = oTypeAndOption.Option;
|
||
oThis.Transition.Duration = _transition.TransitionDuration;
|
||
|
||
oThis.PrepareTransition(is_first, is_backward);
|
||
oThis.Transition.Start(false);
|
||
};
|
||
|
||
this.OnEndTransition = function(bIsAttack)
|
||
{
|
||
if (oThis.Transition.IsBackward)
|
||
{
|
||
oThis.SlideNum = oThis.GetPrevVisibleSlide();
|
||
oThis.HtmlPage.m_oApi.sync_DemonstrationSlideChanged(oThis.SlideNum);
|
||
}
|
||
oThis.OnPaintSlide(true);
|
||
oThis.StartAnimation(oThis.SlideNum);
|
||
};
|
||
|
||
this.CheckWatermark = function(transition)
|
||
{
|
||
if (this.HtmlPage.m_oApi.watermarkDraw)
|
||
{
|
||
if (undefined === transition)
|
||
transition = this.Transition;
|
||
let rect = transition.Rect;
|
||
|
||
let ctx = null;
|
||
|
||
if (transition.IsPlaying())
|
||
{
|
||
if (transition.DemonstrationObject == null)
|
||
{
|
||
ctx = this.HtmlPage.m_oOverlayApi.m_oContext;
|
||
}
|
||
else
|
||
{
|
||
ctx = transition.DemonstrationObject.Overlay.getContext('2d');
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (this.Canvas == null)
|
||
{
|
||
ctx = this.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
}
|
||
else
|
||
{
|
||
ctx = this.Canvas.getContext('2d');
|
||
}
|
||
}
|
||
|
||
this.CheckWatermarkInternal(ctx, rect);
|
||
}
|
||
};
|
||
this.CheckWatermarkInternal = function(ctx, rect)
|
||
{
|
||
if (this.HtmlPage.m_oApi.watermarkDraw)
|
||
{
|
||
this.HtmlPage.m_oApi.watermarkDraw.Draw(ctx, rect.x, rect.y, rect.w, rect.h);
|
||
}
|
||
};
|
||
this.CheckAnnotationsInternal = function(oGraphics, oSlide)
|
||
{
|
||
const oAnnotations = this.SlideAnnotations;
|
||
if (oAnnotations)
|
||
{
|
||
oAnnotations.draw(oGraphics, oSlide);
|
||
}
|
||
};
|
||
|
||
this.Redraw = function ()
|
||
{
|
||
oThis.SlideIndexes[0] = -1;
|
||
oThis.SlideIndexes[1] = -1;
|
||
oThis.Clear();
|
||
oThis.OnPaintSlide(true);
|
||
};
|
||
this.Clear = function ()
|
||
{
|
||
let oCtx = oThis.Canvas.getContext('2d');
|
||
oCtx.clearRect(0, 0, oThis.Canvas.width, oThis.Canvas.height)
|
||
};
|
||
this.OnPaintSlide = function(is_clear_overlay)
|
||
{
|
||
if (is_clear_overlay && oThis.Overlay)
|
||
{
|
||
var _ctx2 = oThis.Overlay.getContext('2d');
|
||
_ctx2.clearRect(oThis.Transition.Rect.x, oThis.Transition.Rect.y, oThis.Transition.Rect.w, oThis.Transition.Rect.h);
|
||
}
|
||
|
||
oThis.Transition.CalculateRectDemonstration();
|
||
oThis.PrepareSlide();
|
||
|
||
var _ctx1 = oThis.Canvas.getContext('2d');
|
||
|
||
var _image = null;
|
||
if (0 == oThis.SlideImage)
|
||
_image = oThis.SlideImages[0].Image.image;
|
||
else if (1 == oThis.SlideImage)
|
||
_image = oThis.SlideImages[1].Image.image;
|
||
|
||
if (null != _image)
|
||
{
|
||
_ctx1.drawImage(_image, oThis.Transition.Rect.x, oThis.Transition.Rect.y, oThis.Transition.Rect.w, oThis.Transition.Rect.h);
|
||
|
||
oThis.CheckWatermark(oThis.Transition);
|
||
}
|
||
|
||
|
||
|
||
// теперь запустим функцию
|
||
var _slides = oThis.HtmlPage.m_oLogicDocument.Slides;
|
||
var nSlideNum = oThis.SlideNum;
|
||
var oSlide = _slides[nSlideNum];
|
||
|
||
let oAnnotations = Asc.editor.getAnnotations();
|
||
let oPlayer = this.GetCurrentAnimPlayer();
|
||
if(oAnnotations && oPlayer)
|
||
{
|
||
let oGraphics = oPlayer.createGraphics(oThis.Canvas, oThis.Transition.Rect);
|
||
oAnnotations.draw(oGraphics, oSlide);
|
||
}
|
||
|
||
oThis.WaitAnimationEnd = false;
|
||
if (oSlide && oSlide.isAdvanceAfterTransition() && oThis.CheckSlideDuration === -1)
|
||
{
|
||
oThis.CheckSlideDuration = setTimeout(function()
|
||
{
|
||
oThis.CheckSlideDuration = -1;
|
||
if(!oThis.Mode)
|
||
return;
|
||
if(oThis.IsMainSeqFinished(nSlideNum))
|
||
{
|
||
oThis.AdvanceAfter();
|
||
}
|
||
else
|
||
{
|
||
oThis.WaitAnimationEnd = true;
|
||
}
|
||
}, oSlide.getAdvanceDuration());
|
||
}
|
||
};
|
||
this.EndDrawInk = function() {
|
||
const oSlide = oThis.GetCurrentSlide();
|
||
const oController = oSlide && oSlide.graphicObjects;
|
||
if (oController && oController.curState instanceof AscFormat.CInkDrawState) {
|
||
oController.curState.onMouseUp({ClickCount : 1, X : 0, Y : 0}, 0, 0, oThis.SlideNum);
|
||
}
|
||
};
|
||
this.AdvanceAfter = function()
|
||
{
|
||
if (oThis.IsPlayMode)
|
||
{
|
||
oThis.EndDrawInk();
|
||
oThis.TmpSlideVisible = oThis.SlideNum;
|
||
oThis.GoToNextVisibleSlide();
|
||
oThis.PauseAnimation(oThis.TmpSlideVisible);
|
||
if(oThis.SlideNum === oThis.GetSlidesCount() && oThis.isLoop())
|
||
{
|
||
oThis.SlideNum = oThis.GetFirstVisibleSlide();
|
||
oThis.StopAllAnimations();
|
||
}
|
||
oThis.HtmlPage.m_oApi.sync_DemonstrationSlideChanged(oThis.SlideNum);
|
||
oThis.StartSlide(true, false);
|
||
oThis.TmpSlideVisible = -1;
|
||
}
|
||
};
|
||
|
||
this.End = function(isNoUseFullScreen)
|
||
{
|
||
this.PointerRemove();
|
||
if (this.waitReporterObject)
|
||
{
|
||
this.EndWaitReporter(true);
|
||
this.HtmlPage.m_oApi.sync_endDemonstration();
|
||
}
|
||
this.HtmlPage.m_oApi.DemonstrationReporterEnd();
|
||
|
||
|
||
this.SlideAnnotations.clear();
|
||
if (this.HtmlPage.m_oApi.isOnlyDemonstration)
|
||
return;
|
||
|
||
if (true !== isNoUseFullScreen)
|
||
{
|
||
if (undefined !== window["AscDesktopEditor"])
|
||
window["AscDesktopEditor"]["SetFullscreen"](false);
|
||
}
|
||
|
||
if (!this.Mode)
|
||
return;
|
||
|
||
this.StopTransition();
|
||
|
||
if (null != this.DivEndPresentation)
|
||
{
|
||
this.DemonstrationDiv.removeChild(this.DivEndPresentation);
|
||
this.DivEndPresentation = null;
|
||
}
|
||
|
||
if (null != this.Overlay)
|
||
{
|
||
this.DemonstrationDiv.removeChild(this.Overlay);
|
||
this.Overlay = null;
|
||
}
|
||
|
||
this.DemonstrationDiv.removeChild(this.Canvas);
|
||
this.Canvas = null;
|
||
|
||
var _oldSlideNum = this.SlideNum;
|
||
|
||
this.SlideNum = -1;
|
||
this.DemonstrationDiv = null;
|
||
this.Mode = false;
|
||
|
||
var ctx1 = this.HtmlPage.m_oEditor.HtmlElement.getContext('2d');
|
||
ctx1.setTransform(1, 0, 0, 1, 0, 0);
|
||
|
||
this.unwrapKeyboard();
|
||
this.HtmlPage.m_oApi.sync_endDemonstration();
|
||
|
||
if (true)
|
||
{
|
||
if (_oldSlideNum < 0)
|
||
_oldSlideNum = 0;
|
||
var _slidesCount = this.HtmlPage.m_oApi.getCountPages();
|
||
if (_oldSlideNum >= _slidesCount)
|
||
_oldSlideNum = _slidesCount - 1;
|
||
|
||
if (0 <= _oldSlideNum)
|
||
this.HtmlPage.GoToPage(_oldSlideNum);
|
||
}
|
||
|
||
this.StartSlideNum = -1;
|
||
if(this.HtmlPage.m_oApi.isMasterMode())
|
||
{
|
||
if(this.StartSlideObject)
|
||
{
|
||
let oPresentation = this.HtmlPage.m_oApi.WordControl.m_oLogicDocument;
|
||
let nIdx = oPresentation.GetSlideIndex(this.StartSlideObject);
|
||
if(nIdx > -1)
|
||
{
|
||
this.HtmlPage.GoToPage(nIdx);
|
||
}
|
||
else
|
||
{
|
||
this.HtmlPage.GoToPage(0);
|
||
}
|
||
}
|
||
}
|
||
this.StartSlideObject = null;
|
||
this.StopAllAnimations();
|
||
|
||
};
|
||
|
||
this.IsVisibleSlide = function(slideNum)
|
||
{
|
||
if (slideNum == this.StartSlideNum)
|
||
return true;
|
||
|
||
if (-1 != this.TmpSlideVisible)
|
||
{
|
||
if (slideNum == this.TmpSlideVisible)
|
||
return true;
|
||
}
|
||
|
||
return this.HtmlPage.m_oLogicDocument.IsVisibleSlide(slideNum);
|
||
};
|
||
|
||
this.GoToNextVisibleSlide = function()
|
||
{
|
||
this.SlideNum++;
|
||
while (this.SlideNum < this.GetSlidesCount())
|
||
{
|
||
if (this.IsVisibleSlide(this.SlideNum))
|
||
break;
|
||
|
||
this.SlideNum++;
|
||
}
|
||
};
|
||
|
||
this.GoToPrevVisibleSlide = function()
|
||
{
|
||
this.SlideNum--;
|
||
while (this.SlideNum >= 0)
|
||
{
|
||
if (this.IsVisibleSlide(this.SlideNum))
|
||
break;
|
||
|
||
this.SlideNum--;
|
||
}
|
||
};
|
||
|
||
this.GetPrevVisibleSlide = function(isNoUseLoop)
|
||
{
|
||
var _slide = this.SlideNum - 1;
|
||
while (_slide >= 0)
|
||
{
|
||
if (this.IsVisibleSlide(_slide))
|
||
return _slide;
|
||
|
||
--_slide;
|
||
}
|
||
|
||
if ((true === isNoUseLoop) || !this.isLoop())
|
||
return -1;
|
||
|
||
_slide = this.GetSlidesCount() - 1;
|
||
while (_slide > this.SlideNum)
|
||
{
|
||
if (this.IsVisibleSlide(_slide))
|
||
return _slide;
|
||
|
||
--_slide;
|
||
}
|
||
|
||
return this.GetSlidesCount() - 1;
|
||
};
|
||
|
||
this.GetNextVisibleSlide = function()
|
||
{
|
||
var _slide = this.SlideNum + 1;
|
||
while (_slide < this.GetSlidesCount())
|
||
{
|
||
if (this.IsVisibleSlide(_slide))
|
||
return _slide;
|
||
|
||
++_slide;
|
||
}
|
||
|
||
if (!this.isLoop())
|
||
return this.GetSlidesCount();
|
||
|
||
_slide = 0;
|
||
while (_slide < this.SlideNum)
|
||
{
|
||
if (this.IsVisibleSlide(_slide))
|
||
return _slide;
|
||
|
||
++_slide;
|
||
}
|
||
|
||
return -1;
|
||
};
|
||
|
||
this.GetFirstVisibleSlide = function()
|
||
{
|
||
var _slide = 0;
|
||
while (_slide < this.GetSlidesCount())
|
||
{
|
||
if (this.IsVisibleSlide(_slide))
|
||
return _slide;
|
||
++_slide;
|
||
}
|
||
return 0;
|
||
};
|
||
|
||
this.GetLastVisibleSlide = function()
|
||
{
|
||
var _slide = this.GetSlidesCount() - 1;
|
||
while (_slide >= 0)
|
||
{
|
||
if (this.IsVisibleSlide(_slide))
|
||
return _slide;
|
||
--_slide;
|
||
}
|
||
return this.GetSlidesCount() - 1;
|
||
};
|
||
|
||
this.GetCurrentAnimPlayer = function()
|
||
{
|
||
let oSlide = this.GetCurrentSlide();
|
||
if(!oSlide)
|
||
{
|
||
return null;
|
||
}
|
||
return oSlide.getAnimationPlayer();
|
||
};
|
||
|
||
this.GetCurrentSlide = function()
|
||
{
|
||
return this.GetSlide(this.SlideNum);
|
||
};
|
||
|
||
this.OnNextSlide = function(isNoSendFormReporter)
|
||
{
|
||
if(this.OnNextSlideAnimPlayer())
|
||
{
|
||
this.sendNextFromReporter(isNoSendFormReporter);
|
||
return;
|
||
}
|
||
this.NextSlide(isNoSendFormReporter);
|
||
};
|
||
|
||
this.OnNextSlideAnimPlayer = function ()
|
||
{
|
||
var oPlayer = this.GetCurrentAnimPlayer();
|
||
if(oPlayer)
|
||
{
|
||
if(oPlayer.onNextSlide())
|
||
{
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
|
||
this.sendNextFromReporter = function (isNoSendFormReporter) {
|
||
if (this.HtmlPage.m_oApi.isReporterMode && !isNoSendFormReporter)
|
||
this.HtmlPage.m_oApi.sendFromReporter("{ \"reporter_command\" : \"next\" }");
|
||
};
|
||
this.sendPrevFromReporter = function (isNoSendFormReporter) {
|
||
if (this.HtmlPage.m_oApi.isReporterMode && !isNoSendFormReporter)
|
||
this.HtmlPage.m_oApi.sendFromReporter("{ \"reporter_command\" : \"prev\" }");
|
||
};
|
||
this.NextSlide = function(isNoSendFormReporter, isNoFromEvent)
|
||
{
|
||
if (!this.Mode)
|
||
return;
|
||
|
||
this.TmpSlideVisible = this.SlideNum;
|
||
this.PauseAnimation(this.SlideNum);
|
||
this.sendNextFromReporter(isNoSendFormReporter);
|
||
this.CorrectSlideNum();
|
||
|
||
var _is_transition = this.Transition.IsPlaying();
|
||
if (!_is_transition)
|
||
{
|
||
//this.SlideNum++;
|
||
this.GoToNextVisibleSlide();
|
||
}
|
||
|
||
if (this.isLoop() && (this.SlideNum >= this.GetSlidesCount())) {
|
||
this.StopAllAnimations();
|
||
this.SlideNum = this.GetFirstVisibleSlide();
|
||
this.StopAllAnimations();
|
||
}
|
||
|
||
if (this.SlideNum > this.GetSlidesCount())
|
||
this.End();
|
||
else
|
||
{
|
||
this.HtmlPage.m_oNotesApi.IsEmptyDrawCheck = true;
|
||
this.HtmlPage.m_oApi.sync_DemonstrationSlideChanged(this.SlideNum);
|
||
this.StartSlide(!_is_transition, false);
|
||
this.HtmlPage.m_oNotesApi.IsEmptyDrawCheck = false;
|
||
}
|
||
|
||
this.TmpSlideVisible = -1;
|
||
};
|
||
|
||
this.isLoop = function()
|
||
{
|
||
return (this.HtmlPage.m_oApi.WordControl.m_oLogicDocument.isLoopShowMode() || this.HtmlPage.m_oApi.isEmbedVersion);
|
||
};
|
||
|
||
this.OnPrevSlide = function(isNoSendFormReporter)
|
||
{
|
||
var oPlayer = this.GetCurrentAnimPlayer();
|
||
if(oPlayer)
|
||
{
|
||
if(oPlayer.onPrevSlide())
|
||
{
|
||
this.sendPrevFromReporter(isNoSendFormReporter);
|
||
return;
|
||
}
|
||
}
|
||
return this.PrevSlide(isNoSendFormReporter);
|
||
};
|
||
|
||
this.PrevSlide = function(isNoSendFormReporter)
|
||
{
|
||
if (!this.Mode)
|
||
return;
|
||
|
||
this.TmpSlideVisible = this.SlideNum;
|
||
this.sendPrevFromReporter(isNoSendFormReporter);
|
||
if (this.GetFirstVisibleSlide() !== this.SlideNum || this.isLoop())
|
||
{
|
||
this.CorrectSlideNum();
|
||
this.StartSlideBackward();
|
||
this.HtmlPage.m_oApi.sync_DemonstrationSlideChanged(this.SlideNum);
|
||
}
|
||
|
||
this.TmpSlideVisible = -1;
|
||
};
|
||
|
||
this.GoToSlide = function(slideNum, isNoSendFormReporter)
|
||
{
|
||
if (!this.Mode)
|
||
return;
|
||
|
||
if(this.SlideNum === slideNum)
|
||
{
|
||
return;
|
||
}
|
||
|
||
this.PauseAnimation(this.SlideNum);
|
||
|
||
if (this.HtmlPage.m_oApi.isReporterMode && !isNoSendFormReporter)
|
||
this.HtmlPage.m_oApi.sendFromReporter("{ \"reporter_command\" : \"go_to_slide\", \"slide\" : " + slideNum + " }");
|
||
|
||
this.CorrectSlideNum();
|
||
|
||
if ((slideNum == this.SlideNum) || (slideNum < 0) || (slideNum >= this.GetSlidesCount()))
|
||
return;
|
||
|
||
this.SlideNum = slideNum;
|
||
this.HtmlPage.m_oApi.sync_DemonstrationSlideChanged(this.SlideNum);
|
||
|
||
this.StartSlide(true, false);
|
||
};
|
||
|
||
this.Play = function(isNoSendFormReporter)
|
||
{
|
||
this.IsPlayMode = true;
|
||
if(this.IsPausedAnimation(this.SlideNum) || -1 !== this.CheckSlideDuration)
|
||
{
|
||
this.StartAnimation(this.SlideNum);
|
||
}
|
||
else
|
||
{
|
||
this.NextSlide(isNoSendFormReporter);
|
||
}
|
||
};
|
||
|
||
this.Pause = function()
|
||
{
|
||
this.IsPlayMode = false;
|
||
this.StopTransition();
|
||
this.PauseAnimation(this.SlideNum);
|
||
};
|
||
|
||
this.OnRecalculateAnimationFrame = function(oPlayer)
|
||
{
|
||
oPlayer.drawFrame(oThis.Canvas, this.Transition.Rect);
|
||
};
|
||
|
||
// manipulators
|
||
this.onKeyDownCode = function(code)
|
||
{
|
||
let bDropGoToSlideStack = !!this.GoToSlideShortcutStack.length;
|
||
switch (code)
|
||
{
|
||
case 13: // enter
|
||
{
|
||
if (this.GoToSlideShortcutStack.length)
|
||
{
|
||
const nStackNumber = parseInt(this.GoToSlideShortcutStack.join(''), 10);
|
||
const nSlide = Math.max(1, Math.min(nStackNumber, this.GetSlidesCount())) - 1;
|
||
oThis.GoToSlide(nSlide);
|
||
}
|
||
else
|
||
{
|
||
oThis.OnNextSlide();
|
||
}
|
||
break;
|
||
}
|
||
case 32: // space
|
||
case 34: // PgDn
|
||
case 39: // right arrow
|
||
case 40: // bottom arrow
|
||
{
|
||
oThis.OnNextSlide();
|
||
break;
|
||
}
|
||
case 33:
|
||
case 37:
|
||
case 38:
|
||
{
|
||
oThis.OnPrevSlide();
|
||
break;
|
||
}
|
||
case 36: // home
|
||
{
|
||
oThis.GoToSlide(oThis.GetFirstVisibleSlide());
|
||
break;
|
||
}
|
||
case 35: // end
|
||
{
|
||
oThis.GoToSlide(oThis.GetLastVisibleSlide());
|
||
break;
|
||
}
|
||
case 27: // escape
|
||
{
|
||
if(Asc.editor.isInkDrawerOn())
|
||
{
|
||
Asc.editor.stopInkDrawer();
|
||
}
|
||
else
|
||
{
|
||
Asc.editor.EndDemonstration();
|
||
}
|
||
break;
|
||
}
|
||
case 48: // 0
|
||
case 49: // 1
|
||
case 50: // 2
|
||
case 51: // 3
|
||
case 52: // 4
|
||
case 53: // 5
|
||
case 54: // 6
|
||
case 55: // 7
|
||
case 56: // 8
|
||
case 57: // 9
|
||
bDropGoToSlideStack = false;
|
||
this.GoToSlideShortcutStack.push(code - 48);
|
||
break;
|
||
case 96: // numpad0
|
||
case 97: // numpad1
|
||
case 98: // numpad2
|
||
case 99: // numpad3
|
||
case 100: // numpad4
|
||
case 101: // numpad5
|
||
case 102: // numpad6
|
||
case 103: // numpad7
|
||
case 104: // numpad8
|
||
case 105: // numpad9
|
||
bDropGoToSlideStack = false;
|
||
this.GoToSlideShortcutStack.push(code - 96);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
if (bDropGoToSlideStack)
|
||
{
|
||
this.GoToSlideShortcutStack = [];
|
||
}
|
||
};
|
||
|
||
this.onKeyDown = function(e)
|
||
{
|
||
AscCommon.check_KeyboardEvent(e);
|
||
|
||
if (oThis.HtmlPage.m_oApi.reporterWindow)
|
||
{
|
||
var _msg_ = {
|
||
"main_command" : true,
|
||
"keyCode" : AscCommon.global_keyboardEvent.KeyCode
|
||
};
|
||
|
||
oThis.HtmlPage.m_oApi.sendToReporter(JSON.stringify(_msg_));
|
||
oThis.HtmlPage.IsKeyDownButNoPress = true;
|
||
return false;
|
||
}
|
||
|
||
this.onKeyDownCode(AscCommon.global_keyboardEvent.KeyCode);
|
||
|
||
oThis.HtmlPage.IsKeyDownButNoPress = true;
|
||
return false;
|
||
};
|
||
|
||
this.documentMouseInfo = function(e)
|
||
{
|
||
var transition = oThis.Transition;
|
||
if ((oThis.SlideNum >= 0 && oThis.SlideNum < oThis.GetSlidesCount()) && (!transition || !transition.IsPlaying()))
|
||
{
|
||
AscCommon.check_MouseDownEvent(e, false);
|
||
|
||
var _w = AscCommon.AscBrowser.convertToRetinaValue(transition.Rect.w);
|
||
var _h = AscCommon.AscBrowser.convertToRetinaValue(transition.Rect.h);
|
||
var _w_mm = oThis.HtmlPage.m_oLogicDocument.GetWidthMM();
|
||
var _h_mm = oThis.HtmlPage.m_oLogicDocument.GetHeightMM();
|
||
|
||
var _x = AscCommon.global_mouseEvent.X - AscCommon.AscBrowser.convertToRetinaValue(transition.Rect.x);
|
||
var _y = AscCommon.global_mouseEvent.Y - AscCommon.AscBrowser.convertToRetinaValue(transition.Rect.y);
|
||
|
||
if (oThis.HtmlPage.m_oApi.isReporterMode)
|
||
{
|
||
_x -= ((oThis.HtmlPage.m_oMainParent.AbsolutePosition.L * g_dKoef_mm_to_pix) >> 0);
|
||
}
|
||
if(oThis.HtmlPage.m_oApi.isEmbedVersion)
|
||
{
|
||
_y -= oThis.HtmlPage.Y;
|
||
}
|
||
|
||
_x = _x * _w_mm / _w;
|
||
_y = _y * _h_mm / _h;
|
||
|
||
return { x : _x, y : _y, page : oThis.SlideNum };
|
||
}
|
||
return null;
|
||
};
|
||
|
||
this.convertCoordsToCursorWR = function(x, y)
|
||
{
|
||
var transition = oThis.Transition;
|
||
if(transition)
|
||
{
|
||
var _w = AscCommon.AscBrowser.convertToRetinaValue(transition.Rect.w);
|
||
var _h = AscCommon.AscBrowser.convertToRetinaValue(transition.Rect.h);
|
||
var _w_mm = oThis.HtmlPage.m_oLogicDocument.GetWidthMM();
|
||
var _h_mm = oThis.HtmlPage.m_oLogicDocument.GetHeightMM();
|
||
|
||
var _x = x * _w / _w_mm;
|
||
var _y = y * _h / _h_mm;
|
||
|
||
|
||
if (oThis.HtmlPage.m_oApi.isReporterMode)
|
||
{
|
||
_x += ((oThis.HtmlPage.m_oMainParent.AbsolutePosition.L * g_dKoef_mm_to_pix) >> 0);
|
||
}
|
||
if(oThis.HtmlPage.m_oApi.isEmbedVersion)
|
||
{
|
||
_y += oThis.HtmlPage.Y;
|
||
}
|
||
|
||
var nRetX = _x + AscCommon.AscBrowser.convertToRetinaValue(transition.Rect.x);
|
||
var nRetY = _y + AscCommon.AscBrowser.convertToRetinaValue(transition.Rect.y);
|
||
|
||
return { X : nRetX, Y : nRetY, Error: false};
|
||
}
|
||
|
||
return { x : 0, y : 0, Error: true};
|
||
};
|
||
|
||
this.CheckMouseDown = function(x, y, page)
|
||
{
|
||
var ret = oThis.HtmlPage.m_oLogicDocument.OnMouseDown(AscCommon.global_mouseEvent, x, y, page);
|
||
if (ret == keydownresult_PreventAll && !Asc.editor.isInkDrawerOn())
|
||
{
|
||
// mouse up will not sended!!!
|
||
oThis.HtmlPage.m_oLogicDocument.OnMouseUp(AscCommon.global_mouseEvent, x, y, page);
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
|
||
this.CheckHideCursor = function()
|
||
{
|
||
if(!oThis.Canvas)
|
||
{
|
||
return;
|
||
}
|
||
var nShowTime = 3000;
|
||
if(oThis.LastMoveTime !== null && (new Date()).getTime() - oThis.LastMoveTime > nShowTime)
|
||
{
|
||
if(oThis.Canvas.style.cursor !== "none" && oThis.Canvas.style.cursor !== "pointer")
|
||
{
|
||
oThis.Canvas.style.cursor = "none";
|
||
}
|
||
}
|
||
};
|
||
|
||
this.onMouseDown = function(e)
|
||
{
|
||
oThis.startPageX = e.pageX;
|
||
oThis.startPageY = e.pageY;
|
||
|
||
AscCommon.global_mouseEvent.LockMouse()
|
||
var documentMI = oThis.documentMouseInfo(e);
|
||
if (documentMI)
|
||
{
|
||
var oApi = oThis.HtmlPage.m_oApi;
|
||
if(!oApi.isDrawSlideshowAnnotations())
|
||
{
|
||
oThis.HtmlPage.m_oApi.disableReporterEvents = true;
|
||
}
|
||
|
||
// после fullscreen возможно изменение X, Y после вызова Resize.
|
||
oThis.HtmlPage.checkBodyOffset();
|
||
|
||
if(oThis.CheckMouseDown(documentMI.x, documentMI.y, documentMI.page))
|
||
{
|
||
oThis.HtmlPage.m_oApi.disableReporterEvents = false;
|
||
var oMsg;
|
||
if (oApi.isReporterMode)
|
||
{
|
||
oMsg =
|
||
{
|
||
"reporter_command": "on_mouse_down",
|
||
"x": documentMI.x,
|
||
"y": documentMI.y,
|
||
"page": documentMI.page
|
||
};
|
||
oApi.sendFromReporter(JSON.stringify(oMsg));
|
||
}
|
||
if (oApi.reporterWindow)
|
||
{
|
||
oMsg =
|
||
{
|
||
"main_command": true,
|
||
"on_mouse_down": true,
|
||
"x": documentMI.x,
|
||
"y": documentMI.y,
|
||
"page": documentMI.page
|
||
};
|
||
oApi.sendToReporter(JSON.stringify(oMsg));
|
||
}
|
||
return;
|
||
}
|
||
oThis.HtmlPage.m_oApi.disableReporterEvents = false;
|
||
}
|
||
oThis.isMouseDown = true;
|
||
AscCommon.stopEvent(e);
|
||
return false;
|
||
};
|
||
|
||
this.onMouseLeave = function(e)
|
||
{
|
||
if (!oThis.HtmlPage.m_oApi.isReporterMode)
|
||
return;
|
||
if (!oThis.HtmlPage.reporterPointer)
|
||
return;
|
||
|
||
oThis.PointerRemove();
|
||
|
||
e.preventDefault();
|
||
return false;
|
||
};
|
||
|
||
this.onMouseMove = function(e)
|
||
{
|
||
oThis.LastMoveTime = (new Date()).getTime();
|
||
if (true)
|
||
{
|
||
var documentMI = oThis.documentMouseInfo(e);
|
||
if (documentMI)
|
||
oThis.HtmlPage.m_oLogicDocument.OnMouseMove(AscCommon.global_mouseEvent, documentMI.x, documentMI.y, documentMI.page);
|
||
}
|
||
|
||
if (!oThis.HtmlPage.reporterPointer)
|
||
{
|
||
AscCommon.stopEvent(e);
|
||
return;
|
||
}
|
||
|
||
var _x = 0;
|
||
var _y = 0;
|
||
if (e.pageX || e.pageY)
|
||
{
|
||
_x = e.pageX;
|
||
_y = e.pageY;
|
||
}
|
||
else if (e.clientX || e.clientY)
|
||
{
|
||
_x = e.clientX;
|
||
_y = e.clientY;
|
||
}
|
||
|
||
_x = (_x * AscCommon.AscBrowser.zoom) >> 0;
|
||
_y = (_y * AscCommon.AscBrowser.zoom) >> 0;
|
||
|
||
_x -= parseInt(oThis.HtmlPage.m_oMainParent.HtmlElement.style.left);
|
||
_y -= parseInt(oThis.HtmlPage.m_oMainParent.HtmlElement.style.top);
|
||
|
||
_x *= AscCommon.AscBrowser.retinaPixelRatio;
|
||
_y *= AscCommon.AscBrowser.retinaPixelRatio;
|
||
|
||
var _rect = oThis.Transition.Rect;
|
||
_x -= _rect.x;
|
||
_y -= _rect.y;
|
||
_x /= _rect.w;
|
||
_y /= _rect.h;
|
||
|
||
oThis.PointerMove(_x, _y);
|
||
|
||
|
||
AscCommon.stopEvent(e);
|
||
return false;
|
||
};
|
||
|
||
this.onMouseUp = function(e, isAttack, isFromMainToReporter, isFromMainToReporterMouseDown)
|
||
{
|
||
if (!oThis.isMouseDown && true !== isAttack)
|
||
return;
|
||
|
||
AscCommon.global_mouseEvent.UnLockMouse();
|
||
|
||
const isMouseDown = oThis.isMouseDown || isFromMainToReporterMouseDown;
|
||
oThis.isMouseDown = false;
|
||
if (isFromMainToReporter && oThis.PointerDiv && oThis.HtmlPage.m_oApi.isReporterMode)
|
||
oThis.PointerRemove();
|
||
|
||
let handleSwipe = false;
|
||
if (e.pointerType === "touch")
|
||
{
|
||
let iN = AscFormat.isRealNumber;
|
||
if (iN(oThis.startPageX) && iN(oThis.startPageY) && iN(e.pageX) && iN(e.pageY) )
|
||
{
|
||
if (e.pageX - oThis.startPageX > 20)
|
||
{
|
||
oThis.OnPrevSlide();
|
||
handleSwipe = true;
|
||
}
|
||
else if (oThis.startPageX - e.pageX > 20 ||
|
||
(Math.abs(e.pageX - oThis.startPageX) < 1 &&
|
||
Math.abs(e.pageY- oThis.startPageY) < 1))
|
||
{
|
||
oThis.OnNextSlide();
|
||
handleSwipe = true;
|
||
}
|
||
}
|
||
}
|
||
this.startPageX = null;
|
||
this.startPageY = null;
|
||
if (handleSwipe || oThis.PointerDiv && oThis.HtmlPage.m_oApi.isReporterMode)
|
||
{
|
||
AscCommon.stopEvent(e);
|
||
return false;
|
||
}
|
||
|
||
if (oThis.HtmlPage.m_oApi.reporterWindow && !Asc.editor.isDrawSlideshowAnnotations())
|
||
{
|
||
var _msg_ = {
|
||
"main_command" : true,
|
||
"mouseUp" : true,
|
||
"isMainMouseDown": isMouseDown
|
||
};
|
||
|
||
oThis.HtmlPage.m_oApi.sendToReporter(JSON.stringify(_msg_));
|
||
|
||
AscCommon.stopEvent(e);
|
||
return false;
|
||
}
|
||
|
||
var documentMI = oThis.documentMouseInfo(e);
|
||
if (documentMI)
|
||
{
|
||
var ret = oThis.HtmlPage.m_oLogicDocument.OnMouseUp(AscCommon.global_mouseEvent, documentMI.x, documentMI.y, documentMI.page);
|
||
if (ret == keydownresult_PreventAll)
|
||
return;
|
||
}
|
||
|
||
// next slide
|
||
oThis.CorrectSlideNum();
|
||
if (isMouseDown) {
|
||
var _is_transition = oThis.Transition.IsPlaying();
|
||
if (_is_transition)
|
||
{
|
||
oThis.OnNextSlide();
|
||
}
|
||
else
|
||
{
|
||
if (oThis.SlideNum < 0 || oThis.SlideNum >= oThis.GetSlidesCount())
|
||
{
|
||
oThis.OnNextSlide();
|
||
}
|
||
else
|
||
{
|
||
var _slides = oThis.HtmlPage.m_oLogicDocument.Slides;
|
||
var _transition = _slides[oThis.SlideNum].transition;
|
||
|
||
if (_transition.SlideAdvanceOnMouseClick === true)
|
||
{
|
||
oThis.OnNextSlide();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
AscCommon.stopEvent(e);
|
||
return false;
|
||
};
|
||
|
||
this.onMouseWheelDelta = function(delta)
|
||
{
|
||
if (delta > 0)
|
||
{
|
||
this.OnNextSlide();
|
||
}
|
||
else
|
||
{
|
||
this.OnPrevSlide();
|
||
}
|
||
};
|
||
|
||
this.onMouseWhell = function(e)
|
||
{
|
||
if (undefined !== window["AscDesktopEditor"])
|
||
{
|
||
if (false === window["AscDesktopEditor"]["CheckNeedWheel"]())
|
||
return;
|
||
}
|
||
|
||
var delta = 0;
|
||
if (undefined != e.wheelDelta)
|
||
delta = (e.wheelDelta > 0) ? -1 : 1;
|
||
else
|
||
delta = (e.detail > 0) ? 1 : -1;
|
||
|
||
if (oThis.HtmlPage.m_oApi.reporterWindow)
|
||
{
|
||
var _msg_ = {
|
||
"main_command" : true,
|
||
"mouseWhell" : delta
|
||
};
|
||
|
||
oThis.HtmlPage.m_oApi.sendToReporter(JSON.stringify(_msg_));
|
||
AscCommon.stopEvent(e);
|
||
return false;
|
||
}
|
||
|
||
oThis.onMouseWheelDelta(delta);
|
||
|
||
AscCommon.stopEvent(e);
|
||
return false;
|
||
};
|
||
|
||
this.Resize = function(isNoSend)
|
||
{
|
||
if (isNoSend !== true && oThis.HtmlPage.m_oApi.reporterWindow)
|
||
{
|
||
var _msg_ = {
|
||
"main_command" : true,
|
||
"resize" : true
|
||
};
|
||
|
||
oThis.HtmlPage.m_oApi.sendToReporter(JSON.stringify(_msg_));
|
||
}
|
||
else if (isNoSend !== true && oThis.HtmlPage.m_oApi.isReporterMode)
|
||
{
|
||
var _msg_ = {
|
||
"reporter_command" : "resize"
|
||
};
|
||
|
||
oThis.HtmlPage.m_oApi.sendFromReporter(JSON.stringify(_msg_));
|
||
}
|
||
|
||
if (!this.Mode)
|
||
return;
|
||
|
||
var _width = this.DemonstrationDiv.clientWidth;
|
||
var _height = this.DemonstrationDiv.clientHeight;
|
||
|
||
if (_width == this.DivWidth && _height == this.DivHeight && true !== isNoSend)
|
||
return;
|
||
|
||
oThis.HtmlPage.m_oApi.disableReporterEvents = true;
|
||
|
||
this.DivWidth = _width;
|
||
this.DivHeight = _height;
|
||
|
||
this.Canvas.width = AscCommon.AscBrowser.convertToRetinaValue(_width, true);
|
||
this.Canvas.height = AscCommon.AscBrowser.convertToRetinaValue(_height, true);
|
||
|
||
this.Transition.CalculateRectDemonstration();
|
||
|
||
this.SlideIndexes[0] = -1;
|
||
this.SlideIndexes[1] = -1;
|
||
|
||
if (this.Overlay)
|
||
{
|
||
this.Overlay.width = this.Canvas.width;
|
||
this.Overlay.height = this.Canvas.height;
|
||
}
|
||
|
||
if (this.SlideNum < this.GetSlidesCount())
|
||
this.StartSlide(this.Transition.IsPlaying(), false);
|
||
|
||
oThis.HtmlPage.m_oApi.disableReporterEvents = false;
|
||
};
|
||
|
||
this.PointerMove = function(x, y, w, h)
|
||
{
|
||
if (!this.PointerDiv)
|
||
{
|
||
this.PointerDiv = document.createElement("div");
|
||
if (AscCommon.AscBrowser.retinaPixelRatio > 1.5)
|
||
{
|
||
this.PointerDiv.setAttribute("style", "position:absolute;z-index:100;pointer-events:none;width:28px;height:28px;margin:0;padding:0;border:none;background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA+dpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTctMDctMjZUMTU6MTc6MzIrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE3LTA3LTI2VDE1OjU1OjQ3KzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE3LTA3LTI2VDE1OjU1OjQ3KzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRTk4RENGNDcyMDExMUU3QjE0ODlFOEJERTU4NTc4NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRTk4RENGNTcyMDExMUU3QjE0ODlFOEJERTU4NTc4NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkJFOThEQ0YyNzIwMTExRTdCMTQ4OUU4QkRFNTg1Nzg3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkJFOThEQ0YzNzIwMTExRTdCMTQ4OUU4QkRFNTg1Nzg3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+4SWSuQAABttJREFUeNrcm8+PFEUUx6tranZ3hh1Ww4FwMQIJRr1xEmIEjH+AF08mHl3ictTgj7uJZ1lhiSZKwsmTdyNgDJiQcNtgSGCNF8JJ11l2Zrunu+2adE3evP6+qu7ZXX9N8tLVPbPV/en36tV7r2qjPM9V+Yk8R187qvFbfo+cXc/JNdQOfa+ko2kA1URQH+hTB8onqL+IHo0HLiQ6cD4LIJUscC7BTkGaBnDac9QBSB+gDy4j7Qh8pzz9Qg3WgdIACl1330njkb75jMFxodcjdpRgKxr0wSFpCW0dMFcVMEsqKWvTvjLycrQEaTxwFBDBtIS2O0cmKwE6TXAgzeA4KB/LFUjDXDh/KP7QdcWnSRXQXArE9eXgUvbcKXn2jE8TPg1yOMPahl03TKtNAFNyHIGjz2FRDU55bjQGkSkiECtt0jbsBbQELSpBe1Rjo1JaAK7u1BMhDWoAyTVGwdpEfJAhQARnJRGmIAUiItefJpqEToabpgQ2xwA5qKRF5dEeBUvAWFYeE6Uy4TEBOKTBOQJIJQQpASI4w8ZzBGLZkETSPCg5FwpggebJcd4DibTAPSc1y7iEjANmyc1ck3aExiB9CGnszTEoLlybLQIpadB5yoRoLyZzqTSHZkKcqqkWfWPQpz0HuUAEQVIzRYDUPJ3W6N/5HBOaQytTnmkw/3HzdIAdBkrHJTdTZKLUNKnmdWBaceO3xYIB6kVrORkDALkGOwTUwbeZNhAg1Z7tc4eZtAoEBCmBpOFdhJwMjz1bHsh5oEUnE1PNNzc7w2vXn4t/uHk42/i1l/2xaSGUfmYp1kef78+9fvbJwjtv/xYtLQ3IuGsJL4J62rR8nhH5m5QxjEO2KM/zxZpaoiDdUg6U4s4nWhx8sXZ8cOnKibzfb3vyNhX1eklnZflBZ+X8w1KDw0Is8HYpT0vZJtcH5e+c7JQvKCbOavwyLGCPAdIxVAduCjIfDrtbyxdOFlo7ohp82ufOPO5dXb0XLSxsA7in5NwBcsiYQY4BNcgmpBQpNB7HMguc/SQ3bh3pv7ty0jPtGE+UJIWE3hJD3fE4iWwGl68emwWOQg5Wrxxn0ZIUHbU8GctEtKA935QBswrrUAafX35B7fIzWF07YfsCUMaTc4o1Ic2iBKk+oz0Z/fghrLeUHIp56UV18PrX6tCj++rQxi/jtr0Gc52iD9sXgNM1k+mpqEfPUCqENZn4xq3DItx336r2a68WOin4jRm37TXzMoYs+2o1rPfAGpBGnrtBTXRy0+zRRg89bPeTi6rwjNWbFNe6H1+EgGVfqEJXt+isuJMRp6lA1XoibhKvuP/Tr8hTw+lTxV9Wb1/21bSSDp9fq//5Rws1fl/tEl634Rd0/bd/lqeF23eKv6zevuxrN2sUk+fXDcrpvtJ6po8d7aM7bH/6mSqim+pNimv2O/jWiziVVbXrrE1AWN1wRUesOs+dO/MEPexo/b768823VPLjT8VJOhbbttfsd+hjg3CWNaBSfi1YG4seZAntPItDUQy6WB57ZXuxmJyXfj919g1vcO0cSp57g+9n79z8vsgwNovTrVL6ZRy6ReJRFJPGZeA9Cbi1J1vOPBXnES8U2ZSnc+H8A++It2B57v2JzSzK9Clh6dGIPYO0QDPtG2qYZCrULRNSZhgfO+8tPyzM6/GsHs9mFGXaFLO+OSwHFRm0ZzEkrVG3jIlZjGVx7dK9WSBdukT7QukPg+T+oOJsdIOFEAmOAg5tPtf75su73Y8+WLfjKQRmf9P98P31g9e+ulvmgkMA6GQkaFJ0QNbJHADV67lAVt9ljqe7RyULBzZgWX3dbL6ibQfoMoM2gKS1l3lWYOqyesxuik4JtQQCiWQHaDohWk6cdk0N83SFnQRkz+ihaZWsadnQyRDITg2nUzFTU2MJ2UHqwHJYxirU8YyF35hpEmkqEZxNEDAHS8gjT8oimVu8i9I91+SOUDVDkJVpwrCbRWypGOVjvnV2B7hXiy8UbmcWb2qEB42EnQ0KrPRQuL1YPuOQcU3toWlCGQEuAnAR2GvGzZOu7+3FAmgCIiZfRFN7DEZgN4MS4DIGuddL2FRjPKIZhSZ64zFPVG1TQlCe7tMmhBEASwPTQ8ZNFG2rarJxLgXa249tJCOQzaDcFGoQmV6dBf+MrOy0SFCw1xuBJAkmwkbYTKOJdnLBPPki5H5s5UqFtpRFZDybMELRJvOMvZwt+GsWGOznZrwssBtR1KAEyfd+oa0a2gO3H9spEZSU9E40GHkgI7B7IfsHNsTWhZoqbxq+Q9aTm1JYeszUv2NLM6rdVjQYKbz/GUkONqj+3ZvSgzvwkQYlTebqP/hvBX8JMAASRMzjAJSzzwAAAABJRU5ErkJggg=='); background-size: 28px 28px;");
|
||
}
|
||
else
|
||
{
|
||
this.PointerDiv.setAttribute("style", "position:absolute;z-index:100;pointer-events:none;width:28px;height:28px;margin:0;padding:0;border:none;background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA+dpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTctMDctMjZUMTU6MTc6MzIrMDM6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE3LTA3LTI2VDE1OjU0OjExKzAzOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE3LTA3LTI2VDE1OjU0OjExKzAzOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4NTgwNDIyNDcyMDExMUU3OTRGNTgwQjYzODE3QjJFRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo4NTgwNDIyNTcyMDExMUU3OTRGNTgwQjYzODE3QjJFRSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjg1ODA0MjIyNzIwMTExRTc5NEY1ODBCNjM4MTdCMkVFIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjg1ODA0MjIzNzIwMTExRTc5NEY1ODBCNjM4MTdCMkVFIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+dWpcyAAAAsxJREFUeNq8lr+KFEEQxnt6+nZG53Y9jxMzUTAwMDP1CQSRywQjwcjAJxBE8AkMjAQjwUxE8AmMzQQDQTGTO867/ePO7M7O2DVXNXxb2wuzcNjw0b13vfXbqq6q7qiua+NHpGRZeo2iUStVLL1u5RRE5hjmGD7bNUAxvgBVMMse45QXAnEBIRiBCCqVIoDSqLSHYnyL1VOzQBEosLnXDGaMRsl7I6fC6Ng4KWGlPAvUKWAJkMIrXxOJ9gwRJt4Q5BzrPM8pQK2ECGAEmkL4g4nl4OwEmDAg89pmZQxOIbQGQkmwv14TtmPVGcs5WwkPhlOABBp4XeBZoD0FnAGsp7xfqIRahEKasuFthu167QA04b2GjRQMG8LfK8jUOSsWD+0aDzOG7Ag0f/3mRv723fXFj599shpfuzpKH9z/nj56+E39CEkg0UyAke80AwUQr/a8LnldpvXo8ZPbs4+frpjA6N2986v/6uVnvzz0+u11wOsjrxP2nqIw1d0lVplKoc3Is3UwGvQ/2qOSS9duw7Kq8ONA4ScURjGe7N8zu1+/NKK1DN6D9boFJdJyQk1Ze+zkzGhkL56ZaDBoRGsTnZYb7wm1wCVZ85+HDVwxKw2ZslG+MHn63NTDYSNam9PrzfCeUt0WK7ZtAIK106Q3pb4Ai/cfzNHNW41oLYP3FNDA5/ADKg2sAl2/bVdUZ5T6rXXyij2TsuBanPB3cgAveUx12FfdBYt9j9Wl8I+57g6hBo+5BsfyQwiYQXchaB+gFzdsbQL9A7ARw+gmKVzg7HK4iC0YnnZo3kPuLGMI7dJZOri1S+h5ser6YrTL9TRmTSGJBFg7uK9K9VDCrl+wwS4XsIRPgOJhJR5KSENPwAUAN3liFKpEVkKKUP0am/OXN31EBWvRqcIvA41gHjjbrs/ElcJHD/WDRwyc5UO4BUoCRGDEysPnLJ/6/wQYAGSEwicuWovcAAAAAElFTkSuQmCC'); background-size: 28px 28px;");
|
||
}
|
||
this.DemonstrationDiv.appendChild(this.PointerDiv);
|
||
}
|
||
var _rect = this.Transition.Rect;
|
||
this.PointerDiv.style.left = ((((_rect.x + x * _rect.w) / AscCommon.AscBrowser.retinaPixelRatio) - 14) >> 0) + "px";
|
||
this.PointerDiv.style.top = ((((_rect.y + y * _rect.h) / AscCommon.AscBrowser.retinaPixelRatio) - 14) >> 0) + "px";
|
||
|
||
if (this.HtmlPage.m_oApi.isReporterMode)
|
||
{
|
||
this.Canvas.style.cursor = "none";
|
||
if (this.Overlay)
|
||
this.Overlay.style.cursor = "none";
|
||
|
||
var _msg_ = {
|
||
"reporter_command" : "pointer_move",
|
||
"x" : x,
|
||
"y" : y
|
||
};
|
||
this.HtmlPage.m_oApi.sendFromReporter(JSON.stringify(_msg_));
|
||
}
|
||
};
|
||
|
||
this.PointerRemove = function()
|
||
{
|
||
if (!this.PointerDiv)
|
||
return;
|
||
|
||
this.DemonstrationDiv.removeChild(this.PointerDiv);
|
||
this.PointerDiv = null;
|
||
|
||
if (this.HtmlPage.m_oApi.isReporterMode)
|
||
{
|
||
this.Canvas.style.cursor = "default";
|
||
if (this.Overlay)
|
||
this.Overlay.style.cursor = "default";
|
||
|
||
this.HtmlPage.m_oApi.sendFromReporter("{ \"reporter_command\" : \"pointer_remove\" }");
|
||
}
|
||
};
|
||
}
|