Commit graph

1055 commits

Author SHA1 Message Date
Jürg Lehni
7233c82084 Fix wrong call of _clearBoundsCache() on child.
Closes #426.
2014-03-20 17:20:26 +01:00
Jürg Lehni
aeeba4d58d Implement ChangeFlag.INSERTION notification to know when an item was inserted in a new parent inside the DOM. 2014-03-18 15:28:29 +01:00
Jürg Lehni
946e0d5b2c Fix spelling mistakes. 2014-03-18 15:25:25 +01:00
Jürg Lehni
e998083156 Rename Shape#shape to Shape#type. 2014-03-18 12:47:54 +01:00
Jürg Lehni
09d90a21bc Support legacy #type filtering again in #getItems(), and offer an alternative through instanceof checks with #class and #constructor property. 2014-03-18 12:39:55 +01:00
Jürg Lehni
62f7b0d73e Simplify and merge Item#getItems() code with Project#getItems() 2014-03-18 11:47:50 +01:00
Jürg Lehni
833d71f7ea Remove Item#type and replace it with Item#className, the non-hyphenated version of #type. 2014-03-18 11:42:38 +01:00
Jürg Lehni
f115072e8c Rename HIERARCHY change-flag to more precise CHILDREN. 2014-03-17 18:59:10 +01:00
Jürg Lehni
0aa73d90c5 Change the way context dependent font sizes are handled by delegating handling to view.
Closes #425
2014-03-17 16:41:57 +01:00
Jürg Lehni
438de7013a Correctly handle groups as clipping masks.
Closes #370.
2014-03-17 14:51:47 +01:00
Jürg Lehni
0fe52a7d39 Implement an optimization in _changed() notifications where not all curves need to updated if only segments change that already have told their curves about the change. 2014-03-17 14:35:33 +01:00
Jürg Lehni
d594b4264d Define settings.applyMatrix and inherit at Item creation time. 2014-03-04 09:30:04 +01:00
Jürg Lehni
7dbf6ceaff Move Project#options to PaperScope#settings and define reasonable defaults. 2014-03-04 09:29:28 +01:00
Jürg Lehni
36e3cbddf2 Remove inheritance of Item#applyMatrix setting again.
Implementation cannot be solved well, since hierarchy is not known at creation time of item.
2014-03-02 21:00:08 +01:00
Jürg Lehni
80a725d08a Rename Item#transformContent to the more correct Item#applyMatrix 2014-03-02 16:04:17 +01:00
Jürg Lehni
fb1420eee0 Internalize Item#applyMatrix() code in #transform() and add short-cut method to it in Matrix#apply() 2014-03-02 15:50:45 +01:00
Jürg Lehni
6fdb9f60bd Merge branch 'refs/heads/master' into apply-matrix 2014-03-02 01:27:50 +01:00
Jürg Lehni
7bf9cc88e4 Merge pull request #387 from mgrabovsky/master
Fix typo in comment
2014-03-02 01:05:21 +01:00
Jürg Lehni
4ba17127aa Make sure that #transformContent can only be set to true on items that actually support it. 2014-03-01 23:24:33 +01:00
Jürg Lehni
1a836a168f Merge branch 'refs/heads/master' into apply-matrix
Conflicts:
	src/item/Item.js
2014-03-01 22:55:54 +01:00
Jürg Lehni
a8578326ea Inherit #transformContent setting from parent, if not explicitely defined. 2014-03-01 22:52:00 +01:00
Jürg Lehni
dad7821ee9 Include Item#transformContent in serialization and cloning. 2014-03-01 22:51:01 +01:00
Jürg Lehni
7cf4591a1e Define Item#style before calling #addChild() in #initialize(), to avoid issues with layers. 2014-03-01 22:49:46 +01:00
Jürg Lehni
a3114e5c28 Do not preserve matrix transformations in empty groups when applied to inexisting content. 2014-03-01 22:48:44 +01:00
Jürg Lehni
c1ccdf6cb7 Take into account the view's resolution in Item#rasterize() 2014-02-26 16:20:19 +01:00
Jürg Lehni
ec0877962b Expose the view's pixel-ratio and resolution through View#pixelRatio and View#resolution 2014-02-26 16:19:48 +01:00
Jürg Lehni
ccfd51a65a Improve performance of Path constructors and handling of { insert: false } Item creation. 2014-02-26 16:15:51 +01:00
Jürg Lehni
737466d15c Fix all faulty {@true} doc statements. 2014-02-26 15:39:00 +01:00
Jürg Lehni
bf50bd649a Fix issue in Item#rasterize() when resolution is not 72 DPI.
Closes #412.
2014-02-26 11:54:14 +01:00
Jürg Lehni
86e4d2a6b9 Implement Curve#remove() and Path#reduce().
Also have Item#reduce() recursively call #reduce() on reduced children.
2014-02-20 02:50:39 +01:00
Jürg Lehni
74a153dd88 Some code clean-up.
More to come.
2014-02-17 20:59:38 +01:00
Jürg Lehni
568bb06853 Add comments about missing #importSVG() documentation. 2014-02-12 09:39:34 +01:00
Matěj Grabovský
890eda9197 Fix typo in comment 2014-01-15 18:04:51 +01:00
Jürg Lehni
5a131930fb Add _dontNotify parameter to Matrix#reset() and use it in Item#applyMatrix() 2014-01-06 00:18:40 +01:00
Jürg Lehni
6ad2105110 Replace delete in favor of setting to undefined to prevent V8 deoptimization. 2014-01-05 19:16:48 +01:00
Jürg Lehni
706fe2c77d Rearrange Base.read argument sequence.
options are used more often than length.
2014-01-05 18:31:24 +01:00
Jürg Lehni
b66c41e1c9 Remove need for arguments[1] in Item#transform() 2014-01-05 18:05:47 +01:00
Jürg Lehni
8d08d3c014 Remove the need for arguments[0] in bounds getters. 2014-01-05 18:01:38 +01:00
Jürg Lehni
e3f3a9c9d2 Merge branch 'refs/heads/master' into v8-optimizations 2014-01-05 17:42:59 +01:00
Jürg Lehni
1ee5b2c126 Fix references to Bootstrap.js in comments. 2014-01-05 17:41:38 +01:00
Jürg Lehni
6cb25fafe3 Use changes in latest Straps.js to remove as many hidden parameters as possible.
Hidden parameters through arguments[] are bad news for JS optimizer engines.
2014-01-05 17:40:54 +01:00
Jürg Lehni
ea63d4c288 Merge branch 'refs/heads/master' into v8-optimizations
Conflicts:
	src/core/Base.js
	src/style/Color.js
2014-01-05 05:01:13 +01:00
Jürg Lehni
e22fa3a664 Update copyright notice. 2014-01-04 01:47:16 +01:00
Jürg Lehni
ad34bbf7aa Bail out of Item#transform() immediately if there is nothing to do. 2014-01-02 21:47:00 +01:00
Jürg Lehni
c197f531a4 Implement options.asString for Item#exportJSON() 2013-12-30 23:34:19 +01:00
Jürg Lehni
81651a7379 Prevent V8 "assignment to parameter in arguments object" deoptimizations.
Some getter-like functions still need fixing, but this might require a fix in Straps.js first.
2013-12-17 23:28:55 +01:00
Jürg Lehni
3dbad9c477 Replace delete in favor of setting to undefined to prevent V8 deoptimization. 2013-12-17 23:27:48 +01:00
Jürg Lehni
e2b06b8e54 Filter out insert property in Item#set() 2013-12-16 22:03:33 +01:00
Jürg Lehni
a51f8d4ee8 Rename Item#anchor -> Item#pivot 2013-12-13 20:50:58 +01:00
Jürg Lehni
25d8b1f0d2 Clean up code and comments in various places. 2013-12-11 17:10:09 +01:00
Jürg Lehni
3ff4a6d801 Use Point.read() for center parameter in Item#rotate 2013-12-11 17:09:03 +01:00
Jürg Lehni
da427e969b Make hit-tests work again with projects that don't have a view.
Fixes broken tests.
2013-12-11 17:08:36 +01:00
Jürg Lehni
97f7204eab Write documentation for Item#anchor. 2013-12-11 16:23:30 +01:00
Jürg Lehni
42788a5bf7 Keep support for Item#registration for now as well, since there are some scripts on the mailing list that use it. 2013-12-11 15:08:56 +01:00
Jürg Lehni
78a2685324 Rename Item#registration to Item#anchor 2013-12-11 14:59:51 +01:00
Jürg Lehni
e2b48ebf33 Allow layers to select children again, since it breaks examples otherwise. 2013-12-10 23:55:41 +01:00
Jürg Lehni
9501fd1924 Make hit-test tolerance dependent of view#matrix 2013-12-10 22:53:03 +01:00
Jürg Lehni
9177bac125 Use same stroke tolerance approach for hit-testing joins and caps as well. 2013-12-10 14:23:05 +01:00
Jürg Lehni
7c28c7e9e3 Do not factor in view matrix into Item#globalMatrix.
Instead concatenate it when drawing selections.
2013-12-10 13:18:21 +01:00
Jürg Lehni
48c8946f9e Implement correct hit-testing tolerance using transformed 2D stroke padding rather than unscaled numerical tolerance.
But we still need to factor in the View zoom as well...
2013-12-10 12:52:42 +01:00
Jürg Lehni
3d868ae400 Fix issue with cached internal bounds and #transformContent == true. 2013-12-10 12:51:49 +01:00
Jürg Lehni
48b7b740ad Allow the creation of internally used items with no ids. 2013-12-10 11:07:14 +01:00
Jürg Lehni
642111a7a2 Fix error in #getGlobalMatrix() 2013-12-09 19:33:50 +01:00
Jürg Lehni
b7943239eb Implement cached getInternalRoughBounds as well. 2013-12-09 19:33:34 +01:00
Jürg Lehni
7278ee4374 Make JSON serialization work for Shapes. 2013-12-09 17:27:41 +01:00
Jürg Lehni
94d5a09b7b Do not inherit selection behavior from Group in Layer. 2013-12-09 15:10:09 +01:00
Jürg Lehni
e238d23194 Implement caching of internal, untransformed bounds. 2013-12-09 10:53:19 +01:00
Jürg Lehni
81fe98d1bb Make cachedBounds mechanism work for Symbols. 2013-12-09 09:05:29 +01:00
Jürg Lehni
f8f60ec603 Fix slow-down in bounds caching. 2013-12-09 08:58:37 +01:00
Jürg Lehni
2cd3de8188 Improve versioning of _globalMatrix 2013-12-09 07:51:28 +01:00
Jürg Lehni
064d632d65 More matrix related clean-ups. 2013-12-08 22:12:36 +01:00
Jürg Lehni
238f577e6f Clean up _getCachedBounds() code. 2013-12-08 22:06:32 +01:00
Jürg Lehni
516b9d040f Apply matrices before calculating boolean path operations. 2013-12-08 21:39:56 +01:00
Jürg Lehni
24ce35cc6e Make sure items removed from DOM remove all their events and reinstall them again when reinserted.
Closes #254.
2013-12-08 20:40:30 +01:00
Jürg Lehni
97fcd6ff38 Implement Item#getGlobalMatrix(), #globalToLocal() and #localToGlobal()
Closes #270.
2013-12-08 20:04:10 +01:00
Jürg Lehni
6e5d8939d5 Rename View#draw() -> View#update() and remove checkRedraw argument.
We always check for changes, since change propagation should work reliably.
2013-12-08 19:15:58 +01:00
Jürg Lehni
c75d48cf98 Fix comments. 2013-12-08 18:45:11 +01:00
Jürg Lehni
afe00add32 Implement option.type filtering in #hitTest() functions. 2013-12-08 16:32:42 +01:00
Jürg Lehni
61f2f5c978 Put constructors into separate ctor variables when handling dontLink parameters before creating objects.
This hopefully solves the mysterious issue #360 on Chrome.
2013-12-07 20:03:23 +01:00
Jürg Lehni
acc0e80d78 Implement registration point for all items.
Allowing any item to use another point than the center as its anchor point for item.position.
2013-12-07 19:46:12 +01:00
Jürg Lehni
2401b38b03 Fix issue with group.position not updating when content changes. 2013-12-07 19:17:59 +01:00
Jürg Lehni
758c9b6146 Improve caching of decomposed transformation values. 2013-12-07 12:47:16 +01:00
Jürg Lehni
9ca92165ee Expose rotation and scaling transformations through Item#rotation and Item#scaling properties, by moving the setters from Matrix to Item. 2013-12-07 12:16:11 +01:00
Jürg Lehni
3d94ff6968 Only decompose matrix if there are bounds to be reused. 2013-12-07 05:50:08 +01:00
Jürg Lehni
1ba77f9d40 Implement Item#skew() and clean up Item transformation functions documentation. 2013-12-07 05:21:27 +01:00
Jürg Lehni
2d307f0e7c Only preserve bounds if there is no shearing in the transformation.
Closes #358.
2013-12-07 05:19:49 +01:00
Jürg Lehni
7e9989c6b9 Improve comment about globalMatrix.isInvertible() check. 2013-12-06 13:41:57 +01:00
Jürg Lehni
92590b160c Implement Canvas Path caching again using Context#currentPath. 2013-12-06 12:49:46 +01:00
Jürg Lehni
550749d057 Avoid issues with _matrix being undefined when items are created and added in a certain sequence.
Closes #279.
2013-12-03 23:14:34 +01:00
Jürg Lehni
fc02c58ddb Implement asynchronously loading Rasters from disk and remote locations for Node.js
Closes #328.
2013-12-03 23:07:54 +01:00
Jürg Lehni
dcad9d44ed Copy over parent style in Item#reduce().
Only really needed for CompoundPath...
2013-11-30 14:02:54 +01:00
Jürg Lehni
93d10983ee Update to latest Prepro.js and switch from global options object to __options, to avoid name clashes. 2013-11-29 20:26:38 +01:00
Jürg Lehni
1149399690 Add missing DOCS comments. 2013-11-29 18:50:04 +01:00
Jürg Lehni
7e65426158 Implement Item#data cloning.
Closes #340.
2013-11-28 22:27:14 +01:00
Jürg Lehni
593e0d8d7f Remove Base.merge() and use a new Straps.js feature instead.
A more clever Base() constructor that allows merging.
2013-11-28 22:20:00 +01:00
Jürg Lehni
c0e8285c07 Fix setting #radius on Shape.Circle. 2013-11-28 18:03:41 +01:00
Jürg Lehni
18db7c0d56 Fix issue with items with frame events never being removed from _frameItems list. 2013-11-27 12:38:56 +01:00
Jürg Lehni
97d94e8401 Allow Path#transformContent to be set to false too. 2013-11-26 23:12:55 +01:00
Jürg Lehni
b96f9ff57b Rearrange method sequence in Item. 2013-11-26 19:27:09 +01:00
Jürg Lehni
56f25e8742 Implement change propagation in matrices. 2013-11-26 19:03:58 +01:00
Jürg Lehni
da9e1f8de7 Define Project#isEmpty() 2013-11-24 22:53:41 +01:00
Jürg Lehni
af4410953f Various clean-ups regarding the handling of activeLayer, JSON deserialization, DOM insertion and and layer reusing.
JSON deserialization does no longer insert items into DOM twice now, and should therefore be faster.
2013-11-24 16:25:13 +01:00
Jürg Lehni
5439f6ba45 We need to take pixel ratio into account when directly blitting blend-modes onto canvas. 2013-11-06 13:11:54 +01:00
Jürg Lehni
d6be004ee6 Setting a matrix on an item with #transformContent = true should immediately apply it. 2013-11-04 11:43:17 +01:00
Jürg Lehni
b8ab0f36f9 Remove unused local variable and comment. 2013-11-02 20:37:23 +01:00
Jürg Lehni
132f54d362 Define Item#clear() as an alias for Item#removeChildren(), or Path#removeSegments() for paths. 2013-11-01 17:52:27 +01:00
Jürg Lehni
c76dae5b06 Implement a new strategy for importing JSON, where it is imported into the item itself, not its children list, if the class match. 2013-11-01 11:26:11 +01:00
Jürg Lehni
2a9fe48cc9 Add options.matchShapes support to #exportSVG and improve documentation of various import / export functions. 2013-10-30 16:18:59 +01:00
Jürg Lehni
5d7c7a2409 Improve documentation of #hitTest() 2013-10-30 16:18:15 +01:00
Jürg Lehni
2a88042315 Handle importing of SVG gradients for shapes, and drawing of canvas gradients correctly.
Closes #312.
2013-10-30 01:25:13 +01:00
Jürg Lehni
eecf68b7c3 Clear ctx.shadowColor after ctx.fill() to avoid application to both fill and stroke.
Closes #314.
2013-10-30 00:00:04 +01:00
Jürg Lehni
1871e2f7c4 Improve comments. 2013-10-29 21:18:09 +01:00
Jürg Lehni
fd96447ac1 Share ellipse reading code between Shape.Ellipse and Path.Ellipse. 2013-10-29 21:15:28 +01:00
Jürg Lehni
aca9968164 Simplify Shape#_contains() code. 2013-10-29 21:09:11 +01:00
Jürg Lehni
4333334014 Simplify Shape#hitTest() code. 2013-10-29 21:06:58 +01:00
Jürg Lehni
6fba727600 Add DOCS comments. 2013-10-29 21:00:24 +01:00
Jürg Lehni
f8d960d834 option.tolerance should always be defined in _hitTest() 2013-10-29 21:00:17 +01:00
Jürg Lehni
ae4ddaeae5 Implement correct hit-tests for rounded rectangle Shape items. 2013-10-29 20:58:30 +01:00
Jürg Lehni
c43752dc3e Use #hasFill() and #hasStroke() more broadly and avoid drawing strokes when strokeWidth is set to 0. 2013-10-29 20:05:39 +01:00
Jürg Lehni
94623f6d3f Keep radius and size in sync in Path.Rectangle. 2013-10-29 19:42:33 +01:00
Jürg Lehni
b86b66d43d Improve documentation. 2013-10-29 19:25:10 +01:00
Jürg Lehni
7f8d9d9e90 Support options.tolerance in Shape#hitTest() 2013-10-29 19:17:42 +01:00
Jürg Lehni
9d60662a28 Check for the occurrence of 'radius' rather than 'center' when deciding to read a center / radius pair for ellipses. 2013-10-29 18:53:55 +01:00
Jürg Lehni
c3aed5277d Use center and radius in all ellipse code, rather than bounding rect.
Simplifies things.
2013-10-29 18:10:30 +01:00
Jürg Lehni
04286bc1e0 Fix issue with param.trackTransforms
We can only pop() if we push()
2013-10-29 17:56:43 +01:00
Jürg Lehni
b2188be567 Make sure _globalMatrix is not set to false values in Item#rasterize(). 2013-10-29 17:37:45 +01:00
Jürg Lehni
d649b1bb21 Define insert argument for Path#toShape() and Shape#toPath() 2013-10-29 16:45:50 +01:00
Jürg Lehni
5a462f42b7 Improve some comments / docs. 2013-10-29 09:42:59 +01:00
Jürg Lehni
c579433b3d Fix bug in Raster.onLoad()
It was executing in wrong scope on websites with multiple scopes.
2013-10-29 09:42:58 +01:00
Jürg Lehni
160fe25cd1 Improve documentation of #importSVG() methods. 2013-10-29 09:42:58 +01:00
Jürg Lehni
b4651a18c6 Implement #getItem() on Project and Item, similar to #getItems() but returning only the first match. 2013-10-19 13:02:53 +02:00
Jürg Lehni
1a645a1adb Implement function callbacks for item matching. 2013-10-19 12:38:36 +02:00
Jürg Lehni
4fb6a5d949 Implement #getItems(match) on Project and Item as a simple and efficient query interface. 2013-10-19 12:27:13 +02:00
Jürg Lehni
0b7e128426 Only rely on _drawCount for drawing related things, and caching where it allows.
Project#selectedItems was out of sync until the next draw loop.
2013-10-18 21:52:22 +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
5d0fd8f970 Implement Style#windingRule and use it in Path#contains(). 2013-10-18 14:54:13 +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
c2a34d9f1f Implement an easier approach in serialization to handle the default value of leading. 2013-10-17 11:53:34 +02:00
Jürg Lehni
1eb6b49e8a Allow serialization values to mark themselves as _default.
Solves unnecessarily serialized leading values.
2013-10-17 11:47:46 +02:00
Jürg Lehni
9956a6ff51 Implement Shape#toPath(), analogue to Path#toShape().
This way is much simpler though.
2013-10-16 23:44: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
be5a73a61d SVG: Implement support for Shape. 2013-10-16 16:47:00 +02:00
Jürg Lehni
8ab6c61b0d Rename Shape#type to Shape#shape, to avoid clash with Item#type. 2013-10-16 16:46:22 +02:00
Jürg Lehni
b581c84d8b Move CompoundPath#reduce() to Item#reduce(). 2013-10-16 16:10:28 +02:00
Jürg Lehni
9eb1c104da Implement Shape#clone() 2013-10-16 15:04:50 +02:00
Jürg Lehni
b35296ef3e Improve Shape.Ellipse to support center & radius parameters, and update documentation. 2013-10-16 15:04:37 +02:00
Jürg Lehni
c945bf7908 Docs: Various smaller clean ups. 2013-10-16 14:20:13 +02:00
Jürg Lehni
2263afea59 Start implementing rounded rectangles in Shape.Rectangle. 2013-10-14 19:57:28 +02:00
Jürg Lehni
a3d0e0d462 Clean up throw statements.
Never throw plain strings.
2013-10-14 16:05:50 +02:00