[Libreoffice-commits] core.git: 6 commits - filter/source
Thorsten Behrens
tbehrens at suse.com
Sun Mar 24 16:52:40 PDT 2013
filter/source/svg/presentation_engine.js | 738 ++++---------------------------
1 file changed, 98 insertions(+), 640 deletions(-)
New commits:
commit 88042d437df72c9c36a39ca668c2f8f459a0d04a
Author: Thorsten Behrens <tbehrens at suse.com>
Date: Mon Mar 25 00:47:12 2013 +0100
Replace stdlib priority queue with own version.
This is enough for our needs, and avoids the third license in one
file.
Change-Id: I5312ac9904406f013964a34d9167a32403fcb941
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index 634033b..c77ff1d 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -679,202 +679,6 @@ function configureDetectionTools()
/*****
* @licstart
*
- * The following is the license notice for the part of JavaScript code of this
- * page included between the '@stdlibstart' and the '@stdlibend' notes.
- */
-
-/***** ******************************************************************
- *
- * Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
- * Free Software Foundation, Inc.
- *
- * The code included between the start note '@stdlibstart' and the end
- * note '@stdlibend' is a derivative work of the GNU ISO C++ Library.
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * Under Section 7 of GPL version 3, you are granted additional
- * permissions described in the GCC Runtime Library Exception, version
- * 3.1, as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License and
- * a copy of the GCC Runtime Library Exception along with this program;
- * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- *************************************************************************/
-
-/*****
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided 'as is' without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided 'as is' without express or implied warranty.
- *
- ************************************************************************/
-
-/*****
- * @licend
- *
- * The above is the license notice for the part of JavaScript code of this
- * page included between the '@stdlibstart' and the '@stdlibend' notes.
- */
-
-
-
-/*****
- * @stdlibstart
- *
- * The following code is a porting, performed on August 2011, of a part of
- * the C++ code included into the source file stl_queue.h that is part of
- * the GNU ISO C++ Library.
- */
-
-
-function PriorityQueue( aCompareFunc )
-{
- this.aSequence = new Array();
- this.aCompareFunc = aCompareFunc;
-}
-
-PriorityQueue.prototype.clone = function()
-{
- var aCopy = new PriorityQueue( this.aCompareFunc );
- var src = this.aSequence;
- var dest = [];
- var i, l;
- for( i = 0, l = src.length; i < l; ++i )
- {
- if( i in src )
- {
- dest.push( src[i] );
- }
- }
- aCopy.aSequence = dest;
-
- return aCopy;
-};
-
-PriorityQueue.prototype.top = function()
-{
- return this.aSequence[0];
-};
-
-PriorityQueue.prototype.isEmpty = function()
-{
- return ( this.size() === 0 );
-};
-
-PriorityQueue.prototype.size = function()
-{
- return this.aSequence.length;
-};
-
-PriorityQueue.prototype.push = function( aValue )
-{
- this.implPushHeap( 0, this.aSequence.length, 0, aValue );
-};
-
-PriorityQueue.prototype.clear = function()
-{
- return this.aSequence = new Array();
-};
-
-
-PriorityQueue.prototype.pop = function()
-{
- if( this.isEmpty() )
- return;
-
- var nLast = this.aSequence.length - 1;
- var aValue = this.aSequence[ nLast ];
- this.aSequence[ nLast ] = this.aSequence[ 0 ];
- this.implAdjustHeap( 0, 0, nLast, aValue );
- this.aSequence.pop();
-};
-
-PriorityQueue.prototype.implAdjustHeap = function( nFirst, nHoleIndex, nLength, aValue )
-{
- var nTopIndex = nHoleIndex;
- var nSecondChild = nHoleIndex;
-
- while( nSecondChild < Math.floor( ( nLength - 1 ) / 2 ) )
- {
- nSecondChild = 2 * ( nSecondChild + 1 );
- if( this.aCompareFunc( this.aSequence[ nFirst + nSecondChild ],
- this.aSequence[ nFirst + nSecondChild - 1] ) )
- {
- --nSecondChild;
- }
- this.aSequence[ nFirst + nHoleIndex ] = this.aSequence[ nFirst + nSecondChild ];
- nHoleIndex = nSecondChild;
- }
-
- if( ( ( nLength & 1 ) === 0 ) && ( nSecondChild === Math.floor( ( nLength - 2 ) / 2 ) ) )
- {
- nSecondChild = 2 * ( nSecondChild + 1 );
- this.aSequence[ nFirst + nHoleIndex ] = this.aSequence[ nFirst + nSecondChild - 1];
- nHoleIndex = nSecondChild - 1;
- }
-
- this.implPushHeap( nFirst, nHoleIndex, nTopIndex, aValue );
-};
-
-PriorityQueue.prototype.implPushHeap = function( nFirst, nHoleIndex, nTopIndex, aValue )
-{
- var nParent = Math.floor( ( nHoleIndex - 1 ) / 2 );
-
- while( ( nHoleIndex > nTopIndex ) &&
- this.aCompareFunc( this.aSequence[ nFirst + nParent ], aValue ) )
- {
- this.aSequence[ nFirst + nHoleIndex ] = this.aSequence[ nFirst + nParent ];
- nHoleIndex = nParent;
- nParent = Math.floor( ( nHoleIndex - 1 ) / 2 );
- }
- this.aSequence[ nFirst + nHoleIndex ] = aValue;
-};
-
-
-/*****
- * @stdlibend
- *
- * The above code is a porting, performed on August 2011, of a part of
- * the C++ code included into the source file stl_queue.h that is part of
- * the GNU ISO C++ Library.
- */
-
-
-
-
-
-/*****
- * @licstart
- *
* The following is the license notice for the part of JavaScript code of
* this page included between the '@libreofficestart' and the '@libreofficeend'
* notes.
@@ -3956,6 +3760,55 @@ function SVGPathMatrixTransform( aPath, aSVGMatrix )
}
+/**********************************************************************************************
+ * simple PriorityQueue
+ **********************************************************************************************/
+
+function PriorityQueue( aCompareFunc )
+{
+ this.aSequence = new Array();
+ this.aCompareFunc = aCompareFunc;
+ this.bSorted = true;
+}
+
+PriorityQueue.prototype.top = function()
+{
+ if( !this.bSorted )
+ {
+ this.aSequence.sort(this.aCompareFunc)
+ this.bSorted = true;
+ }
+ return this.aSequence[this.aSequence.length - 1];
+};
+
+PriorityQueue.prototype.isEmpty = function()
+{
+ return ( this.aSequence.length === 0 );
+};
+
+PriorityQueue.prototype.push = function( aValue )
+{
+ this.bSorted = false;
+ this.aSequence.push( aValue );
+};
+
+PriorityQueue.prototype.clear = function()
+{
+ this.bSorted = true;
+ this.aSequence = new Array();
+};
+
+PriorityQueue.prototype.pop = function()
+{
+ if( !this.bSorted )
+ {
+ this.aSequence.sort(this.aCompareFunc)
+ this.bSorted = true;
+ }
+
+ return this.aSequence.pop();
+};
+
/**********************************************************************************************
* AnimationNode Class Hierarchy
@@ -10516,8 +10369,7 @@ EventMultiplexer.prototype.getId = function()
EventMultiplexer.prototype.hasRegisteredMouseClickHandlers = function()
{
- var nSize = this.aMouseClickHandlerSet.size();
- return ( nSize > 0 );
+ return !this.aMouseClickHandlerSet.isEmpty();
}
EventMultiplexer.prototype.registerMouseClickHandler = function( aHandler, nPriority )
commit 446b8cad0809a8b170d70b5c373212d8c0a50553
Author: Thorsten Behrens <tbehrens at suse.com>
Date: Mon Mar 25 00:45:57 2013 +0100
Fix exception in javascript (missing placeholder rect)
svg animation export was not working - seems there's not always
a rect attribute.
Change-Id: I227519e5923652652a806807ac90e5dd9507d649
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index 0d8651f..634033b 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -1995,11 +1995,11 @@ PlaceholderShape.prototype.init = function()
aPlaceholderElement.setAttribute( 'text-anchor', sTextAnchor );
if( sX )
aPlaceholderElement.setAttribute( 'x', sX );
-
- this.element = aTextFieldElement;
- this.textElement = aPlaceholderElement;
}
+ this.element = aTextFieldElement;
+ this.textElement = aPlaceholderElement;
+
// We remove all text lines but the first one used as placeholder.
var aTextLineGroupElem = this.textElement.parentNode.parentNode;
if( aTextLineGroupElem )
commit 19ad7e8d70e683306c8a2a5cd86cf8fe0a70d5f8
Author: Thorsten Behrens <tbehrens at suse.com>
Date: Mon Mar 25 00:40:44 2013 +0100
Editor file header and indent consolidation in preseng.js
Change-Id: Ia30d7957b562e62535a8d3a3e328da8324072ca2
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index 72173f7..0d8651f 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -1,3 +1,4 @@
+/* -*- Mode: JS; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* - Presentation Engine - *
@@ -8,6 +9,9 @@
* generating the C++ header file must start with a '/' and exactly 5 '*'
* not striped examples: '/*****', '/***** *'
* striped examples: '/** ***' (not contiguous), '/******' (more than 5)
+ *
+ * NOTE: This file combines several works, under different
+ * licenses. See the @licstart / @licend sections below.
*/
@@ -890,7 +894,7 @@ PriorityQueue.prototype.implPushHeap = function( nFirst, nHoleIndex, nTopIndex,
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
+ * License, Version 2.0 (the 'License'); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*
@@ -2006,7 +2010,7 @@ PlaceholderShape.prototype.init = function()
{
var aChildSet = getElementChildren( aTextLineGroupElem );
if( aChildSet.length > 1 )
- var i = 1;
+ var i = 1;
for( ; i < aChildSet.length; ++i )
{
aTextLineGroupElem.removeChild( aChildSet[i] );
@@ -2156,8 +2160,8 @@ MasterPageView.prototype.createElement = function()
aTextFieldContentProviderSet[aSlideNumberClassName] )
{
this.aSlideNumberFieldHandler =
- new SlideNumberFieldHandler( aPlaceholderShapeSet[aSlideNumberClassName],
- aTextFieldContentProviderSet[aSlideNumberClassName] );
+ new SlideNumberFieldHandler( aPlaceholderShapeSet[aSlideNumberClassName],
+ aTextFieldContentProviderSet[aSlideNumberClassName] );
this.aSlideNumberFieldHandler.update( this.aMetaSlide.nSlideNumber );
this.aSlideNumberFieldHandler.appendTo( this.aBackgroundObjectsElement );
}
@@ -2168,9 +2172,9 @@ MasterPageView.prototype.createElement = function()
if( this.aMetaSlide.nIsDateTimeVisible )
{
this.aDateTimeFieldHandler =
- this.initTextFieldHandler( aDateTimeClassName, aPlaceholderShapeSet,
- aTextFieldContentProviderSet, aDefsElement,
- aTextFieldHandlerSet, sMasterSlideId );
+ this.initTextFieldHandler( aDateTimeClassName, aPlaceholderShapeSet,
+ aTextFieldContentProviderSet, aDefsElement,
+ aTextFieldHandlerSet, sMasterSlideId );
}
}
else if( sId === aFooterClassName )
@@ -2179,9 +2183,9 @@ MasterPageView.prototype.createElement = function()
if( this.aMetaSlide.nIsFooterVisible )
{
this.aFooterFieldHandler =
- this.initTextFieldHandler( aFooterClassName, aPlaceholderShapeSet,
- aTextFieldContentProviderSet, aDefsElement,
- aTextFieldHandlerSet, sMasterSlideId );
+ this.initTextFieldHandler( aFooterClassName, aPlaceholderShapeSet,
+ aTextFieldContentProviderSet, aDefsElement,
+ aTextFieldHandlerSet, sMasterSlideId );
}
}
else if( sId === aHeaderClassName )
@@ -2190,9 +2194,9 @@ MasterPageView.prototype.createElement = function()
if( this.aMetaSlide.nIsHeaderVisible )
{
this.aHeaderFieldHandler =
- this.initTextFieldHandler( aHeaderClassName, aPlaceholderShapeSet,
- aTextFieldContentProviderSet, aDefsElement,
- aTextFieldHandlerSet, sMasterSlideId );
+ this.initTextFieldHandler( aHeaderClassName, aPlaceholderShapeSet,
+ aTextFieldContentProviderSet, aDefsElement,
+ aTextFieldHandlerSet, sMasterSlideId );
}
}
else
@@ -2216,8 +2220,8 @@ MasterPageView.prototype.createElement = function()
};
MasterPageView.prototype.initTextFieldHandler =
-function( sClassName, aPlaceholderShapeSet, aTextFieldContentProviderSet,
- aDefsElement, aTextFieldHandlerSet, sMasterSlideId )
+ function( sClassName, aPlaceholderShapeSet, aTextFieldContentProviderSet,
+ aDefsElement, aTextFieldHandlerSet, sMasterSlideId )
{
var aTextFieldHandler = null;
if( aPlaceholderShapeSet[sClassName] &&
@@ -2230,8 +2234,8 @@ function( sClassName, aPlaceholderShapeSet, aTextFieldContentProviderSet,
if ( !aTextFieldHandlerSet[ sMasterSlideId ][ sTextFieldContentProviderId ] )
{
aTextFieldHandlerSet[ sMasterSlideId ][ sTextFieldContentProviderId ] =
- new TextFieldHandler( aPlaceholderShapeSet[sClassName],
- aTextFieldContentProviderSet[sClassName] );
+ new TextFieldHandler( aPlaceholderShapeSet[sClassName],
+ aTextFieldContentProviderSet[sClassName] );
aTextFieldHandler = aTextFieldHandlerSet[ sMasterSlideId ][ sTextFieldContentProviderId ];
aTextFieldHandler.update();
aTextFieldHandler.appendTo( aDefsElement );
@@ -2339,7 +2343,7 @@ TextFieldHandler.prototype.setTextContent = function( sText )
if( !this.aTextPlaceholderElement )
{
log( 'PlaceholderShape.setTextContent: text element is not valid in placeholder of type '
- + this.className + ' that belongs to master slide ' + this.masterPage.id );
+ + this.className + ' that belongs to master slide ' + this.masterPage.id );
return;
}
this.aTextPlaceholderElement.textContent = sText;
@@ -3164,9 +3168,9 @@ function mem_fn( sMethodName )
function bind( aObject, aMethod )
{
return function()
- {
- return aMethod.call( aObject, arguments[0] );
- };
+ {
+ return aMethod.call( aObject, arguments[0] );
+ };
}
function bind2( aFunction )
@@ -13300,4 +13304,4 @@ ElapsedTime.prototype.getElapsedTimeImpl = function()
*
*/
-
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 6f8cf107a16858b13d05f2f4ba9cf29522f2111f
Author: Thorsten Behrens <tbehrens at suse.com>
Date: Mon Mar 11 20:21:57 2013 +0100
re-base preseng.js on ALv2 code.
Change-Id: I0dde612f0e2e1dbe5e7a28444e19137b76e29036
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index a77e792..72173f7 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -878,28 +878,21 @@ PriorityQueue.prototype.implPushHeap = function( nFirst, nHoleIndex, nTopIndex,
/***** ******************************************************************
*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ * This file is part of the LibreOffice project.
*
- * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
- * OpenOffice.org - a multi-platform office productivity suite
+ * This file incorporates work covered by the following license notice:
*
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*
************************************************************************/
@@ -917,8 +910,10 @@ PriorityQueue.prototype.implPushHeap = function( nFirst, nHoleIndex, nTopIndex,
* @libreofficestart
*
* Several parts of the following code are the result of the porting,
- * started on August 2011, of the C++ code included in the source files
- * placed under the folder '/slideshow/source' and subfolders.
+ * started on August 2011, of the C++ code included in the source
+ * files placed under the folder '/slideshow/source' and
+ * subfolders. This got later rebased onto the AL2-licensed versions
+ * of those files in early 2013.
* @source http://cgit.freedesktop.org/libreoffice/core/tree/slideshow/source
*
*/
commit 0d82b464ba765ee17623ba691e1e740d30cacdc7
Author: Thorsten Behrens <tbehrens at suse.com>
Date: Mon Mar 11 20:17:48 2013 +0100
Remove unused code from preseng.js
Change-Id: Ia79bae4aab448a9c2e178ff5f7409cb91585e33a
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index 36f69c5..a77e792 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -516,174 +516,9 @@ function indexSetPageSlide( nIndex )
* @dojostart
*
* The following code is a derivative work of some part of the dojox.gfx library.
- * @source http://svn.dojotoolkit.org/src/dojox/trunk/gfx/arc.js
+ * @source http://svn.dojotoolkit.org/src/dojox/trunk/_base/sniff.js
*/
-
-function degToRad( degree )
-{
- return (Math.PI * degree / 180);
-}
-
-function radToDeg( radiant )
-{
- return (180 * radiant / Math.PI);
-}
-
-
-var PathTools = new Object();
-
-
-PathTools.unitArcAsBezier = function( alpha )
-{
- // summary: return a start point, 1st and 2nd control points, and an end point of
- // a an arc, which is reflected on the x axis
- // alpha: Number
- // angle in radians, the arc will be 2 * angle size
- var cosa = Math.cos(alpha);
- var sina = Math.sin(alpha);
- var p2 = {x: cosa + (4 / 3) * (1 - cosa), y: sina - (4 / 3) * cosa * (1 - cosa) / sina};
-
- return { // Object
- s: {x: cosa, y: -sina},
- c1: {x: p2.x, y: -p2.y},
- c2: p2,
- e: {x: cosa, y: sina}
- };
-};
-
-PathTools.arcAsBezier = function( last, rx, ry, xRotg, large, sweep, x, y )
-{
- // summary: calculates an arc as a series of Bezier curves
- // given the last point and a standard set of SVG arc parameters,
- // it returns an array of arrays of parameters to form a series of
- // absolute Bezier curves.
- // last: Object
- // a point-like object as a start of the arc
- // rx: Number
- // a horizontal radius for the virtual ellipse
- // ry: Number
- // a vertical radius for the virtual ellipse
- // xRotg: Number
- // a rotation of an x axis of the virtual ellipse in degrees
- // large: Boolean
- // which part of the ellipse will be used (the larger arc if true)
- // sweep: Boolean
- // direction of the arc (CW if true)
- // x: Number
- // the x coordinate of the end point of the arc
- // y: Number
- // the y coordinate of the end point of the arc
-
- // constants
- var twoPI = 2 * Math.PI, pi4 = Math.PI / 4, pi8 = Math.PI / 8,
- pi48 = pi4 + pi8, curvePI4 = PathTools.unitArcAsBezier(pi8);
-
- // calculate parameters
- large = Boolean(large);
- sweep = Boolean(sweep);
-
- var xRot = degToRad( xRotg );
- var rx2 = rx * rx, ry2 = ry * ry;
- var m = document.documentElement.createSVGMatrix();
- m = m.rotate(-xRotg);
- var p = document.documentElement.createSVGPoint();
- p.x = (last.x - x) / 2; p.y = (last.y - y) / 2;
- var pa = p.matrixTransform( m );
-
- var pax2 = pa.x * pa.x, pay2 = pa.y * pa.y;
- var c1 = Math.sqrt((rx2 * ry2 - rx2 * pay2 - ry2 * pax2) / (rx2 * pay2 + ry2 * pax2));
-
- if( isNaN(c1) ) { c1 = 0; }
-
- var ca = {
- x: c1 * rx * pa.y / ry,
- y: -c1 * ry * pa.x / rx
- };
-
- if( large == sweep )
- {
- ca = {x: -ca.x, y: -ca.y};
- }
-
- // the center
- m = document.documentElement.createSVGMatrix();
- m = m.translate( (last.x + x) / 2, (last.y + y) / 2 ).rotate( xRotg );
- p.x = ca.x; p.y = ca.y;
- var c = p.matrixTransform( m );
-
- // calculate the elliptic transformation
- m = document.documentElement.createSVGMatrix();
- var elliptic_transform = m.translate( c.x, c.y ).rotate( xRotg ).scaleNonUniform( rx, ry );
-
- // start, end, and size of our arc
- var inversed = elliptic_transform.inverse();
- p.x = last.x; p.y = last.y;
- var sp = p.matrixTransform( inversed );
- p.x = x; p.y = y;
- var ep = p.matrixTransform( inversed );
- var startAngle = Math.atan2(sp.y, sp.x);
- var endAngle = Math.atan2(ep.y, ep.x);
- var theta = startAngle - endAngle; // size of our arc in radians
-
- if( sweep ) { theta = -theta; }
- if( theta < 0 )
- {
- theta += twoPI;
- }
- else if( theta > twoPI )
- {
- theta -= twoPI;
- }
-
- // draw curve chunks
- var alpha = pi8, curve = curvePI4;
- var step = sweep ? alpha : -alpha;
- var result = [];
-
- var aPathElement = document.createElementNS( NSS['svg'], 'path' );
-
- for(var angle = theta; angle > 0; angle -= pi4)
- {
- if( angle < pi48 )
- {
- alpha = angle / 2;
- curve = PathTools.unitArcAsBezier(alpha);
- step = sweep ? alpha : -alpha;
- angle = 0; // stop the loop
- }
- var c2, e;
- var M = elliptic_transform.rotate( radToDeg( startAngle + step ) );
-
- if( sweep )
- {
- p.x = curve.c1.x; p.y = curve.c1.y;
- c1 = p.matrixTransform( M );
- p.x = curve.c2.x; p.y = curve.c2.y;
- c2 = p.matrixTransform( M );
- p.x = curve.e.x; p.y = curve.e.y;
- e = p.matrixTransform( M );
- }
- else
- {
- p.x = curve.c2.x; p.y = curve.c2.y;
- c1 = p.matrixTransform( M );
- p.x = curve.c1.x; p.y = curve.c1.y;
- c2 = p.matrixTransform( M );
- p.x = curve.s.x; p.y = curve.s.y;
- e = p.matrixTransform( M );
- }
-
- // draw the curve
- var aCubicBezierSeg = aPathElement.createSVGPathSegCurvetoCubicAbs( e.x, e.y, c1.x, c1.y, c2.x, c2.y );
- result.push( aCubicBezierSeg );
-
- startAngle += 2 * step;
- }
- return result; // Array
-};
-
-
function has( name )
{
return has.cache[name];
@@ -829,241 +664,12 @@ function configureDetectionTools()
return detect;
}
-
-
/*****
* @dojoend
*
* The above code is a derivative work of some part of the dojox.gfx library.
- * @source http://svn.dojotoolkit.org/src/dojox/trunk/gfx/arc.js
- */
-
-
-
-
-/** normalizePath
- *
- * @param sPath
- * A string representing a svg <path> element list of commands.
- * @return {String}
- * A string representing the same svg <path> passed as input defined by
- * using only the following commands: M, L, Q, C.
+ * @source http://svn.dojotoolkit.org/src/dojox/trunk/_base/sniff.js
*/
-PathTools.normalizePath = function( sPath )
-{
- var PATHSEG_CLOSEPATH = 1;
- var PATHSEG_MOVETO_ABS = 2;
- var PATHSEG_MOVETO_REL = 3;
- var PATHSEG_LINETO_ABS = 4;
- var PATHSEG_LINETO_REL = 5;
- var PATHSEG_CURVETO_CUBIC_ABS = 6;
- var PATHSEG_CURVETO_CUBIC_REL = 7;
- var PATHSEG_CURVETO_QUADRATIC_ABS = 8;
- var PATHSEG_CURVETO_QUADRATIC_REL = 9;
- var PATHSEG_ARC_ABS = 10;
- var PATHSEG_ARC_REL = 11;
- var PATHSEG_LINETO_HORIZONTAL_ABS = 12;
- var PATHSEG_LINETO_HORIZONTAL_REL = 13;
- var PATHSEG_LINETO_VERTICAL_ABS = 14;
- var PATHSEG_LINETO_VERTICAL_REL = 15;
- var PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;
- var PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;
- var PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
- var PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;
-
- var aPath = document.createElementNS( NSS['svg'], 'path' );
- aPath.setAttribute( 'd', sPath );
- var aPathSegList = aPath.pathSegList;
- if( !aPathSegList )
- {
- log( 'normalizePath: no path segment list supported, abort.' );
- return '';
- }
- var nSize = aPathSegList.numberOfItems;
-
- var aPreviousPathSeg = null;
- var nCurrentX = 0;
- var nCurrentY = 0;
- var nInitialX = 0;
- var nInitialY = 0;
- var aPathSeg = null;
- var aAbsPathSeg = null;
-
- var i;
- for( i = 0; i < nSize; ++i )
- {
-
- aPathSeg = aPathSegList.getItem( i );
- switch( aPathSeg.pathSegType )
- {
- case PATHSEG_CLOSEPATH:
- aAbsPathSeg = aPath.createSVGPathSegLinetoAbs( nInitialX, nInitialY );
- aPathSegList.replaceItem( aAbsPathSeg, i );
- break;
- case PATHSEG_MOVETO_ABS:
- nInitialX = aPathSeg.x;
- nInitialY = aPathSeg.y;
- break;
- case PATHSEG_MOVETO_REL:
- nCurrentX += aPathSeg.x;
- nCurrentY += aPathSeg.y;
- aAbsPathSeg = aPath.createSVGPathSegMovetoAbs( nCurrentX, nCurrentY );
- aPathSegList.replaceItem( aAbsPathSeg, i );
- nInitialX = nCurrentX;
- nInitialY = nCurrentY;
- break;
- case PATHSEG_LINETO_ABS:
- break;
- case PATHSEG_LINETO_REL:
- nCurrentX += aPathSeg.x;
- nCurrentY += aPathSeg.y;
- aAbsPathSeg = aPath.createSVGPathSegLinetoAbs( nCurrentX, nCurrentY );
- aPathSegList.replaceItem( aAbsPathSeg, i );
- break;
- case PATHSEG_CURVETO_CUBIC_ABS:
- break;
- case PATHSEG_CURVETO_CUBIC_REL:
- var nX1 = nCurrentX + aPathSeg.x1;
- var nY1 = nCurrentY + aPathSeg.y1;
- var nX2 = nCurrentX + aPathSeg.x2;
- var nY2 = nCurrentY + aPathSeg.y2;
- var nX = nCurrentX + aPathSeg.x;
- var nY = nCurrentY + aPathSeg.y;
- aAbsPathSeg = aPath.createSVGPathSegCurvetoCubicAbs( nX, nY, nX1, nY1, nX2, nY2 );
- aPathSegList.replaceItem( aAbsPathSeg, i );
- break;
- case PATHSEG_CURVETO_QUADRATIC_ABS:
- break;
- case PATHSEG_CURVETO_QUADRATIC_REL:
- nX1 = nCurrentX + aPathSeg.x1;
- nY1 = nCurrentY + aPathSeg.y1;
- nX = nCurrentX + aPathSeg.x;
- nY = nCurrentY + aPathSeg.y;
- aAbsPathSeg = aPath.createSVGPathSegCurvetoQuadraticAbs( nX, nY, nX1, nY1 );
- aPathSegList.replaceItem( aAbsPathSeg, i );
- break;
- case PATHSEG_ARC_REL:
- aPathSeg.x += nCurrentX;
- aPathSeg.y += nCurrentY;
- case PATHSEG_ARC_ABS:
- var aCubicBezierSegList
- = PathTools.arcAsBezier( { x: nCurrentX, y: nCurrentY },
- aPathSeg.r1, aPathSeg.r2,
- aPathSeg.angle,
- aPathSeg.largeArcFlag,
- aPathSeg.sweepFlag,
- aPathSeg.x, aPathSeg.y );
- var nLength = aCubicBezierSegList.length;
- if( nLength > 0 )
- {
- var k;
- for( k = 0; k < nLength; ++k )
- {
- aPathSegList.insertItemBefore( aCubicBezierSegList[k], i );
- i += 1;
- }
- aPathSegList.removeItem( i );
- i -= 1;
- nSize += ( nLength - 1 );
- }
- break;
- case PATHSEG_LINETO_HORIZONTAL_REL:
- aPathSeg.x += nCurrentX;
- // fall through intended
- case PATHSEG_LINETO_HORIZONTAL_ABS:
- aAbsPathSeg = aPath.createSVGPathSegLinetoAbs( aPathSeg.x, nCurrentY );
- aPathSegList.replaceItem( aAbsPathSeg, i );
- break;
- case PATHSEG_LINETO_VERTICAL_REL:
- aPathSeg.y += nCurrentY;
- // fall through intended
- case PATHSEG_LINETO_VERTICAL_ABS:
- aAbsPathSeg = aPath.createSVGPathSegLinetoAbs( nCurrentX, aPathSeg.y );
- aPathSegList.replaceItem( aAbsPathSeg, i );
- break;
- case PATHSEG_CURVETO_CUBIC_SMOOTH_REL:
- aPathSeg.x += nCurrentX;
- aPathSeg.y += nCurrentY;
- aPathSeg.x2 += nCurrentX;
- aPathSeg.y2 += nCurrentY;
- // fall through intended
- case PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:
- if( aPreviousPathSeg.pathSegType == PATHSEG_CURVETO_CUBIC_ABS )
- {
- nX1 = 2*nCurrentX - aPreviousPathSeg.x2;
- nY1 = 2*nCurrentY - aPreviousPathSeg.y2;
- }
- else
- {
- nX1 = nCurrentX;
- nY1 = nCurrentY;
- }
- aAbsPathSeg = aPath.createSVGPathSegCurvetoCubicAbs( aPathSeg.x, aPathSeg.y,
- nX1, nY1,
- aPathSeg.x2, aPathSeg.y2 );
- aPathSegList.replaceItem( aAbsPathSeg, i );
- break;
- case PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:
- aPathSeg.x += nCurrentX;
- aPathSeg.y += nCurrentY;
- // fall through intended
- case PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:
- if( aPreviousPathSeg.pathSegType == PATHSEG_CURVETO_QUADRATIC_ABS )
- {
- nX1 = 2*nCurrentX - aPreviousPathSeg.x1;
- nY1 = 2*nCurrentY - aPreviousPathSeg.y1;
- }
- else
- {
- nX1 = nCurrentX;
- nY1 = nCurrentY;
- }
- aAbsPathSeg = aPath.createSVGPathSegCurvetoQuadraticAbs( aPathSeg.x, aPathSeg.y, nX1, nY1 );
- aPathSegList.replaceItem( aAbsPathSeg, i );
- break;
- default:
- log( 'normalizePath: unknown path segment, index: ' + String(i) );
- }
- aPreviousPathSeg = aPathSegList.getItem( i );
- nCurrentX = aPreviousPathSeg.x;
- nCurrentY = aPreviousPathSeg.y;
- }
- return aPath.getAttribute( 'd' );
-};
-
-
-/** createPathFromEllipse
- *
- * @param nCX
- * The ellipse center x coordinate.
- * @param nCY
- * The ellipse center y coordinate.
- * @param nXRay
- * The ellipse x-ray.
- * @param nYRay
- * The ellipse y-ray.
- * @return {String}
- * A string representing a list of path commands that approximate
- * the ellipse.
- */
-PathTools.createPathFromEllipse = function( nCX, nCY, nXRay, nYRay )
-{
- var V1X = nCX, V1Y = nCY - nYRay;
- var V2X = nCX + nXRay, V2Y = nCY;
- var V3X = nCX, V3Y = nCY + nYRay;
- var V4X = nCX - nXRay, V4Y = nCY;
-
- var sPathData = 'M ' + V1X + ' ' + V1Y +
- ' A ' + nXRay + ' ' + nYRay + ' 0 0 1 ' + V2X + ' ' + V2Y +
- ' A ' + nXRay + ' ' + nYRay + ' 0 0 1 ' + V3X + ' ' + V3Y +
- ' A ' + nXRay + ' ' + nYRay + ' 0 0 1 ' + V4X + ' ' + V4Y +
- ' A ' + nXRay + ' ' + nYRay + ' 0 0 1 ' + V1X + ' ' + V1Y;
-
- sPathData = PathTools.normalizePath( sPathData );
- return sPathData;
-};
-
-
/*****
commit 3047c9bcb2a33487b4c38119f2841bfa3f70b29f
Author: Thorsten Behrens <tbehrens at suse.com>
Date: Mon Mar 11 20:14:42 2013 +0100
Stick in obvious canonical radians conversion.
Change-Id: I1b79844dd479de201ea30d0b1959303110efee34
diff --git a/filter/source/svg/presentation_engine.js b/filter/source/svg/presentation_engine.js
index ddaf867..36f69c5 100644
--- a/filter/source/svg/presentation_engine.js
+++ b/filter/source/svg/presentation_engine.js
@@ -4101,7 +4101,8 @@ SVGMatrix.prototype.setToIdentity = function()
SVGMatrix.prototype.setToRotationAroundPoint = function( nX, nY, nAngle )
{
- nAngle = degToRad( nAngle );
+ // convert to radians
+ nAngle = Math.PI * nAngle / 180;
var nSin = Math.sin( nAngle );
var nCos = Math.cos( nAngle );
More information about the Libreoffice-commits
mailing list