Commit graph

4678 commits

Author SHA1 Message Date
Jürg Lehni
4d13f0e1e0 Simple optimization in PathItem#contains()
Perform a handle bounds check before calculating winding, as described by @iconexperience in #869
2015-12-30 21:55:20 +01:00
Jürg Lehni
5c976420f8 Further improve #resolveCrossings() based on discussion with @iconexperience.
Closes #869
2015-12-30 21:55:20 +01:00
Jürg Lehni
d6a8538674 Fix overlap handling for boolean intersection.
Closes #870
2015-12-30 21:55:20 +01:00
Jürg Lehni
b5a38ae5ec Fix orientation handling in new #resolveCrossings().
Closes #869
2015-12-30 21:55:20 +01:00
Jürg Lehni
85f08825d7 Implement support for CSS blend-modes in SVGExport. 2015-12-30 21:55:20 +01:00
Jürg Lehni
ecad1c6a0d More code clean-ups and simplifications for #852 2015-12-30 21:55:20 +01:00
Jürg Lehni
973491f962 Some code-clean up for #852
Mainly to make it fit into the 80 char line lenght.
2015-12-30 21:55:20 +01:00
Jürg Lehni
f34afbc19a Clean up code from #856 a bit. 2015-12-30 21:55:19 +01:00
Jürg Lehni
d67796f655 Some more documentation work. 2015-12-30 21:55:19 +01:00
Jürg Lehni
8967193bb9 Improve SVG definition id parsing.
Closes #666
2015-12-30 21:55:19 +01:00
Jürg Lehni
cc1e58e243 Improve Chrome fix to handle wrong coordinates in both directions.
Closes #800.
2015-12-30 21:55:19 +01:00
Jürg Lehni
21f4141e4f Fix werid mouse event issue on Chrome / Windows.
Closes #800
2015-12-30 21:55:19 +01:00
Jürg Lehni
32cf1ba69e Partly revert "Treat overlaps as crossings as well."
This partly reverts commit deafacdad0 and closes #868
2015-12-30 21:55:19 +01:00
Jürg Lehni
a7a07fb6d5 Update JSDoc and do some documentation spring-cleaning.
- Convert from {@code ...} to shorter `...`
- Reformat some documentation comment blocks
- Update copyright notices
2015-12-30 21:55:19 +01:00
Jürg Lehni
7d25096de6 Fix new failing #isCrossing() test-case. 2015-12-30 21:55:19 +01:00
Jürg Lehni
a20b0469d6 Correctly keep track of all straight curves that need their handles cleared at the end.
Closes #838
2015-12-30 21:55:19 +01:00
Jürg Lehni
b724a59901 Handle non-reversible matrix in Item#hitTest()
Closes #617
2015-12-30 21:55:18 +01:00
Jürg Lehni
f2f34c3b75 Some minor fixes in new #getItems() code. 2015-12-30 21:55:18 +01:00
Jürg Lehni
f2a44a5832 Remove Base#class again as it's causing issues in lookup tables. 2015-12-30 21:55:18 +01:00
Jürg Lehni
de532aac2f Implement control over recursive iteration in #getItems()
Closes #853.
2015-12-30 21:55:18 +01:00
Jürg Lehni
f95d6ab310 Fix bug in Item#getItems(function() {})
Closes #751
2015-12-30 21:55:18 +01:00
Jürg Lehni
08d75a48ff Fix issue again with param.overlapping in #getItems()
This time, properly!
Closes #751
2015-12-30 21:55:18 +01:00
Jürg Lehni
93a5e2d18c Refine some code comments. 2015-12-30 21:55:18 +01:00
Jürg Lehni
aa316ffc8c Avoid applying item._matrix twice in Item#intersects()
As suggested by @sapics.
Closes #847
2015-12-30 21:55:18 +01:00
Jürg Lehni
7592895445 Big overhaul of CurveLocation#isCrossing()
Improved to better handle touching curves and edge cases involving straight curves.

Closes #865
2015-12-30 21:55:18 +01:00
Jürg Lehni
306d8bae86 Clean up the new Item#reduce() code a bit. 2015-12-30 21:55:18 +01:00
Jürg Lehni
fec67617e1 Merge pull request #846 from iconexperience/reduce-fix
Make sure reduced item has no parent if original item had no parent.
Fix for #835
2015-12-30 21:55:18 +01:00
Jürg Lehni
b987590c71 Define documentation for excludeMatrix parameter. 2015-12-30 21:55:18 +01:00
Jürg Lehni
83b53cb9e0 Fix a few edge cases in cloning and copying of attributes. 2015-12-30 21:55:17 +01:00
Jürg Lehni
2fea40f86f Introduce new Item#copyAttributes() & #copyContent(), and revamp #clone() handling. 2015-12-30 21:55:17 +01:00
Jürg Lehni
463f50a0c1 Adjust comment by @iconexperience.
As outlined here: https://github.com/paperjs/paper.js/issues/854#issuecomment-167334294
2015-12-30 21:55:17 +01:00
Jürg Lehni
386632b0be Implement new version of #reorient() and merge with #resolveCrossings()
As proposed by @iconexperience in #854
2015-12-30 21:55:17 +01:00
Jürg Lehni
48c0988546 Implement support for SVG fill-rule attribute.
Relates to #858
2015-12-30 21:55:17 +01:00
Jürg Lehni
a5f05c90f5 Rename #windingRule to #fillRule.
...keeping deprecated aliases on Style and Item around for now.

Closes #858
2015-12-30 21:55:17 +01:00
Jürg Lehni
086485dc95 Minor code clean-up. 2015-12-30 21:55:17 +01:00
Jürg Lehni
401877c6dc Fix the correct bubbling of doubleclick events.
Fixes #834.
2015-12-30 21:55:17 +01:00
Jürg Lehni
e3a27da7b2 Fix alt key combos on Chrome.
Relates to #860
2015-12-30 21:55:17 +01:00
Jürg Lehni
0badb3b3f4 A bunch of code clean-ups. 2015-12-30 21:55:16 +01:00
Jürg Lehni
248364aebc Fix @param description. 2015-12-30 21:55:16 +01:00
Jürg Lehni
4ee3a76a74 Improve handling of special characters and control sequences. 2015-12-30 21:55:16 +01:00
Jürg Lehni
0346552bc6 Minor simplification. 2015-12-30 21:55:16 +01:00
Jürg Lehni
52edd72efb Refactor Key handling
- Rely on event.key / event.keyIdnetifier instead of event.keyCode
- Handle command key better on Chrome across all platforms (fixes #860)
- Improve documentation
2015-12-30 21:55:16 +01:00
iconexperience
b19bc5aaf4 Smaller improvements in addCurveIntersections() 2015-12-30 21:55:16 +01:00
sapics
81a4d142f0 Fix shape.strokeBounds with strokeScaling is false 2015-12-30 21:52:34 +01:00
iconexperience
0e3ac9d7f4 Handle cases when point y is equal to y of horizontal curve in path 2015-12-30 21:52:34 +01:00
sapics
9c1c00c11e Minor minification 2015-12-30 21:52:34 +01:00
sapics
0050984d83 Remove unnecessary calculation 2015-12-30 21:52:34 +01:00
iconexperience
c0a5739254 Change addCurveIntersections() to handle cases when tDiff == 0 2015-12-19 10:48:31 +01:00
Jürg Lehni
1e72447a7d Minor comment change. 2015-11-12 10:12:46 +01:00
Jürg Lehni
8149fa830b Only rasterize an item's content if the resulting raster is not empty.
closes #828
2015-11-12 10:11:31 +01:00
Jürg Lehni
deafacdad0 Treat overlaps as crossings as well.
This solves https://github.com/paperjs/paper.js/issues/784#issuecomment-153085486 , simplifies code quite a bit, and does not cause any new issues.
2015-11-04 01:19:20 +01:00
Jürg Lehni
f32a1def6e Only complain about open paths in boolean ops when they are long enough. 2015-11-02 18:21:19 +01:00
Jürg Lehni
9a772678a8 Clean up #816 a bit.
Closes #815 also.
2015-10-28 22:17:44 +01:00
Tomas Junnonen
09d4de6a1b Issue 815: Cannot add segment to Path after removing last segment
Fixed an issue where after removing the last segment of a path,
new segments cannot be re-added.

Added new Path Curve test cases to test the difference between
a path with one and no segments (zero curves in both cases), which
catches the bug.
2015-10-28 12:15:07 -04:00
Jürg Lehni
6c0faaf010 Use Base.pick() instead of null check. 2015-10-27 23:43:14 +01:00
Jürg Lehni
60c64ab25c Merge pull request #814 from johan/precision-0
Handle exportSVG({ precision: 0 }) correctly
2015-10-27 23:41:55 +01:00
Jürg Lehni
8eb0dcc87d Fix various JS linting problems. 2015-10-27 23:35:30 +01:00
Johan Sundström
1b129feebf Handle exportSVG({ precision: 0 }) correctly 2015-10-27 15:33:09 -07:00
Jürg Lehni
ac7c272401 Clean up link references about kappa. 2015-10-26 21:43:38 +01:00
Jürg Lehni
a1e4b9fa3c Release version v0.9.25 2015-10-25 11:24:42 +01:00
Jürg Lehni
238801e485 Improve docs for boolean operations. 2015-10-25 09:41:43 +01:00
Jürg Lehni
e9d54a05f0 Minor change in the way #reorient() is called. 2015-10-24 23:13:13 +02:00
Jürg Lehni
c61cb804cb Implement boolean operations intersect() and subtract() for open path with closed paths.
Closes #757
2015-10-24 22:41:51 +02:00
Jürg Lehni
648985fcd2 Fix yet another issue with Path#curves and Path#_add()
Including a unit test to prevent regression.
2015-10-24 18:11:30 +02:00
Jürg Lehni
19e3136892 Address small issue in Path#getLocationAt() when paths are empty. 2015-10-24 17:46:20 +02:00
Jürg Lehni
fcd4fe824c Pass Item.NO_INSERT to internally created paths and do not rely on insertAbove() to always return a result.
If `this` itself is not in the DOM, insertAbove() will fail.
2015-10-24 17:45:22 +02:00
Jürg Lehni
1fc17766fb Address remaining issue with curves being wrongly linked up after adding new segments. 2015-10-24 17:43:22 +02:00
Jürg Lehni
ae2bed9cf0 Fix issue of faulty curves list after inserting segments at the end of open paths. 2015-10-24 17:00:37 +02:00
Jürg Lehni
39731808b8 Switch from imprecise trigonometric method to Curve.getParameterOf()
And from !hasHandles() to isStraight(), as we can now handle all straight curves.
2015-10-24 12:23:25 +02:00
Jürg Lehni
780b999220 Fix typo. 2015-10-24 11:55:59 +02:00
Jürg Lehni
b9a0f5f659 Further simplify code. 2015-10-24 11:29:15 +02:00
Jürg Lehni
4678697638 Some refactoring and added comments to @sapics code in Curve.getNearestParameter() 2015-10-24 11:14:08 +02:00
sapics
89a45a6682 Use cubic equation solution for faster calculation 2015-10-24 14:54:57 +09:00
sapics
294904eac7 Faster curve.getNearestParameter when curve has no handles 2015-10-24 11:39:50 +09:00
Jürg Lehni
c8cc653004 Merge Path#_getOffset() with CurveLocation#getOffset() 2015-10-23 19:57:25 +02:00
sapics
502558a321 Fix variable leaks 2015-10-23 09:45:39 +09:00
Jürg Lehni
5be9e1dde5 Remove unused variable. 2015-10-22 15:30:29 +02:00
Jürg Lehni
813ea48932 Remove unused local reference. 2015-10-22 14:46:17 +02:00
Jürg Lehni
85f7134fe6 Reduce curve-time epsilon, and improve comments about other epsilon values. 2015-10-22 10:34:49 +02:00
Jürg Lehni
bafb6794a6 Introduce separate epsilon for fat-line clipping code, and reduce curve-time epsilon. 2015-10-21 23:44:24 +02:00
Jürg Lehni
e9c3e72f60 Simplify handling of winding overlap-adjustment in isValid() 2015-10-21 15:02:53 +02:00
Jürg Lehni
a79212b920 Make handling of points on infinite lines in Line.getSide() more clear. 2015-10-21 10:00:11 +02:00
Jürg Lehni
a9710cf7c0 Fix Line.getSide() call. 2015-10-21 09:35:55 +02:00
Jürg Lehni
0cb792de93 Reverse sign of Line.getSignedDistance()
Closes #789
2015-10-21 09:35:40 +02:00
Jürg Lehni
7c37a4a4d2 Revert "No need for special length handling in propagateWinding()"
This reverts commit 8c702ce5b4.
2015-10-21 09:35:17 +02:00
Jürg Lehni
f8595e93c6 Improve some comments. 2015-10-21 02:45:57 +02:00
Jürg Lehni
169f18617c Address more pending TODOs. 2015-10-21 02:40:12 +02:00
Jürg Lehni
7a95625a13 Remove debug code and TODO from CurveLocation#isCrossing() 2015-10-21 02:36:43 +02:00
Jürg Lehni
8c702ce5b4 No need for special length handling in propagateWinding() 2015-10-21 02:32:56 +02:00
Jürg Lehni
3daa7f78b4 Some comment clean-ups. 2015-10-21 02:24:54 +02:00
Jürg Lehni
341fe1ab4e Remove all boolean debugging and streamline code. 2015-10-21 02:16:17 +02:00
Jürg Lehni
2cf637d13b Merge remote-tracking branch 'origin/boolean-fix' into develop 2015-10-21 01:44:15 +02:00
Jürg Lehni
43cf20096a Implement Curve.getNearestParameter() 2015-10-21 01:43:14 +02:00
Jürg Lehni
8c3d9df06c Further fine-tune the various EPSILON values based on edge-case tests. 2015-10-21 01:42:26 +02:00
Jürg Lehni
5d6b761d3a Introduce separate WINDING_EPSILON and improve GEOMETRIC_EPSILON.
New values are based on a lot of testing.
2015-10-21 01:16:52 +02:00
Jürg Lehni
eb62530958 Improve CurveLocation#equals(). 2015-10-21 01:15:46 +02:00
Jürg Lehni
1f476c2107 Improve CurveLocation#isTouching() to better handle straight lines. 2015-10-21 01:10:24 +02:00
Jürg Lehni
1073340eeb Do not use GEOMETRIC_EPSILON in Curve.getParameterAt()
This caused issues in some rare edge-cases.
2015-10-21 01:09:03 +02:00
Jürg Lehni
d543658c43 Remove old version of Curve#getParameterOf() 2015-10-21 00:17:05 +02:00
Jürg Lehni
140fba56cc Fix Line#isCollinear() and #isOrthogonal() 2015-10-20 23:37:37 +02:00