Commit graph

1496 commits

Author SHA1 Message Date
Jürg Lehni
b91c8f93f8 Remove Curve. _getEdgeSum() again, and inline code in Path.isClockwise() 2013-10-18 19:51:54 +02:00
Jürg Lehni
1fc9f882ca Fix a minor bug in CompoundPath#contains(), improve comments and clean up code. 2013-10-18 19:49:05 +02:00
Jürg Lehni
304ecbc3be Define compoundChildren hitTest option to get matching children instead of parent. 2013-10-18 15:40:41 +02:00
Jürg Lehni
f8106ae18f Improve code handling special winding cases. 2013-10-18 15:20:32 +02:00
Jürg Lehni
75a209c002 Handle more special cases in winding algorithm. 2013-10-18 15:15:54 +02:00
Jürg Lehni
5d0fd8f970 Implement Style#windingRule and use it in Path#contains(). 2013-10-18 14:54:13 +02:00
Jürg Lehni
4f27be8f12 Include new, improved point in path algorithm based on winding number.
It's also possible to switch to using the canvas's native isPointInPath() through options.nativeContains
2013-10-18 14:22:59 +02:00
Jürg Lehni
a07538b205 Use same tolerance in Curve.isLinear() as in Curve#isLinear(). 2013-10-17 20:19:34 +02:00
Jürg Lehni
085fa3e1c6 Set named arguments at the end, since some depend on geometry to be defined (e.g. #clockwise). 2013-10-17 14:03:05 +02:00
Jürg Lehni
73d2c34088 Implement item-level #equals() method and clean up other equals methods. 2013-10-17 13:08:54 +02:00
Jürg Lehni
9976033655 Implement serialization of selection. 2013-10-17 12:04:11 +02:00
Jürg Lehni
3958d35f28 Change behavior of Path#fullySelected.
Setting it on empty paths does the same as Path#selected.
2013-10-17 12:03:46 +02:00
Jürg Lehni
51cf1cfec6 Clean up Path#toShape(). 2013-10-16 23:35:50 +02:00
Jürg Lehni
c4c7a37993 Implement Path#toShape(), Segment#isColinear(), Segment#isOrthogonal() and Segment#isArc(). 2013-10-16 23:10:03 +02:00
Jürg Lehni
b581c84d8b Move CompoundPath#reduce() to Item#reduce(). 2013-10-16 16:10:28 +02:00
Jürg Lehni
b325aebc77 Docs: More smaller fixes. 2013-10-16 15:03:29 +02:00
Jürg Lehni
543609c0c6 Have Path.Ellipse constructor support negative radius values correctly. 2013-10-16 14:25:14 +02:00
Jürg Lehni
c945bf7908 Docs: Various smaller clean ups. 2013-10-16 14:20:13 +02:00
Jürg Lehni
3af179e2cf Docs: Improve Path constructors. 2013-10-16 14:19:25 +02:00
Jürg Lehni
41d6650666 Add support for named center & radius arguments to Path.Ellipse. 2013-10-16 13:32:40 +02:00
Jürg Lehni
4b636dd31c Clean up Path constructors code. 2013-10-16 13:26:08 +02:00
Jürg Lehni
8fdcbce5ac Improve argument reading in Segment. 2013-10-16 13:15:08 +02:00
Jürg Lehni
a3d0e0d462 Clean up throw statements.
Never throw plain strings.
2013-10-14 16:05:50 +02:00
Jürg Lehni
24e46bee60 Merge branch 'refs/heads/boolean-fix' 2013-10-08 20:50:47 +02:00
Jürg Lehni
0860cdd941 Clean up code a bit. 2013-10-08 20:49:24 +02:00
Jürg Lehni
9103c19e6f Fix issues with #dashOffset when emulating native dashes.
Closes #303.
2013-10-08 10:50:59 +02:00
Jürg Lehni
1ee6bb7e79 Use isZero() when checking for straight curves in Curve.getLength() 2013-09-23 08:13:32 -07:00
Jürg Lehni
509ac48951 Fix indentation levels. 2013-09-22 18:18:22 -07:00
Jürg Lehni
cae4520665 Simplify addCurveLineIntersections() code. 2013-09-22 18:18:03 -07:00
hkrish
8434b4bebe Fix: Syntax error! 2013-09-22 17:49:10 +02:00
hkrish
f9b4321a56 Boolean -fix: Interpolate to find the parameter of intersection in linear curve segments 2013-09-21 17:26:14 +02:00
hkrish
0a22211393 Conform to paperjs coding style. 2013-09-21 15:26:14 +02:00
hkrish
4f54ac1f4c Boolean -fix: Correctly perform boolean operations regardless of the input paths' winding direction 2013-09-17 19:50:13 +02:00
hkrish
669fb1638a Boolean -fix: Preserve the order of intersections found (Curve-Line) according to the PathItem they belong to. 2013-09-13 02:44:51 +02:00
hkrish
abe0e5e059 Boolean -fix: CurveLocation now keeps track of the correct segment at intersections 2013-09-13 00:08:43 +02:00
Jürg Lehni
19c7788617 Fix documentation irregularities. 2013-08-23 19:45:28 -07:00
Jürg Lehni
6b19f25f4b Fix typos in comments. 2013-08-08 15:21:35 -07:00
Jürg Lehni
aa4d990c90 Move and unify handling of Item#_set(props) to new Item#_initialize(), and add support for props.insert = false. 2013-07-21 15:45:22 -07:00
Jürg Lehni
93c90d0cd8 Do not insert boolean operation clones into DOM. 2013-07-19 18:46:28 -07:00
Jürg Lehni
b7aea1e527 Use insert: false option in creation of all clones.
Still needs implementing in Item constructor.
2013-07-19 18:42:13 -07:00
Jürg Lehni
20a17f2939 Implement insert parameter in Item#clone() to control DOM insertion.
Defaults to true. Also insert in the right place now, above the original.
2013-07-19 18:27:00 -07:00
Jürg Lehni
ef4eee1064 Pass true for isParameter in Curve#divide() calls.
Closes #252.
2013-07-04 19:39:55 -07:00
Jürg Lehni
e8765d18d5 Make argument reading more flexible by introducing options object for readNull and clone, and passing it on to the constructor through this.__options for additional values. 2013-06-28 07:37:03 -07:00
Jürg Lehni
8f254202e8 Use new @operator tag to mark math operator methods. 2013-06-28 05:59:07 -07:00
Jürg Lehni
6833e9d8e0 Fix {@default 0.5} values in documentation. 2013-06-27 18:15:10 -07:00
Jürg Lehni
e63edba0b5 Clean up various documentations a bit. 2013-06-27 18:03:03 -07:00
Jürg Lehni
7ade053dea Move Path.Circle constructor above Path.Rectangle. 2013-06-27 17:54:00 -07:00
Jürg Lehni
f9925a71ea Improve documentation for Path#split(), Curve#divide() and Curve#split().
Closes #189.
2013-06-27 17:18:57 -07:00
Jürg Lehni
9f5b543ab5 Fix getCurveAt() signature. 2013-06-27 17:13:00 -07:00
Jürg Lehni
38db18c2e1 Remove isParameter from Curve.evaluate() 2013-06-27 17:12:35 -07:00
Jürg Lehni
c123468d7a Clean up Path#join() code. 2013-06-27 16:06:24 -07:00
Jürg Lehni
2b236a3da8 In Path#join, add first segment of second path again at the end after joining, if it was closed.
Closes #249.
2013-06-27 15:43:26 -07:00
Jürg Lehni
6d38401f0c Use faster direct Curve constructor instead of Base.create(). 2013-06-25 09:58:18 -07:00
Jürg Lehni
52c889428b Remove Curve.create() in favor of direct constructor. 2013-06-25 09:54:13 -07:00
Jürg Lehni
7e24de7c74 Replace SegmentPoint.create() in favor of normal constructor. 2013-06-25 09:48:51 -07:00
Jürg Lehni
1866e4ff15 Remove need for all special arguments in minification, and restructure code to avoid warnings. 2013-06-24 10:15:54 -07:00
Jürg Lehni
7975232ee7 Remove workaround for obscure WebKit bug.
It wasn't fully working either. Solution:
https://bugs.webkit.org/show_bug.cgi?id=109961
2013-06-24 09:37:25 -07:00
Jürg Lehni
a4535edbb9 Bring back _class names, since code minification breaks reliance on constructor.name.
Closes #248.
2013-06-23 20:18:32 -07:00
Jürg Lehni
dff39dff78 Use local bounds for hit-testing.
Fixes issue #247.
2013-06-23 19:49:36 -07:00
Jürg Lehni
719b9d5e24 Move logic that determines if item can be directly composited into separate per-item #_canComposite() method. 2013-06-19 08:22:08 -07:00
Jürg Lehni
258c404b98 Move curvature calculations into Curve.evaluate(), and define unit tests for it. 2013-06-18 19:00:05 -07:00
Jürg Lehni
619a8f88f8 Clean up code a bit in Curve#getCurvatureAt(). 2013-06-18 18:29:44 -07:00
Jürg Lehni
f758fb306b Rename #_applyMatrix to #_transformContent.
And swap names with private function...
2013-06-18 15:50:11 -07:00
Jürg Lehni
75acdf1025 Add support for direct drawing of native blendModes for items that allow it.
Bypassing compositing into separate canvases completely.
2013-06-18 14:18:57 -07:00
Jürg Lehni
8cf09c08d9 Merge branch 'master' of github.com:paperjs/paper.js 2013-06-18 08:02:22 -07:00
Jürg Lehni
ab2bfe2d40 Rename nativeDash to dash. 2013-06-17 15:52:16 -07:00
hkrish
d4d2075040 Fix: Use absolute coordinates from #Curve.getValues() directly while calculating the curvature 2013-06-17 22:27:20 +05:30
Jürg Lehni
8a726f22b2 Clean up comments. 2013-06-17 08:57:30 -07:00
Jürg Lehni
b072df0486 Put isEnd value directly into conditional. 2013-06-17 08:56:42 -07:00
Jürg Lehni
18ad8a235d Clean up code to follow Paper.js coding conventions. 2013-06-17 08:26:51 -07:00
Jürg Lehni
be6bbb802d Move calculations of values to where they are needed. 2013-06-17 08:22:28 -07:00
Jürg Lehni
5ff990a84a Fix global variable leakage, and join sequential variable definitions. 2013-06-17 08:10:57 -07:00
hkrish
2693516844 Implement correct method for calculating curvature on a Path 2013-06-17 15:16:11 +05:30
Jürg Lehni
f8367bb0dd More clean-ups. 2013-06-15 05:24:34 -07:00
Jürg Lehni
79785afa2a Minor clean-ups and optimizations of stroke hit-test code. 2013-06-15 05:21:17 -07:00
Jürg Lehni
8c09d19f7c Fix wrong calculation of rough bounds for square caps.
And add some comments to stroke hit-testing code.
2013-06-15 05:15:48 -07:00
Jürg Lehni
26971672b2 Only check segments for miters that are within the limit. 2013-06-15 05:08:12 -07:00
Jürg Lehni
be1098e006 Further improve stroke hit-testing.
Properly detect all miter joins.
2013-06-15 05:06:09 -07:00
Jürg Lehni
d318057897 Implement Segment#getLocation() 2013-06-15 05:05:10 -07:00
Jürg Lehni
1cab9aad90 Improve stroke hit-testing. 2013-06-15 03:12:57 -07:00
Jürg Lehni
eb32bad57e Fix imprecision in #getNearestLocation() 2013-06-15 03:12:29 -07:00
Jürg Lehni
38f832a888 Remove console.log() 2013-06-15 02:25:44 -07:00
Jürg Lehni
8b9fb3741d Implement proper stroke hit-testing for all variations of joins and caps. 2013-06-15 02:24:59 -07:00
Jürg Lehni
e4ba0d80b6 Simple code improvement in #isClockwise(). 2013-06-14 23:18:29 -07:00
Jürg Lehni
4ffcdc3971 Clean up code. 2013-06-14 23:13:54 -07:00
Jürg Lehni
1ae7832ab3 Move calculation of square joins and caps to static methods.
These will be of use when correctly implementing hit-testing of strokes.
2013-06-14 23:11:50 -07:00
Jürg Lehni
ca0e931498 Clean up and simplify getStrokeBounds() code.
Handling of bevel and miter joins can be merged nicely.
2013-06-14 22:57:14 -07:00
Jürg Lehni
1dee05900f Move getArea code to other statics block. 2013-06-13 23:16:44 -07:00
Jürg Lehni
610e396d94 Make Curve#_getCrossings() a static method and have it work on curve values directly. 2013-06-13 23:16:00 -07:00
Jürg Lehni
01e48b3322 Improve and clean up fat-line bug fix. 2013-06-13 15:53:28 -07:00
Jürg Lehni
38f31be6b2 Clean up and simplify Path#_hitTest() code. 2013-06-13 14:30:52 -07:00
Jürg Lehni
95ecab8a6f Improve handling of merged CompoundPath style through #getStyle().
Only access _style directly in core code if you really know what you're doing!
2013-06-12 20:12:08 -07:00
Jürg Lehni
33eb750586 Simplify Path#hasFill() and implement #hasStroke() as well. 2013-06-12 19:57:05 -07:00
Jürg Lehni
2196ef2a74 Streamline various #equals() methods. 2013-06-12 18:57:12 -07:00
Jürg Lehni
6fe60cff9d Fix trailing comas. 2013-06-12 17:42:38 -07:00
Jürg Lehni
cb0dcf1719 Fix accidental global leakage. 2013-06-12 17:27:20 -07:00
Jürg Lehni
d1932124d7 Implement #equals() in Point, Size and Rectangle without argument reading.
Closes #235
2013-06-12 15:28:29 -07:00
Jürg Lehni
7a2f577b75 Implement Path#contains() correctly for open paths. 2013-06-12 00:35:34 -07:00
Jürg Lehni
f45a66d2ee Filter out curves with zero length in Path#contains() algorithm.
Fixes #227
2013-06-12 00:19:54 -07:00
Jürg Lehni
20f7c567aa Use Base objects for drawing params, so we can use param.extend() on them for easier overriding. 2013-06-11 20:40:44 -07:00
Jürg Lehni
ce7d584c05 Revert readNull and clone parameter sequence in arguments reading code. 2013-06-11 19:49:35 -07:00
Jürg Lehni
18383875eb Fix global variable leakage. 2013-06-11 17:46:50 -07:00
Jürg Lehni
375156059d Do not use pathData in JSON for CompoundPaths. 2013-06-11 15:27:04 -07:00
Jürg Lehni
03a7503789 Fix issue in getPathData() with closed CompoundPaths. 2013-06-11 15:26:44 -07:00
Jürg Lehni
7faf2a9e70 Clean-up @hkrish's changes a bit. 2013-06-09 18:37:08 -07:00
hkrish
d8498b6418 Remove invalid code and unnecessary comments 2013-06-09 22:02:50 +05:30
hkrish
d3405115c1 Use parameter on both curves in CurveLocation objects instead of Point in #getIntersection() 2013-06-08 21:37:43 +05:30
hkrish
cdaab794f2 Merge branch 'master' of https://github.com/paperjs/paper.js
* 'master' of https://github.com/paperjs/paper.js: (56 commits)
  Fix regressions in Raster caused by faulty merge.
  Store data in _data rather than on the image itself.
  Clean up @trankek's fix for node a bit.
  Explain compact = true in Project#_serialize()
  Properly fix issue with Project#exportJSON() creating separate projects on import.
  Update straps.js to version 1.1.0
  Rename options.server to options.node
  Remove all create() constructors for basic types since new constructors are now faster.
  Make sure project we import into is active.
  Unbox project data in Project#importJSON(), as we don't want to create a new project object.
  Remove need for _needsRedraw() calls by replacing it with a boolean flag.
  Apply "pending" matrix in group when it receives content.
  Move main Item insertion code from #insertChild() to #insertChildren().
  Fix documentation warning.
  Handle exporting of Numerical and PaperScript in export.js
  Update straps.js to latest version.
  Accessors cannot define the writable property.
  Properly export Numerical and PaperScript again.
  Only reset matrices in Groups when it could actually be applied to the content.
  Set options.stats = false for build.sh and Node.js
  ...
2013-05-29 19:09:07 +02:00
Jürg Lehni
dd38e4aae6 Merge pull request #231 from NorthNick/master
Path.arcBy bug fix
2013-05-28 07:53:58 -07:00
Jürg Lehni
cd7db56249 Remove all create() constructors for basic types since new constructors are now faster.
Woop!
2013-05-27 23:57:31 -07:00
Jürg Lehni
9b0d32651f Move main Item insertion code from #insertChild() to #insertChildren().
Handles insertion and change notification much more efficiently.
2013-05-27 20:06:30 -07:00
Jürg Lehni
5592bb57e0 Properly export Numerical and PaperScript again. 2013-05-27 15:55:44 -07:00
Jürg Lehni
10d5de3ed6 Implement a better way to name and export class constructors.
This change also simplified the way classes are exported to PaperScope objects.
2013-05-27 12:48:58 -07:00
Jürg Lehni
c533dda7b5 Finally found a better and faster alternative for this.base() calls, by setting base on the function object instead.
base can be accessed on named functions very easily, leading to another measurable speed increase. Finally all performance reasons against straps.js are eliminated!
2013-05-27 10:04:05 -07:00
Jürg Lehni
369b329b23 Change straps.js to directly use initialize() as constructor function rather than redirecting calls to it.
Should yield some interesting performance improvements.
2013-05-27 09:11:50 -07:00
Jürg Lehni
f9267e7f5c Some more code clean up and variable renaming. 2013-05-26 17:59:01 -07:00
Jürg Lehni
14962b5c45 Clean up code a bit more. 2013-05-26 17:52:05 -07:00
Jürg Lehni
32709a176b Fix some comments. 2013-05-26 17:48:36 -07:00
Jürg Lehni
7050edd6e4 Fix point sequence. 2013-05-26 17:40:40 -07:00
Jürg Lehni
90f0679700 Further simplify getConvexHull() by using p0 … p3 point objects. 2013-05-26 17:39:13 -07:00
Jürg Lehni
487c4c4aef Further simplify getConvexHull() by inlining cross product calculations. 2013-05-26 17:32:44 -07:00
Jürg Lehni
9edab9c3aa Simplify convex hull algorithm by returning lists of points rather than lines.
We can avoid some data redundancy that way at no performance cost.
2013-05-26 17:18:54 -07:00
Jürg Lehni
9540b7f6a9 Use addLineIntersection() in subdivision algorithm as well. 2013-05-26 17:10:29 -07:00
Jürg Lehni
20737c6664 Rename various intersection methods. 2013-05-26 17:06:23 -07:00
Jürg Lehni
5d7cc2fb40 Use new Line.getSignedDistance(). 2013-05-26 16:58:49 -07:00
Jürg Lehni
80f9f6061c Change the way the Line class handles direction vectors and infinite lines.
The beginning of performance improvements in the Line class.
2013-05-26 15:44:52 -07:00
NickNorth
3e520efe5f arcBy recursively calls itself rather than arcTo. 2013-05-26 20:09:26 +01:00
Jürg Lehni
1fb0a3a13c Always provide t parameter for CurveLocations if we know it. 2013-05-25 11:23:59 -07:00
hkrish
46a324722a Merge branch 'master' of https://github.com/paperjs/paper.js
* 'master' of https://github.com/paperjs/paper.js: (90 commits)
  Start merging fat-line clipping code into Curve class.
  Fix white-spaces.
  Merge handling of flat curves.
  More getConvexHull() clean up.
  Remove unused variable dqmin.
  Further clean up clipFatLine()
  Some clean up in clipFatLine()
  Merge the two convergence checks to one.
  Simplify convergence checks.
  Rename p\d to part\d
  Rename v\dt to range\d
  Simplify handling of ranges and curve parts.
  Switch to using arrays rather than objects for parameter ranges.
  Reverse logic of v1t / _v1t naming and switch to using Numerical constants.
  Re-implement Curve.getLocation2() as "hub" for all the different intersection methods.
  Use break; instead of return; and untangle unnecessarily nested conditionals.
  Define private addLocation() to reduce code redundancy.
  Correctly handle calculation of CurveLocation point in getCurveIntersections().
  Move Curve.getIntersection2 to private function and better name other private functions.
  Always use parameter in getCurveLineIntersection() by flipping curve1 / 2 values as well.
  ...
2013-05-25 11:37:33 +02:00
Jürg Lehni
502c76dbce Start merging fat-line clipping code into Curve class.
And add a prepro option for now.
2013-05-24 22:30:13 -07:00
Jürg Lehni
7f00ef8f05 Fix white-spaces. 2013-05-24 22:25:22 -07:00
Jürg Lehni
7e5f846190 Remove debugging code. 2013-05-24 17:57:13 -07:00
Jürg Lehni
bd3ac02bbe Use Curve instead of this.
Compresses better and allows passing on function as callback.
2013-05-24 17:52:05 -07:00
hkrish
cfbe6d8312 Merge branch 'master' of https://github.com/paperjs/paper.js
* 'master' of https://github.com/paperjs/paper.js:
  Remove Item#applyMatrix boolean, go back to previous way of directly applying transformations to children in Group and Layer, and introduce new Clip class for non-transformed nested matrices.
  Make sure the Base class is exposed in Node.js
2013-05-16 20:33:13 +02:00
Jürg Lehni
7c2e57e105 Remove Item#applyMatrix boolean, go back to previous way of directly applying transformations to children in Group and Layer, and introduce new Clip class for non-transformed nested matrices. 2013-05-13 18:57:17 -07:00
hkrish
158001c154 Merge branch 'master' of https://github.com/paperjs/paper.js
* 'master' of https://github.com/paperjs/paper.js:
  Fix: #initialize() to correctly convert #getValue() array back to Curve object.
  Handle allowNull correctly again in SVGImport.
  Simplify SVGImport attribute parsing and correctly handle failing tests with invalid coordinates.
  Further refine Node.js integration.
  Improve the Node version of Base.isPlainObject()
2013-05-11 14:42:56 +02:00
Harikrishnan Gopalakrishnan
ce600f4ea4 Fix: #initialize() to correctly convert #getValue() array back to Curve object. 2013-05-11 00:59:30 +03:00
hkrish
fce29e4b75 merge upstream 2013-05-09 14:30:28 +02:00
Jürg Lehni
7b8e27ddd9 Further simplify getNearestPoint() algorithm. 2013-05-07 00:07:18 -07:00
Jürg Lehni
d70c9b0464 Minor syntax fixes. 2013-05-05 23:19:22 -07:00
Jürg Lehni
3a7547a255 Bring back accidentally removed static functions on Curve. 2013-05-05 23:14:49 -07:00
Jürg Lehni
db42dfdfc1 Implement simpler strategy to iteratively find nearest points on paths.
Idea based on method described on http://pomax.github.io/bezierinfo/
2013-05-05 23:05:57 -07:00
Jürg Lehni
acb3d6f5f9 Update package.json for publishing to NPM. 2013-05-05 19:22:13 -07:00
Jürg Lehni
0fc4b9f28d Remove intersection caching code. 2013-05-05 16:38:18 -07:00
Jürg Lehni
83b68cdb8e Restore full validation check for resulting paths. 2013-05-05 16:36:25 -07:00
Jürg Lehni
c006b081f6 Fix issue that broke "Maximum possible intersections between 2 cubic bezier curve segments - 9" test. 2013-05-05 16:23:41 -07:00
Jürg Lehni
364f6dcd36 Improve code comments a bit. 2013-05-04 11:13:38 -07:00
Jürg Lehni
6da97b894f Improve code comments a bit. 2013-05-04 11:13:38 -07:00
Jürg Lehni
656300ffb1 Write documentation for boolean path operations. 2013-05-04 10:58:50 -07:00
Jürg Lehni
d911c7b12a Write documentation for boolean path operations. 2013-05-04 10:58:50 -07:00
Jürg Lehni
26b3beed5c Implement static Line.intersect() and use it to speed up Curve.getIntersections()
Unfortunately doesn't seem to have any impact!
2013-05-04 10:22:10 -07:00
Jürg Lehni
f704b00e00 Implement static Line.intersect() and use it to speed up Curve.getIntersections()
Unfortunately doesn't seem to have any impact!
2013-05-04 10:22:10 -07:00
Jürg Lehni
86a26db2a2 Use variable names that better reflec functionality and original naming. 2013-05-04 09:58:46 -07:00
Jürg Lehni
4eff5bf45e Use variable names that better reflec functionality and original naming. 2013-05-04 09:58:46 -07:00
Jürg Lehni
f58f58e406 Some more minor tweaks. 2013-05-04 03:38:19 -07:00
Jürg Lehni
3ab20ea3e9 Some more minor tweaks. 2013-05-04 03:38:19 -07:00
Jürg Lehni
023f768817 Further clean up.
Instead of removing temporary data structure, clone Segment.
2013-05-04 03:33:44 -07:00
Jürg Lehni
1e8947af63 Further clean up.
Instead of removing temporary data structure, clone Segment.
2013-05-04 03:33:44 -07:00
Jürg Lehni
cb66f6f2e2 Improve comments. 2013-05-04 03:20:53 -07:00
Jürg Lehni
31a45bad97 Improve comments. 2013-05-04 03:20:53 -07:00
Jürg Lehni
cbde2ea526 Fix accidental variable leakage. 2013-05-04 03:13:57 -07:00
Jürg Lehni
e1ef69f23a Fix accidental variable leakage. 2013-05-04 03:13:57 -07:00
Jürg Lehni
b5abfcb515 One last optimization in computeBoolean(). 2013-05-04 03:08:43 -07:00
Jürg Lehni
469d3129a6 One last optimization in computeBoolean(). 2013-05-04 03:08:43 -07:00
Jürg Lehni
3ee10c1765 more optimizations in computeBoolean().
I think this is done now!
2013-05-04 03:00:31 -07:00
Jürg Lehni
7fdaa3e699 more optimizations in computeBoolean().
I think this is done now!
2013-05-04 03:00:31 -07:00
Jürg Lehni
9fb7340aac Remove need for __segment property and further simplify computeBoolean() code. 2013-05-04 02:50:18 -07:00
Jürg Lehni
9aafb46e6c Remove need for __segment property and further simplify computeBoolean() code. 2013-05-04 02:50:18 -07:00
Jürg Lehni
43b7afb961 Merge loops in reorientPath(). 2013-05-03 23:25:26 -07:00
Jürg Lehni
a5d00e64cf Merge loops in reorientPath(). 2013-05-03 23:25:26 -07:00
Jürg Lehni
aab41752b4 Minor cleanup. 2013-05-03 23:08:00 -07:00
Jürg Lehni
37300455a8 Minor cleanup. 2013-05-03 23:08:00 -07:00
Jürg Lehni
737c2c36fe More computeBoolean() optimizations and clean up. 2013-05-03 23:03:00 -07:00
Jürg Lehni
4a9e3924c6 More computeBoolean() optimizations and clean up. 2013-05-03 23:03:00 -07:00
Jürg Lehni
55c799dc2c Clean up computeBoolean().
Work in progress.
2013-05-03 22:38:29 -07:00
Jürg Lehni
1031f4ecfb Clean up computeBoolean().
Work in progress.
2013-05-03 22:38:29 -07:00
Jürg Lehni
f15deec334 Clean up reorientCompoundPath(). 2013-05-03 22:09:56 -07:00
Jürg Lehni
d014ed3c68 Clean up reorientCompoundPath(). 2013-05-03 22:09:56 -07:00
Jürg Lehni
d5543842e9 Define CompoundPath#reverse() and #clockwise, and replace reversePath() with it. 2013-05-03 21:41:22 -07:00
Jürg Lehni
25e5582a35 Define CompoundPath#reverse() and #clockwise, and replace reversePath() with it. 2013-05-03 21:41:22 -07:00
Jürg Lehni
3515574f65 Move fix for faulty _curves list after calls to Path#reverse() to the right place. 2013-05-03 21:33:17 -07:00
Jürg Lehni
bd3031cdff Move fix for faulty _curves list after calls to Path#reverse() to the right place. 2013-05-03 21:33:17 -07:00
Jürg Lehni
81b4136775 Improve testOnCurve() code. 2013-05-03 21:24:02 -07:00
Jürg Lehni
f03283804b Improve testOnCurve() code. 2013-05-03 21:24:02 -07:00
Jürg Lehni
98efa2f66b Move private functions into private injection scope. 2013-05-03 21:21:53 -07:00
Jürg Lehni
99cf8ae9d4 Move private functions into private injection scope. 2013-05-03 21:21:53 -07:00
Jürg Lehni
d268c68ae5 Remove names from boolean operator functions and use parameter instead. 2013-05-03 21:16:36 -07:00
Jürg Lehni
990e8b4599 Remove names from boolean operator functions and use parameter instead. 2013-05-03 21:16:36 -07:00
Jürg Lehni
9a4c8bde19 Rewrite PathItem#_splitPath() to use Curve#divide().
Leading to faster code, due to less loop passes.
2013-05-03 21:05:44 -07:00
Jürg Lehni
fb8effe088 Rewrite PathItem#_splitPath() to use Curve#divide().
Leading to faster code, due to less loop passes.
2013-05-03 21:05:44 -07:00
Jürg Lehni
7e6519349a Clean up Curve#divide() code. 2013-05-03 21:00:46 -07:00
Jürg Lehni
85de8a0b7d Clean up Curve#divide() code. 2013-05-03 21:00:46 -07:00
Jürg Lehni
5f0feeb31f Adjust precision of Curve#isFlatEnough() to cover rare edge cases. 2013-05-03 21:00:37 -07:00
Jürg Lehni
3101989974 Adjust precision of Curve#isFlatEnough() to cover rare edge cases. 2013-05-03 21:00:37 -07:00
Jürg Lehni
b07e52d361 More work on PathItem#__splitPath() 2013-05-03 18:52:03 -07:00
Jürg Lehni
af51edda34 More work on PathItem#__splitPath() 2013-05-03 18:52:03 -07:00
Jürg Lehni
f054f4a7e0 Allow better code compression by reducing property lookup. 2013-05-03 17:38:15 -07:00
Jürg Lehni
af84bb9988 Allow better code compression by reducing property lookup. 2013-05-03 17:38:15 -07:00
Jürg Lehni
8f7de47bb9 Clean up and simplify PathItem#_splitPath() code.
- Follow Paper.js variable scoping conventions (pretend we have Java-style variable scopes for better readability of code)
- Break lines at 80 chars
- Merge some duplicate code in segment handling.
2013-05-03 17:30:59 -07:00
Jürg Lehni
72a27d9732 Clean up and simplify PathItem#_splitPath() code.
- Follow Paper.js variable scoping conventions (pretend we have Java-style variable scopes for better readability of code)
- Break lines at 80 chars
- Merge some duplicate code in segment handling.
2013-05-03 17:30:59 -07:00
Jürg Lehni
410ceb8ff1 Simplify PathItem#exclude() and #divide() 2013-05-03 16:56:00 -07:00
Jürg Lehni
b8fcc9b105 Simplify PathItem#exclude() and #divide() 2013-05-03 16:56:00 -07:00
Jürg Lehni
1d55372ed4 Revert return strategy of boolean operators for simpler code, simplify operator logic and inline functions. 2013-05-03 16:52:37 -07:00
Jürg Lehni
c11967c81c Revert return strategy of boolean operators for simpler code, simplify operator logic and inline functions. 2013-05-03 16:52:37 -07:00
Jürg Lehni
3fc200973e Include BooleanOperations.html 2013-05-03 16:31:36 -07:00
Jürg Lehni
ee8a79449b Include BooleanOperations.html 2013-05-03 16:31:36 -07:00
Jürg Lehni
68d67fcdcf Start converting boolean code to Paper.js conventions.
- Tabs instead of white-space
- Different rules about spaces before / after parenthesis
2013-05-03 16:21:44 -07:00
Jürg Lehni
1fe83a482f Start converting boolean code to Paper.js conventions.
- Tabs instead of white-space
- Different rules about spaces before / after parenthesis
2013-05-03 16:21:44 -07:00
Jürg Lehni
7ec53f74d1 Move boolean code into its own file, and add information comments again. 2013-05-03 16:16:52 -07:00
Jürg Lehni
90e3dd201a Move boolean code into its own file, and add information comments again. 2013-05-03 16:16:52 -07:00
hkrish
d9d86f4ff7 Merge branch 'master' of https://github.com/paperjs/paper.js
* 'master' of https://github.com/paperjs/paper.js:
  Undo recent change to Curve#getIntersection() since it breaks some boolean operations.

€ý5:q
2013-05-03 19:24:03 +02:00
hkrish
e75cc32a3b Merge branch 'master' of https://github.com/paperjs/paper.js
* 'master' of https://github.com/paperjs/paper.js:
  Undo recent change to Curve#getIntersection() since it breaks some boolean operations.

€ý5:q
2013-05-03 19:24:03 +02:00
Jürg Lehni
9e3b7eef50 Undo recent change to Curve#getIntersection() since it breaks some boolean operations. 2013-05-02 11:32:24 -07:00
Jürg Lehni
840e879ba8 Undo recent change to Curve#getIntersection() since it breaks some boolean operations. 2013-05-02 11:32:24 -07:00
hkrish
debce28bc4 Merge upstream 2013-05-02 14:18:24 +02:00
hkrish
10553c1bd8 Merge upstream 2013-05-02 14:18:24 +02:00
hkrish
381ee98cbc Updated boolean operation methods.
The algorithm is based on paperjs' native segment and curve objects
rather than the generic Node and Link objects.
Also this is much smaller and faster! :)
2013-05-02 13:49:07 +02:00
hkrish
73b018f006 Updated boolean operation methods.
The algorithm is based on paperjs' native segment and curve objects
rather than the generic Node and Link objects.
Also this is much smaller and faster! :)
2013-05-02 13:49:07 +02:00
Jürg Lehni
f425c931a8 Improve Curve#getIntersections() by avoiding further subdivision of flat curves. 2013-05-01 18:40:57 -07:00
Jürg Lehni
e8fed1bdf0 Improve Curve#getIntersections() by avoiding further subdivision of flat curves. 2013-05-01 18:40:57 -07:00
Jürg Lehni
023c8b0432 Fix issue with recursive call of Curve.getIntersections(). 2013-05-01 18:24:54 -07:00
Jürg Lehni
c61e8d57b9 Fix issue with recursive call of Curve.getIntersections(). 2013-05-01 18:24:54 -07:00
hkrish
934ec8df7e Fix: Update the getIntersections method signature in recursive calls 2013-05-01 13:29:02 +02:00
hkrish
f239a3980d Fix: Update the getIntersections method signature in recursive calls 2013-05-01 13:29:02 +02:00
hkrish
d8dc762826 Merge branch 'master' of https://github.com/paperjs/paper.js
* 'master' of https://github.com/paperjs/paper.js:
  Define CurveLocation#intersection as a way to retrieve the CurveLocation on the intersecting path when using Path#getIntersections().

€ý5€ý`q€kb:q
2013-05-01 12:39:04 +02:00
hkrish
88b720be76 Merge branch 'master' of https://github.com/paperjs/paper.js
* 'master' of https://github.com/paperjs/paper.js:
  Define CurveLocation#intersection as a way to retrieve the CurveLocation on the intersecting path when using Path#getIntersections().

€ý5€ý`q€kb:q
2013-05-01 12:39:04 +02:00
Jürg Lehni
69f8bdc560 Define CurveLocation#intersection as a way to retrieve the CurveLocation on the intersecting path when using Path#getIntersections(). 2013-04-30 18:41:26 -07:00
Jürg Lehni
883e3ad563 Define CurveLocation#intersection as a way to retrieve the CurveLocation on the intersecting path when using Path#getIntersections(). 2013-04-30 18:41:26 -07:00
hkrish
30d9e322e8 Boolean Operations.
This is probably a crude integration. Need to resolve some issues,
such as finding the right place for constants, private classes etc.
2013-04-29 21:36:12 +02:00
hkrish
b4dd16bbfb Boolean Operations.
This is probably a crude integration. Need to resolve some issues,
such as finding the right place for constants, private classes etc.
2013-04-29 21:36:12 +02:00
Jürg Lehni
c7ab32c501 Rearrange linear curve conditions. 2013-04-26 14:37:37 -07:00
Jürg Lehni
c513a24f46 Handle intersection between linear curves without recursive subdivision.
Closes #207.
2013-04-26 14:31:42 -07:00
Jürg Lehni
06ffd8089d Fix issue in Path#removeSegments() where curves are removed wrongly when start index is 0.
Closes #200.
2013-04-26 08:46:57 -07:00
Jürg Lehni
74f6a93b33 Optimize Curve.getArea(). 2013-04-25 17:47:11 -07:00
Jürg Lehni
898e216668 Implement Path#getArea() and CompoundPath#getArea(). 2013-04-25 17:37:19 -07:00
Jürg Lehni
80a1129eab Consistently use 'this' rather than 'Curve'. 2013-04-25 17:19:00 -07:00
Jürg Lehni
1b5ca4dec9 Rename Curve._addIntersections() to Curve.getIntersections() 2013-04-25 17:17:53 -07:00
Jürg Lehni
eaa6e3bb6b Improve Curve#getCrossings() documentation and code. 2013-04-25 11:08:50 -07:00
Jürg Lehni
d7e075d316 Handle contour edge cases in Path#contains().
Closes #208.
2013-04-25 11:03:49 -07:00
Jürg Lehni
edfd8f53de Remove accidentally committed debugging code. 2013-04-24 19:28:46 -07:00
Jürg Lehni
c70b9e7d7d Fix issue with Path#strokeBounds with #strokeJoin == 'miter' and clockwise orientation.
Closes #206.
2013-04-24 19:27:31 -07:00
Jürg Lehni
69512ac396 Simplify and document Segment#_serialize(). 2013-04-23 07:39:31 -07:00
Jürg Lehni
0c114883e1 Add unique ids to CurveLocation. 2013-04-22 19:11:42 -07:00
Jürg Lehni
dc9a9c42d2 Cleanup solveCubic() further. 2013-04-21 08:44:41 -07:00
Jürg Lehni
2fc4ff10ee Implement Item#_contains() with local coordinates, and have Item#contains() take Item#matrix into account. 2013-04-21 08:43:05 -07:00
Jonathan Puckey
3136480e5e Clean up Segment object constructor example. 2013-04-21 16:02:26 +02:00
Jonathan Puckey
52e7c39567 Improve Curve documentation. 2013-04-21 15:43:57 +02:00
Jonathan Puckey
fdd367e1c2 Add titles to Path.Constructors documentation examples. 2013-04-21 13:58:22 +02:00
Jonathan Puckey
a5997dcc24 Add example to Item#contains(point) docs. 2013-04-21 13:56:29 +02:00
Jonathan Puckey
daf8d0f881 Rename 'properties' constructor parameter to 'object' in docs. 2013-04-21 13:54:31 +02:00
Jürg Lehni
db7eb65bd7 Implement Item#contains() and use it for hit-testing Rasters. 2013-04-20 20:41:52 -07:00
Jürg Lehni
bb03c72ce8 Implement Item#hasFill(). 2013-04-20 20:40:20 -07:00
Jürg Lehni
c45ad26b67 Remove tolerance parameter from solveCubic() / solveQuadratic() since we should always use EPSILON. 2013-04-20 19:58:42 -07:00
Jürg Lehni
14aa8e5dea Improve precision of Numerical.solveCubic() and fix issues in Curve.getCrossings().
Closes #202.
2013-04-20 19:14:19 -07:00
Jürg Lehni
461def5383 Fix issue with imprecise tangents / normals to curves at t = 0, 1. 2013-04-20 17:40:19 -07:00
Jürg Lehni
1952e3dc7d Implement Curve#getCurvatureAt(). 2013-04-20 17:26:51 -07:00
Jürg Lehni
bcb10a222f Add SvgImport example for Inkscape and fix issue with multiple SVG path commands.
Closes #203.
2013-04-20 14:54:21 -07:00
Jürg Lehni
e1807214f4 Large refactoring of Style handling for notable speed improvements. 2013-04-19 19:31:29 -07:00
Jürg Lehni
bf9acd4499 Correct Numerical.KAPPA value. 2013-04-19 18:57:31 -07:00
Jürg Lehni
9da392a99c Commit initial support for Shape class.
Hit testing is still missing.
2013-04-19 17:25:50 -07:00
Jürg Lehni
90f2614d52 Export Numerical object and move KAPPA constant there. 2013-04-19 17:03:41 -07:00
Jürg Lehni
67203e753c Move #applyMatrix setting to PathItem. 2013-04-19 13:16:00 -07:00
Jürg Lehni
8d99aa5f95 Handle color transformation in Item#transform() rather than Path#_applyMatrix().
Fixes an issue with BoucingBalls.html, now that CompoundPath#applyMatrix is true.
2013-04-19 13:13:54 -07:00
Jürg Lehni
9efbc288a1 Merge Path.Rectangle and Path.RoundRectangle. 2013-04-19 12:36:49 -07:00
Jürg Lehni
922b9b5bd0 Rename _cloning parameter to _preserve. 2013-04-19 11:54:16 -07:00
Jürg Lehni
2e265693ff Make #drawSelected() protected. 2013-04-18 17:50:53 -07:00
Jürg Lehni
9ee8590a4d Move Item.draw() to Item#draw().
Makes more sense this way.
2013-04-18 17:04:06 -07:00
Jürg Lehni
d23e21edd7 Make Item#draw() protected, so we know to not directly call it. 2013-04-18 16:58:35 -07:00
Jürg Lehni
1333f59d54 Have CompoundPath always apply transformations by default. 2013-04-18 16:22:21 -07:00
Jürg Lehni
9fe1ff951a Clean up code. 2013-04-09 20:36:38 -07:00
Jürg Lehni
7f245974e6 Implement a faster method to filter out beginnings of intersected curves. 2013-04-09 20:35:31 -07:00
Jürg Lehni
a9a0857ba4 Find a better strategy to avoid duplicate solutions in PathItem#getIntersections().
Closes #197.
2013-04-09 20:27:55 -07:00
Jürg Lehni
0f19e72733 Minor tweaks. 2013-04-09 19:12:47 -07:00
Jürg Lehni
b55d89acda Move handling of clipping outside of draw function, so canvas context can correctly be saved and restored for clipping paths too. 2013-04-09 19:08:41 -07:00
Jürg Lehni
fbe8a558bd Refactor Format literal to Formatter class that keeps precision stored. 2013-04-09 17:32:19 -07:00
Jürg Lehni
9b50020721 Check for gradient Colors correctly. 2013-04-09 08:35:42 -07:00
Jürg Lehni
d3bb68d0e0 Use faster Array construction. 2013-04-09 07:55:09 -07:00
Jürg Lehni
218732e320 Implement a row of simple optimizations to increase performance of Item constructors. 2013-04-07 17:36:09 -07:00
Jürg Lehni
fa143ad545 Fix typo. 2013-04-07 09:49:34 -07:00
Jürg Lehni
a0b903e49c Simply call slice() instead of slice(0). 2013-04-06 18:39:17 +02:00
Jürg Lehni
18ed9010a6 Derive Item#type from Item#_class and use that instead in code that depends on Item types. 2013-04-06 18:07:30 +02:00
Jürg Lehni
f43b322d2a Rename Base#_type property to #_class. 2013-04-06 09:16:08 +02:00
Jürg Lehni
cb62c6053a Switch back to persistence of segments for good. 2013-04-05 17:34:09 +02:00
Jürg Lehni
1392f87d85 Switch back to serializing segment lists for now, so we can fix other failing tests. 2013-03-19 18:48:59 -07:00
Jürg Lehni
5ff911f68c Have Path#closePath() handle merging of first and last segment, if doubled.
So we finally found a reason for #closePath() to stick around :)
2013-03-19 18:47:18 -07:00
Jürg Lehni
3f634f6420 Use same precision in Path#getPathData() as everywhere else. 2013-03-19 16:23:36 -07:00
Jürg Lehni
e854254986 Insert linear segments when dividing linear curves. 2013-03-19 16:17:12 -07:00
Jonathan Puckey
e3760afecd Fix handling of param.clip in CompoundPath#draw. 2013-03-17 22:27:20 +01:00
Jonathan Puckey
e5c32b9520 Actually fix handling of param.clip in Path#draw. 2013-03-17 21:59:07 +01:00
Jonathan Puckey
4c4258d2e1 Fix Raster#getAverageColor by having Path#draw clip the context, when param.clip is true. 2013-03-17 21:41:46 +01:00
Jonathan Puckey
4b87860b30 Add documentation of Path#getLocationOf 2013-03-16 18:39:53 +01:00
Jonathan Puckey
6f490d8b34 Add documentation for Path#split. 2013-03-16 17:59:31 +01:00
Jonathan Puckey
2d9b0b2e8e Improve Path documentation. 2013-03-10 19:48:46 +01:00
Jonathan Puckey
4292b90bd4 Improve Segment documentation. 2013-03-10 19:48:28 +01:00
Jonathan Puckey
38b9b327ae Add Path.Constructor examples. 2013-03-10 19:09:09 +01:00
Jonathan Puckey
177f799bde Rename Path.Star parameter from numPoints to points. 2013-03-10 18:09:05 +01:00
Jonathan Puckey
097a9c958f Rename Path.RegularPolygon parameter from numSides to sides. 2013-03-10 18:02:16 +01:00
Jürg Lehni
97e85d66db Fix issue with object literal properties being accidentally misread as path segments.
Closes #177.
2013-03-05 00:28:21 -08:00
Jonathan Puckey
2666e60f28 Fix Path#getTangentAt example. 2013-03-04 12:37:55 +01:00
Jonathan Puckey
2d103dd792 Improve and fix example documentation. 2013-03-04 12:09:58 +01:00
Jürg Lehni
849d3efc2e Have PathItem#setPathData() clear the previous content. 2013-03-03 16:56:48 -08:00
Jürg Lehni
8a69fcd1e5 Actually use precision setting in Path#getPathData(). 2013-03-03 16:51:31 -08:00
Jürg Lehni
7b7168feb1 Fix reading of rectangle in Path.Constructor.
And all tests are green again.
2013-03-03 15:29:15 -08:00
Jonathan Puckey
7643085378 Path example documentation. 2013-03-03 20:48:03 +01:00
Jonathan Puckey
fa861f2047 Improve example documentation. 2013-03-03 20:10:25 +01:00
Jonathan Puckey
801eb0f2a8 Add example to Segment#selected docs. 2013-03-03 20:09:41 +01:00
Jonathan Puckey
3cdb11fe36 GradientStop & PathItem example documentation. 2013-03-03 19:47:32 +01:00
Jonathan Puckey
09e4bd0bb4 Improve Path.Constructors example documentation. 2013-03-03 18:34:39 +01:00
Jürg Lehni
1bfafee0ca Use a default precision of three digits for exporting path data. 2013-03-02 08:14:17 -08:00
Jürg Lehni
67b1a602c4 Fix hit-testing of open filled Paths when they are part of a CompoundPath. 2013-03-01 21:47:13 -08:00
Jürg Lehni
936b1bccbb Get curves uncached in CurveLocation#split() and #divide(). 2013-03-01 20:26:03 -08:00
Jürg Lehni
03521796ef Setting Path#selected to false should deselect all handles too. 2013-03-01 20:25:09 -08:00
Jürg Lehni
dfe1a7efab Define setter for Segment#linear. 2013-03-01 20:24:46 -08:00
Jürg Lehni
2230c2888d Fix issue with Curve#divide() where the wrong curve reference is returned. 2013-03-01 20:19:44 -08:00
Jürg Lehni
532176ac62 Fix drawing of selected handles. 2013-03-01 18:32:55 -08:00
Jürg Lehni
c543704115 Define Project#options as a way to configure things.
For now, only options.handleSize is in use.
2013-03-01 18:28:22 -08:00
Jürg Lehni
f0593c1fb9 Fix error with #getPathData() and empty paths. 2013-03-01 17:46:55 -08:00
Jürg Lehni
3f5d0a6925 Merge constructor._name with _type and use CamelCase for Item types. 2013-03-01 17:13:22 -08:00
Jürg Lehni
7553712e35 Simplify code for readRectangle() in Path.Constructors. 2013-03-01 14:39:26 -08:00
Jürg Lehni
3f85dcdb77 Use #_set() in Rectangle#initialize() to simplify code and increase flexibility. 2013-03-01 14:37:27 -08:00
Jürg Lehni
8d2c2f5fda Fix an issue with PathFitter where path with only one segment would throw an error.
Closes #175.
2013-03-01 14:28:32 -08:00
Jürg Lehni
7405858f32 Simplify code for reading of named arguments, removing the need for filtering arguments by using 'in' checks instead for the presence of properties / setters. 2013-03-01 14:06:04 -08:00
Jürg Lehni
06e33ba412 Improve flexibility of reading rectangles in Path.Constructor.
We can now define the rectangle by any property that it has setters for.
2013-03-01 13:52:11 -08:00
Jürg Lehni
12d4d563d9 Further shorten path data code. 2013-03-01 01:18:42 -08:00
Jürg Lehni
13a567bcaa Fix handling of multiple h / v commands in path data. 2013-03-01 01:18:27 -08:00
Jürg Lehni
b649240696 Use correct defaults for #pathData serialization. 2013-02-28 19:55:18 -08:00
Jürg Lehni
cef30f9dd1 Switch to #pathData for JSON serialization of Path and CompoundPath. 2013-02-28 19:41:13 -08:00
Jürg Lehni
5fbc6e939d Fix small SVG path-data parser issue. 2013-02-28 19:33:08 -08:00
Jürg Lehni
82cefa9846 Fix typo. 2013-02-28 19:29:44 -08:00
Jürg Lehni
0f140e391d Minor clean ups. 2013-02-28 19:21:46 -08:00
Jürg Lehni
78b3621cf6 Implement PathItem#pathData getter and setter for SVG style path data.
And use it fro SvgImport too.
2013-02-28 19:14:06 -08:00
Jürg Lehni
9d8cddbe42 Implement new private Format object that handles formatting of number, point, size and rectangle. 2013-02-28 19:14:05 -08:00
Jürg Lehni
79e836373d Clean up hitTest code a little. 2013-02-25 15:41:31 -08:00
Jürg Lehni
cd9184a6f0 Fix CompoundPath hit-testing. 2013-02-24 19:01:29 -08:00
Jürg Lehni
6b7c6b6c4c Implement Item#bounds.selected to control drawing of selected item bounds. 2013-02-24 15:41:31 -08:00
Jürg Lehni
0a81787c7e Fix a bug in CompoundPath#hitTest().
Results from Path#hitTest() were not passed through.
2013-02-24 14:56:28 -08:00
Jürg Lehni
119e5acbf9 Move #_setProperties() and #set() from Item to Base, rename it to #_set and use it for Tool too. 2013-02-15 18:28:49 -08:00
Jürg Lehni
23b51915eb Implement CompoundPath#firstSegment, #lastSegment, #firstCurve and #lastCurve. 2013-02-15 18:05:16 -08:00
Jürg Lehni
d3ccec2256 Use the code from Group#isEmpty() and CompoundPath#isEmpty() for Item#isEmpty(), since any item that does not have children overrides it. 2013-02-15 18:01:23 -08:00
Jürg Lehni
24d467e292 Implement support for native dash strokes, through both setLineDash() and mozDash. 2013-02-12 15:32:21 -08:00
Jürg Lehni
fdd15e675f Add options argument to #toJson() methods, and use to implement optional fractional digit precision control. 2013-02-12 14:57:54 -08:00
Jürg Lehni
489a785171 Override Item.extend() to merge the subclass' _serializeFields with the parent class' _serializeFields.
And have style fields always serialized in non-compact form for Color.
2013-02-11 17:08:23 -08:00
Jürg Lehni
b10454a83c Rename Matrix#createInverse() to #inverted() and #createShiftless() to #shiftless(). 2013-02-09 12:18:40 -08:00
Jürg Lehni
bc5826d324 Clean up code. 2013-02-08 18:46:22 -08:00
Jürg Lehni
dc35fdbd02 Move named inner functions out of nested scopes, to prepare for 'use strict;' transition. 2013-02-08 18:23:33 -08:00
Jürg Lehni
1ee29d56ac Improve comment about JavaScriptCore bug. 2013-02-08 16:35:33 -08:00
Jürg Lehni
b6d2d83af5 Fix the strangest JavaScriptCore bug that I've encountered in ages.
Closes #168. Read comment for more details.
2013-02-08 16:32:47 -08:00
Jürg Lehni
02ca95eb46 Avoid accidental global leakage. 2013-02-08 16:12:57 -08:00
Jürg Lehni
6c9c16ad3d Update copyright information comments, and year. 2013-01-28 18:03:27 -08:00
Jürg Lehni
b0deda9445 Add missing documentation for various location related functions on Curve. 2013-01-28 16:47:45 -08:00
Jürg Lehni
c7d8aebb9e Swap Curve's bounds scope with point evaluation scope, for proximity to bounds related methods in scope before. 2013-01-28 16:32:04 -08:00
Jürg Lehni
1a438b8b9b Change Curve#[getPoint / getTangent / getNormal](t) to #[getPoint / getTangent / getNormal](offset, isParamter).
Keep deprecated versions around for now.
2013-01-28 16:30:28 -08:00
Jürg Lehni
e75ee18de1 Restructure code a bit. 2013-01-22 14:58:34 -08:00
Jürg Lehni
a5bfa9e5d3 Remove debug logging for Segment / Curve insertion, deletion and splitting. 2013-01-22 14:54:19 -08:00
Jürg Lehni
f09bc84a12 Implement correct handling of Curves / Segments synchronization, improve CurveLocation linking to Curves through their linked Segments, and preserve Curves in Path#split() calls. 2013-01-22 14:46:49 -08:00
Jürg Lehni
e4d98f7865 Add internal _cloning parameter to all insertion methods. 2013-01-20 16:14:30 -08:00
Jürg Lehni
677ea374c5 Only change #clockwise on closed Paths when inserting into CompoundPaths. 2013-01-20 15:48:06 -08:00
Jürg Lehni
c5ede2e955 Add support for _setProperties() to CompoundPath constructor. 2013-01-20 15:20:10 -08:00
Jürg Lehni
ba5aa86411 Include Roger Willcocks in the thanks regarding isSufficentlyFlat. 2013-01-20 14:28:02 -08:00
Jürg Lehni
4346563fe4 No need to merge Path#_serializeFields, simply keep in sync with Item#_serializeFields (excluding #children). 2013-01-20 14:01:43 -08:00
Jürg Lehni
b05a21d6c9 Fix bug in Curve#getLocationOf(). 2013-01-20 14:01:42 -08:00
Jürg Lehni
49c8f8b6b5 A couple of improvements on Path#split(). 2013-01-20 14:01:42 -08:00
Jürg Lehni
b04eb2b98f Implement Path#split() and Curve#split(). 2012-12-31 22:28:41 +01:00
Jürg Lehni
d2b799f4db Fix various issues with Path#curves synchronization. 2012-12-31 22:21:50 +01:00
Jürg Lehni
f0038465cc Fix clearing of removed segments. 2012-12-31 21:45:30 +01:00
Jürg Lehni
a10e44d601 Minor code clean-up. 2012-12-31 21:43:43 +01:00
Jürg Lehni
8cea919dbd Calculate CurveLocation#parameter uncached when dealing with dividing or splitting, since these commands alter the underlying Path. 2012-12-31 21:42:55 +01:00
Jürg Lehni
5a2be6d545 No need for chainable functions on Item types. 2012-12-31 21:42:14 +01:00
Jürg Lehni
d509f86e1a Fix issue where removing segments from open paths would correct curves wrongly. 2012-12-31 21:19:55 +01:00
Jürg Lehni
5da4e89672 Return 'this' in more places to facilitate chained calls inside the library. 2012-12-31 20:07:28 +01:00
Jürg Lehni
8ec8af4dc5 Define CurveLocation#divide(). 2012-12-30 19:53:09 +01:00
Jürg Lehni
e066db4577 Implement Curve#divide(). 2012-12-30 19:49:17 +01:00
Jürg Lehni
4185b63d99 Und recent renaming of #getNearest*() methods. 2012-12-30 19:43:35 +01:00
Jürg Lehni
4ab9a942b0 Clean up Path.Constructor code. 2012-12-30 18:33:46 +01:00
Jürg Lehni
a1fc86b19e Add forgotten passing on of arguments._filtered. 2012-12-30 18:29:01 +01:00
Jürg Lehni
4e20a5794f Remove debug logging. 2012-12-30 18:27:42 +01:00
Jürg Lehni
8bed8cb15d Define mechanism for flexible reading of named arguments through Base.readNamed() and Base.hasNamed(), and use it to implement property object literal versions of Path.Constructor code. 2012-12-30 18:24:33 +01:00
Jürg Lehni
2abefee336 Merge Base.readValue() with Base.read() and rename Base.peekValue() to Base.peek().
When called directly on Base, read() reads values, otherwise the specific type of the subclass it is called on.
2012-12-30 16:07:20 +01:00
Jürg Lehni
1b539301ad Find a better naming convention for the various getLocation* methods (*At for offsets / parameters, *Of for points), implement the missing methods on Curve and use them in Path. 2012-12-27 21:08:03 +01:00
Jürg Lehni
231369fa01 Shorten code a bit, using loops. 2012-12-27 20:46:12 +01:00
Jürg Lehni
cb8f3291d3 Clean up some comments. 2012-12-27 20:19:23 +01:00
Jürg Lehni
5b9d33f32e Fix imprecision in intersection code by re-introducing tolerance parameter in Curve#isFlatEnough(). 2012-12-27 20:13:45 +01:00
Jürg Lehni
3c4978eb04 Rename Curve#getParameter(point) to Curve#getParameterOf(point), to better distinguish from Curve#getParameterAt(length). 2012-12-27 20:09:21 +01:00
Jürg Lehni
00898908d3 Write documentation for PathItem#getIntersections(). 2012-12-27 19:26:40 +01:00
Jürg Lehni
68ad4bb5ba Implement PathItem#getIntersections(path) and Curve#getIntersections(curve) using divide-and-conquer approach, and new Curve.getBounds(). 2012-12-27 19:23:03 +01:00
Jürg Lehni
03b5d58e79 Merge branch 'refs/heads/master' into intersection 2012-12-27 18:43:43 +01:00
Jürg Lehni
75596e1d03 Move a part of Path.getBounds() code into Curve._addBounds(), and use it to also define Curve.getBounds(). 2012-12-27 18:38:55 +01:00
Jürg Lehni
57a9f4fc91 Use constant substitution for Numerical constants as well. 2012-12-27 18:36:59 +01:00
Jürg Lehni
050ca1dcb1 Further clean up Path.getBounds() code. 2012-12-27 17:43:21 +01:00
Jürg Lehni
3a1f2eec3f Restructure Path#getBounds() code so Curve bounds calculations can be moved to Curve. 2012-12-27 15:19:42 +01:00
Jürg Lehni
2673991620 Have Path#_serializeFields inherit from Item#_serializeFields. 2012-12-27 13:04:38 +01:00
Jürg Lehni
f45c04a359 Remove overridden Path#matrix getters and setters, since we now control behavior through #applyMatrix. 2012-12-27 13:04:07 +01:00
Jürg Lehni
4f83e0eee6 Commit first version of serialization / deserialization mechanism.
It appears to work fine already for Paths and Groups.
2012-12-27 12:45:55 +01:00
Jürg Lehni
ae4e5d4be5 Rename Item#setProperties() to hidden #_setProperties() and add public Item#set() to use same functionality from outside. 2012-12-27 00:52:09 +01:00
Jürg Lehni
3ac039bd66 Implement properties object literal initialization for all Item constructors. 2012-12-25 22:12:25 +01:00
Jürg Lehni
947afe85f0 Simplify Path#initialize() code. 2012-12-25 16:59:05 +01:00
Jürg Lehni
8f093f6dd7 Remove all PORT comments, since we won't port back features to Scriptographer. 2012-12-25 16:07:48 +01:00
Jürg Lehni
b54bdadaff Rename Item#transformContent to #applyMatrix. 2012-12-24 17:39:24 +01:00
Jürg Lehni
d6fceb928f Implement Item#transformContent property, which controls wether Item#transform() directly applies transformations to contents, or simply stores them in Item#matrix. 2012-12-24 00:39:42 +01:00
Jürg Lehni
e21ea457a7 Remove Item#apply() and clean up #applyMatrix() and simplify handling. 2012-12-24 00:29:09 +01:00
Jürg Lehni
734cc1cc61 Undo commit 4445376c0204cb5a2e408c64b77a5b6fa09305ba since it clashes with magnification. 2012-12-21 16:41:57 +01:00
Jürg Lehni
c025c41ec0 Start implementing PathItem#getIntersections(). 2012-12-21 16:13:38 +01:00
Jürg Lehni
d43cc28aac Optimise Curve constructors that construct from 4 arguments (points) and 8 (coordinate values). 2012-12-20 18:03:11 +01:00
Jürg Lehni
e10ef4dba3 Fix comment. 2012-12-19 03:22:57 +01:00
Jürg Lehni
22ddd7a37e Implement CompoundPath#curves. 2012-12-18 14:53:38 +01:00
Jürg Lehni
29a2bc781b Implement the various bounds getter on Curve too, using caching and the new static Path.get*Bounds methods. 2012-12-18 14:35:21 +01:00
Jürg Lehni
4de5f30f72 Improve documentation. 2012-12-18 14:19:22 +01:00
Jürg Lehni
b535d9f843 Implement new Bootstrap feature that allows hiding of getter parameters to make sure beans are produced, and use it across the library. 2012-12-15 19:51:31 +01:00
Jürg Lehni
5a316c244b Directly expose bounds methods as statics rather than using a private scope. 2012-12-15 08:27:37 -08:00
Jürg Lehni
0d2ed108e2 Refactor getBounds code so that functionality can be exposed as static methods on Path. 2012-12-15 08:19:10 -08:00
Jürg Lehni
021009abbc Shorten Path#getBounds() code by using Numerical.solveQuadratic(). 2012-12-15 07:58:20 -08:00
Jürg Lehni
09ee9a0689 Exclude 1 in parameter range for crossing counting, as segment points would be counted twice otherwise. 2012-12-15 02:27:36 -08:00
Jürg Lehni
16578e6b15 Clean up code. 2012-12-15 02:24:46 -08:00
Jürg Lehni
a36d244eb1 Handle impression in Curve#getCrossings(), causing wrong results when handling circles. 2012-12-15 01:52:23 -08:00
Jürg Lehni
9a7f72e163 Clean up getBounds code a bit, by using less local variables and more explicit variable names. 2012-12-14 21:40:25 -08:00
Jürg Lehni
2061cb0517 Fix Path#contains() for unclosed paths that have a fill color. 2012-12-14 21:39:47 -08:00
Jürg Lehni
9d8bf12028 Never return null from #getBounds. 2012-12-09 18:00:23 -08:00
Jürg Lehni
d16155f4fe Fix CompoundPath#clone() so that it does not alter the #clockwise state on its children. 2012-12-01 11:31:03 -08:00
Jürg Lehni
f14b685c1d Use #_type comparisson rather than slower instanceof operator wherever we can. 2012-12-01 11:17:09 -08:00
Jürg Lehni
ace1d0f441 No need to set _clockwise since #reverse() already does so. 2012-12-01 11:10:59 -08:00
Jürg Lehni
d0cc8b6c16 Fix issue with hit-testing filled paths that are not closed. 2012-11-28 22:13:31 -08:00
Jürg Lehni
4d51173881 Keep Path#curves in sync properly when removing the last segment of an open path.
Closes #138.
2012-11-23 13:58:13 -08:00
Jürg Lehni
61b6026361 Rename CompoundPath#flatten() to #reduce(), to avoid clash with Path#flatten(). 2012-11-23 01:16:21 -08:00
Ben Firshman
8ca26f650a Fixed leaky _handle2 2012-11-20 15:53:31 +00:00
Ben Firshman
73d6c102a6 Fix k leaking into globals 2012-11-20 15:53:04 +00:00
Ben Firshman
dc1161b32a Fix fullLength leaking into globals 2012-11-20 15:53:03 +00:00
Jürg Lehni
d671a08205 Introduce Base.toFloat() and rename Base.formatNumber() to Base.formatFloat() 2012-11-14 01:31:08 -08:00
Jürg Lehni
e9a9066d7f Use group creation without explicit array declaration, as that's been supported all along. 2012-11-06 20:37:50 -08:00
Jürg Lehni
1cb6a7fc3c Clean up Path#smooth() code a bit. 2012-11-06 20:18:59 -08:00
Jürg Lehni
f110038104 Improve clipping mask drawing, and remove some unneeded ctx.save() / ctx.restore() calls. 2012-11-06 20:14:21 -08:00
Jürg Lehni
4b6207bdb6 Do not allow adding of items other than paths to CompoundPath. 2012-11-06 14:01:52 -08:00
Jürg Lehni
28642bd1c8 Rename Path.Oval() to Path.Ellipse(), and deprecate Path.Oval(). 2012-11-06 11:37:00 -08:00
Jürg Lehni
fd8fe9c08e Rename CompoundPath#simplify() to #flatten() to avoid clashes with Path#simplify(), and add Path#flatten(), returning itself. 2012-11-06 10:16:03 -08:00
Jonathan Puckey
33c13b36a3 Fix drawing of groups where a compound path is used as a clip mask. 2012-11-06 18:07:51 +01:00
Jürg Lehni
4c51544b6e Implement correct checks for primitives (rect, ellipse, circle). 2012-11-06 01:22:16 -08:00
Jürg Lehni
64b9daacd0 Code clean-up. 2012-11-05 21:06:56 -08:00
Jürg Lehni
6e0f29bf4a Rename Path#closed getter to #isClosed() instead of #getClosed(). 2012-11-05 21:06:47 -08:00
Jürg Lehni
400b454177 Introduce Numerical.isZero(), for comparisons against 0 with a tolerance. 2012-11-05 21:06:13 -08:00
Jürg Lehni
35568c15f2 Implement transparent constant-substitution in prepro.js to shave of some extra bytes of final distribution file. 2012-11-05 18:11:44 -08:00
Jürg Lehni
1050e3314e Implement Segment#isLinear() and Path#isPolygon(). 2012-11-04 00:03:49 -07:00
Jürg Lehni
19d145f281 Introduce Item#type, returning a simple item type string identifier. 2012-11-03 23:43:18 -07:00
Jürg Lehni
6ed1d67ada Modernize Bootstrap.js, introduce Base.create() and use it instead of the Constructor.dont hack for object creation without the calling of initialize. 2012-11-03 21:49:37 -07:00
Jürg Lehni
07c0b6ce6a Improve Path#moveTo behavior()
Allowing it to be called multiple times before any other drawing commands.
2012-11-03 19:45:02 -07:00
Jürg Lehni
1ce332756e Rename ImportSvg to SvgImporter, and ExportSvg to SvgExporter. 2012-11-02 17:40:07 -07:00
Jürg Lehni
ab02023adf Do not create extra points when asked to produce a round rectangle with no radius. 2012-11-02 17:04:21 -07:00
Jürg Lehni
b22ff5ecca Revert a recent change in selection handling. 2012-11-02 16:27:59 -07:00
Jürg Lehni
f6f80e4061 Implement CompoundPath#contains() and #hitTest() correctly.
And change the way that styles are stored on CompoundPaths: Not in the first child but in the item itself.
2012-10-22 18:48:51 -04:00
Jürg Lehni
f73717a7e7 Fix issues in Numerical.solveQuadratic(), solveCubic() and Path#contains().
Closes #71.
2012-10-22 18:21:33 -04:00
Jürg Lehni
317fcf5432 Only include strokeWidth in roughBounds if a strokeColor is actually set. 2012-10-20 16:01:53 -04:00
Jürg Lehni
f87eadecda Correct default value for clockwise in arcTo(). 2012-10-19 09:18:10 -04:00