Skip to content

Changelog v1

Fabric.js release highlights (v1)

Version 1.7.22 & 1.7.23

Fabric 1.x is in manteinence mode. Just bugfixes backported from ongoing 2.x

  • BACKPORT gradient parsing float
  • REVERT this.ctx fix from textbox
  • BACKPORT Fix for typeError on removing textbox from mousedown

Version 1.7.21

Fabric 1.x is in manteinence mode. Just bugfixes backported from ongoing 2.x

  • BACKPORT cache fuzzyness fix part 2
  • BACKPORT freedrawing fix part 2
  • BACKPORT toDataURL backstoreOnly resize
  • BACKPORT Removal of unnecessary context creation on text init

Version 1.7.20

Fabric 1.x is in manteinence mode. Just bugfixes backported from ongoing 2.x

Group from object and subTargetCheck
cache canvas deletion
cache fuzzyness
free drawing and direction of start/end points
noScaleCache from stop refreshing cache of not transforming objects

Version 1.7.19

Fabric 1.x is in manteinence mode. Just bugfixes no features or improvements.

Fixed drawing path displacement #4318
Fixed the flip of images with scale equally #4313
Fixed touch touch detection #4302

Version 1.7.18

Fixed doubling of subtargets for preserveObjectStacking = true #4297
Added a dirty set to objects in group destroy.

Version 1.7.17

Small bugix release, mostly selection and text bugfixes reported by users

Change: swapped style white-space:nowrap with attribute wrap="off" since the style rule was creating
problems in browsers like ie11 and safari. #4119
Fix: Remove an object from activeGroup if removed from canvas #4120
Fix: avoid bringFroward, sendBackwards to swap objects in active selections #4119
Fix: avoid disposing canvas on mouse event to throw error #4119
Fix: make svg respect white spaces #4119
Fix: avoid exporting bgImage and overlayImage if excludeFromExport = true #4119
Fix: Avoid group fromObject mutating original data #4111

Version 1.7.16

Small bugix release.

Improvement: Add information to onChange and onComplete animation function #4068
Improvement: avoid multiplying identity matrices in calcTransformMatrix function
Fix: ativeGroup did not destroy correctly if a toObject was happening
Improvement: Pass the event to object:modified when available. #4061

Version 1.7.15

Quick bug fix release and and 2 improvements. Shadow with no offset can be cached, and this is a speed boost if you are using shadow to do halos.
Added a note in text docs that allow devs to ovveride some custom key behaviour

Improvement: Made iText keymap public. #4053
Improvement: Fix a bug in updateCacheCanvas that was returning always true #4051

Version 1.7.14

Cache improvement release! Two new features are now in the cache system. The cache will not grow over certain sizes when scaling objects, and also the _cacheCanvas will be resized in advance by a 10% margin so that we do not have to resize each mousemove event.
Check here for more details
The staefull check has been speed up a bit taking inspiration from fast-deep-equal package on npm.
Some bug relative to deep state check and group that where invalidating the cache for weird reason have been hopefully solved.

Improvement: Avoid cache canvas to resize each mouse move step. #4037 Improvement: Make cache canvas limited in size. #4035 Fix: Make groups and statefull cache work. #4032 Add: Marked the hiddentextarea from itext so that custom projects can recognize it. #4022

Version 1.7.13

Small bugfix release

Fix: Try to minimize delay in loadFroJson #4007 Fix: allow fabric.Color to parse rgba(x,y,z,.a) without leading 0 #4006 Allow path to execute Object.initialize, make extensions easier #4005 Fix: properly set options from path fromDatalessObjects #3995 Check for slice before action.slice. Avoid conflicts with heavy customized code. #3992

Version 1.7.12

Bug fixes and some new properties added to mouse events.

Fix: removed possible memleaks from window resize event. #3984
Fix: restored default cursor to noTarget only. unselectable objects get the standard hovercursor. #3953
Cache fixes: fix uncached pathGroup, removed cache creation at initialize time #3982
Improvement: nextTarget to mouseOut and prevTarget to mouseOver #3900
Improvement: add isClick boolean to left mouse up #3898
Fix: can start selection on top of non selectable object #3892
Improvement: better management of right/middle click #3888
Fix: subTargetCheck on activeObject/activeGroup was firing too many events #3909
Fix: After addWithUpdate or removeWithUpdate object coords must be updated. #3911

Version 1.7.11

Hotifx for broken PathGroups (SVGs)

Version 1.7.10

Many fixes to be a minor release:
Fixes to SVG export for polygons and for radial gradients in general. Introducing a caching logic for groups that allow to smart cache what has not shadow as children object. This should reduce caching visual errors by much and still allowing for cache optimization.
Introduced some manual checks on the value of Math.cos so that we can output a correct angle of 90 or 270 degrees for objects.

Fix: correct svg export for radial gradients #3807
Fix: Update fireout events to export the event object #3853
Fix: Improve callSuper to avoid infinite loops (not all of them) #3844
Fix: avoid selectionBackgroundColor leak on toDataUrl #3862
Fix: toDatelessObject for Group #3863
Improvement: better caching logic for groups #3864
Fix: correct svg gradient export for radial in polygons #3866
Fix: First draw could be empty for some objects #3870
Fix: Always send event data to object:selected #3871
Improvement: reduce angle calculation error #3872

Version 1.7.9

Small fixes for text related problems. If you are using text in your application, you should update.

Fix: Avoid textarea wrapping from chome v57+ #3804
Fix: double click needed to move cursor when enterEditing is called programatically #3804
Fix: Style regression when inputing new style objects #3804
Add: try to support crossOrigin for svg image tags #3804

Version 1.7.8 and 1.7.7

This is maybe the last release of the 1.x branch. New important and api breaking work is in progress and will be labeled as fabric 2.x
The change i like most comes from a casual contributor, by12 and fixes path bounding box calculation. No more trimmed paths!
A change in translation on the cache canvas fixed blurriness introduced since 1.7.3, that is also worth an update.
For iText, Textbox typers, the style object does not get polluted with useless empty objects now.
And last but not the least, we have a new flag called fabric.StaticCanvas.prototype.skipOffscreen default to false that will calculate with objects aCoords if the object is on the screen or outside the screen and will skip the rendering part completely. This is an optional feature but it turns out to be very usefull when you are dealing with large number of objects and you are using zoom or panning much.
While object.oCoords needs to be updated every zoom/pan, aCoords are static with object position and are still valid when we change the viewport. This allows us to detect if they are offscreen simply calculating the viewportCoords at the expense of 2 transformed points calculation. A demo page will follow soon.

Fix: Fix dirty flag propagation #3782
Fix: Path parsing error in bounding boxes of curves #3774
Add: Middle click mouse management on canvas #3764
Add: Add parameter to detect and skip offscreen drawing #3758
Fix: textarea loosing focus after a drag and exit from canvas #3759
Fix for opacity parsing in svg with nested opacities #3747
Fix text initialization and boundingrect #3745
Fix line bounding box #3742
Improvement: do not pollute style object while typing if not necessary #3743
fix for broken prototype chain when restoring a dataless object on fill an stroke #3735
fix for deselected event not fired on mouse actions #3716
fix for blurriness introduced on 1.7.3 #3721

Version 1.7.6 ( plus 1.7.5 and 1.7.4)

New functionalities about coordinates: Now setCoords updates both the corner coords for mouse interaction and a new set called aCoords that is a set of absolute coordinates that a dev can use for its own calculation on positions.
Introduced a set of coordinates on canvas that let you figure out where the current viewport start and finish. A new method for objects, called `isOnScreen` let;s you find out if at least a corner of an object is visible in the current viewport Fabric.Color class now can export colors in HEX + opacity format Notable fixes: We switched some touch event handling to accomodate latest chrome changes Removed gaps on continuos textbackgroundColor on Itext

Fix: make the cacheCanvas created on the fly if not available
Improvement: draw textbackgroundColor in one single pass when possible
Improvement: fire selection changed event just if text is editing
Improvement: Add object property 'needsItsOwnCache'
Improvement: Skip unnecessary transform if they can be detected with a single if
Fix: Moved all the touch event to passive false so that they behave as before chrome changes
Fix: force top and left in the object representation of a path to avoid reparsing on restore
Add: Enable deselected event for activeObject switch. Ensure deactivateAll call exitEditing
Fix: Perform subtargetCheck also if the group is an active object and on activeGroup
Fix: Made cursor operation more precise at high canvas zoom level
Add: Made getBoundingRect available to return both absolute or standard bounding rect
Add: Introduced calcViewportBoundaries() function for fabric.StaticCanvas
Add: Introduced isOnScreen() function for fabric.Object
Subclassed Polygon from polyline
Fix: Removed reference to hovered target when target gets removed
Fix: Removed hover cursor for non selectable objects
Fix: Switch to passive event for touch move
Fix: Restart rendering of cursor after entering some text
Add: fabric.Color support toHexa() method now

Version 1.7.3

Mixed release, cleaning and important bugfixes.
Objects fromObject methods have been reworked to be able to wait for Patterns full loading process before actually creating the object, so that the first render has the pattern ready to show. That was a longstanding bug since 2013.
Reworked some of the canvas background and overlay code so that gradient and patterns works and are saved and reloaded correctly.
During loadFromJSON process, if an image errors out, the process cotinue smooth, the reviver function is invoked with a third argument error equal to true.
Usuals objectCaching improvements: dirty flag propagation from childObjects to parents, added a couple of pixels around the cache canvas to avoid aliasing, added bigger padding for text with custom fonts.

Improvement: mousewheel event has target in the arguments as all the other events. object now fires mousewheel
Improvement: Pattern loads for canvas background and overlay, corrected svg pattern export.
Fix: Wait for pattern loading before calling callback.
Fix: add 2 extra pixels to cache canvases to avoid aliasing cut.
Fix: Rerender when deselect an itext editing object.
Fix: save new state of dimensionProperties at every cache clear.
Improvement: Better error managment in loadFromJSON.
Improvement: do not reload backgroundImage as an image if is different type.
Improvement: if a children element is set dirty, set the parent dirty as well.

Version 1.7.2

Again a maintenance release for iText custom fonts and cache and a workaround for macOS sierra problem with ‘object:modified’

Fix: Textbox do not use stylemap for line wrapping #3546
Fix: Fix for firing object:modfied in macOS sierra #3539
Fix: Itext with object caching was not refreshing selection correctly. #3538
Fix: stateful now works again with activeGroup and dinamyc swap between stateful false/true. #3537
Fix: includeDefaultValues was not applied to child objects of groups and path-groups. #3497
Fix: Itext style is cloned on paste action now, allow copie of styles to be independent. #3502
Fix: Add subclasses properties to cacheProperties. #3490
Add: Shift and Alt key used for transformations are now dinamic. #3479
Fix: fix to polygon and cache. Added cacheProperties for all classes #3490

Version 1.7.1

Just small bugfixes and support for custom properties in gradient and pattern toObject method.

Add: Gradients/Patterns support customAttributes in toObject method #3477
Fix: IText/Textbox not blurring keyboard on ios 10 #3476
Fix: Shadow on freedrawing and zoomed canvas #3475
Fix: Fix for group returning negative scales #3474
Fix: hotfix for textbox #3441 #3473

Version 1.7.0

Introducing object caching, please refer to the example page for more information caching

Add: Object Caching #3417
Improvement: group internal objects have coords not affected by canvas zoom #3420
Fix: itext cursor trails on initDimension #3436
Fix: null check on .setActive #3435
Fix: function error in clone deep. #3434

Version 1.6.7

A bugfix release with a new function, snap to angle during rotation.
How to activate it? Populate `snapAngle` and `snapTreshold` in the object properties

Add: Snap rotation added to objects. two parameter introduced, snapAngle and snapTreshold. \[#3383\]
Fix: Pass target to right click event. \[#3381\]
Fix: Correct rendering of bg color for styled text and correct clearing of itext area. \[#3388\]
Add: Fire mouse:over on the canvas when we enter the canvas from outside the element. \[#3389\]
Fix: Fix calculation of words width with spaces and justify. \[#3408\]
Fix: Do not export defaults properties for bg and overlay if requested. \[#3415\]

Version 1.6.6

A bugfix release with 2 new image filters, contrast and saturation

Add: Contrast and Saturate filters #3341
Fix: Correct registering and removal of events to handle iText objects.
Fix: Corrected 2 regression of 1.6.5 (dataurl export and itext clicks)
Fix: Corrected path boundaries calculation for Arcs ( a and A )

Version 1.6.5

A bugfix release with some small news:
New feature backgroundColor is now supported from all classes.
Clone and fromObject methods are now equal for all classes. You can use the callback for any cloning.
Right click mouse:down support. disabled by default can be enabled using the fireRightClick property and the canvas element context menu can be disabled enabling stopContextMenu on the fabric canvas.

The font-family quoting from 1.6.4 has been reverted because it made no possible to use multiple font family names. So if you are using a font family that has a name with spaces and numbers you have to wrap in in quotes by yourself.

Fix: charspacing, do not get subzero with charwidth.
Improvement: add callback support to all object cloning. #3212
Improvement: add backgroundColor to all classe #3248
Fix: add custom properties to backgroundImage and overlayImage #3250
Fix: Object intersection is calculated on boundingBox and boundingRect, intersection is fired if objects are overlapping #3252
Change: Restored previous selection behaviour, added key to selection active object under overlaid target #3254
Improvement: hasStateChanged let you find state changes of complex properties. #3262
Fix: IText/Textbox shift click selection backward. #3270
Revert: font family quoting was a bad idea. node-canvas stills use it. #3276
Fix: fire mouse:over event for activeObject and activeGroup when using findTarget shourtcuts #3285
Fix: clear method clear all properties of canvas #3305
Fix: text area position method takes in account canvas offset #3306
Improvement: Added event on right click and possibility to hide the context menu with a flag 3308
Fix: remove canvas reference from object when object gets removed from canvas #3307
Improvement: use native stroke dash if available #3309
Fix: Export correct src when exporting to svg #3310
Fix: Stop text to go on zero dimensions #3312
Fix: Error in dataURL with multiplier was outputting very big canvas with retina #3314
Fix: Error in style map was not respecting style if textbox started with space #3315

Version 1.6.4

In fabric 1.6.4 we added some new features and refinement to text objects:
New feature charspacing has been added, charspacing is expressed in thousands of em unit, meaning that with a value of 1000 and a fontsize of 40, you will have an additional space of 40px between chars.
Lineheight managment has been improved, now the lineheight does not have an extra padding below the line if there are no other lines of text.
Now that HiddenTextarea of iText object can follow the typing cursor better, it has been attached again to body of document and thanks to this IE browsers copy paste has been fixed.
selection:changed event firing has been reduced so that it fires just when necessary
Fonts with particular names, like ‘Slabo 27px’ or ‘Exo 2’ should be handled correctly now.

We have one new filter, a generic ColorMatrix filter from one of our contributors.

An old missing feature has been finally added, when restoring object from JSON, the apply filter function is executed before firing the callback, so that we can re render the canvas when everything is properly set up

Other small fixes to svg import and zoomed canvas. Finally shift click to select and unselect should work on every canvas zoom/pan.

New event: object:deselected is fired when an object loose its active state. Other than that, to the before:selection:cleared and selection:cleared the target is passed as an argument to the event fired.

This is the raw changelog:

Improvement: Ignore svg: namespace during svg import. #3081
Improvement: Better fix for lineHeight of iText/Text #3094
Improvement: Support for gradient with 'Infinity' coordinates #3082
Improvement: Generally "improved" logic of targeting #3111
Fix: Selection of active group with transparency and preserveObjectStacking true or false #3109
Fix: pattern brush now create the same pattern seen while drawing #3112
Fix: Allow css merge during svg import #3114
Improvement: added numeric origins handling fomr 0 to 1. #3121
Fix: Fix a defect with shadow of objects in a scaled group. #3134
Improvement: Do not fire unecessary selection:changed events. #3119
Fix: Attached hiddenTextarea to body fixes IE, thanks to @plainview. #3137
Fix: Shift unselect activegroup on transformed canvas. #3144
Added: ColorMatrix filter #3139
Fix: Fix condition in wich restoring from Object could cause object overwriting #3146
Change: cloneAsImage for Object and toDataUrl for object are not retina enabled by default. Added option to enable. #3147
Improvement: Added textSpacing support for text/itext/textbox #3097
Fix: Quote font family when setting the context fontstyle #3191
Fix: use getSrc during image export, make subclassing easier, return eventually the .src property if nothing else is available #3189
Fix: Inverted the meaning of border scale factor #3154
Improvement: Added support for RGBA in HEX notation. #3202
Improvement: Added object deselected event. #3195
Fix: loadFromJson callback now gets fired after filter are applied #3210

Version 1.6.3

Biggest new in 1.6.3 is support of sub-targets in group. Group has a new property subTargetCheck default to false that allows the findTarget functions to go deep in the group nested objects.
Events will fire for both the group and all the list of sub targets found in case of nested groups

Other changes inclued better handling of pan and zooming. Transparency checking is now aware of current viewportTransform and 3 new functions have been added to center objects in the current viewport instead of canvas: viewportCenterObject, viewportCenterObjectH, viewportCenterObjectV. Viewport fixes include cursor width in text editiong mode and the 1.6.2 newly itroduced selectionBackgroundColor

This is the raw changelog:

Improvement: Use reviver callback for background and overlay image when doing svg export. #2975
Improvement: Added object property excludeFromExport to avoid exporting the object to JSON or to SVG. #2976
Improvement: Correct the calculation of text boundingbox. Improves svg import #2992
Added: Export id property to SVG #2993
Improvement: Call the callback on loadSvgFromURL on failed xml load with null agument #2994
Improvement: Clear only the Itext area on contextTop during cursor animation #2996
Added: Char widths cache has been moved to fabric level and not iText level. Added fabric.util.clearFabricCharWidthsCache(fontName) #2995
Fix: do not set background or overlay image if the url load fails. #3003
Fix: iText mousemove event removal, clear the correct area for Itext, stopped redrawing selection if not necessary #3016
Fix: background image and overlay image scale and move with canvas viewportTransform, parameter available #3019
Added: support sub targeting in groups in events #2997
Fix: Select transparent object on mouse up because of \_maybeGroupObject #2997
Fix: Remove reference to lastRenderedObject on canvas.remove #3023
Fix: Wait for all objects to be loaded before deleting the properties and setting options. #3029
Fix: Object Padding is unaffected by object transform. #3057
Fix: Restore lastRenderedObject usage. Introduced Canvas.lastRenderedKey to retrieve the lastRendered object from down the stack #3057
Fix: \_calcTextareaPosition correctly calculate the position considering the viewportTransform. #3057
Fix: Fixed selectionBacgroundColor with viewport transform. #3057
Improvement: Correctly render the cursor with viewport scaling, improved the cursor centering. #3057
Fix: Use canvas zoom and pan when using is target transparent. #2980
Improvement: Added additional methods to center object on canvas. #3044

Version 1.6.2

With 1.6.2 we introduce some new customization options for controls and user interaction. It is now possible to customize the keys used for control interaction.
Before those where the predefined keys:

Alt Key: Switching from normal transform to centered transform during scaling objects. Shift Key: on br,bl,tr,lt was switching from proportional to free resize, on mt, ml, mr, bw was switching between resize and skew.

As of 1.6.2 is possible to use those configuration option to define which keys are used:

* values: altKey, shiftKey, ctrlKey, fabric.Object.uniScaleKey: key used to switch between proportional and not proportional scaling fabric.Object.altActionKey: key used to switch between different action on same corner (skew/scale) fabric.Object.centeredKey: key used to switch on/off the centered transform

hoverCursor now appears also on non selectable objects but moveCursor does not appear if the object can’t be moved. In addition moveCursor is now customizable with the property moveCursor.
The biggest change is the possibility of customizing the look of controls. Both border and controls can be filled and stroked and can also have a dash-array instead of a continue line. Corners can be both square or round.
To control those feature you can use those new properties:

borderDashArray: Dash stroke of borders cornerDashArray: Dash stroke of corners cornerStrokeColor: If corners are filled, this property controls the color of the stroke cornerStyle: standrd ‘rect’ or ‘circle’ selectionBackgroundColor: add an opaque or transparent layer to the selected object.

Small bugfixes includes: Itext firing object:modified on text change, possibility to restore custom canvas properties other than objects during canvas loadFromJSON, some SVG color output fix and some dataURL improvements.
This is the raw changelog:

Fix: restore canvas properties on loadFromJSON with includeProperties. #2921
Fix: Allow hoverCursor on non selectable objects, moveCursor does not appear if the object is not moveable. Added object.moveCursor to specify a cursor for moving per object. #2924
Fix: Add missing stroke.live translation, allow gradientTransform for dashed line. #2926
Improvement: Allow customization of keys that iteract with mouse action ( multiselect key, free tranform key, alternative action key, centered transform key ) #2925
Added: Make iText fires object:modified on text change on exit editing #2927
Added: \[control customization part 1\] cornerDashArray, borderDashArray. Now borderScaleFactor influences both border and controls, changed default corner size to 13 #2932
Fix: createSVGFontFacesMarkup was failing to retrieve fonts in style #2935
Fix: shadow not scaled with dataUrl to multiplier #2940
Added: \[control customization part 2\] cornerStrokeColor. Now is possible to specify separate stroke and fill color for the controls #2933
Fix: Itext width calculation with caching false was returning nan. #2943
Added: \[control customization part 3\] Rounded corners. It is possible to specify cornerStyle for the object. 'rect' or 'circle' #2942
Added: \[control customization part 4\] Selection background. It is possible to specify selectionBackgroundColor for the object. #2950
Fix: Behaviour of image with filters with resize effects and Object to/from json #2954
Fix: Svg export should not output color notation in rgba format #2955
Fix: minScaleLimit rounding bug #2964
Fix: Itext spacing in justify mode bug #2971
Fix: Object.toDataUrl export when some window.devicepixelRatio is present (retina or browser zoom) #2972