If you need real visual indentation (e.g. css) for itext, you can add a non-selectable Rect right after the itext. And adjust the position of the Rect based on all events for the itext, like moving, scaling, etc.
self.createITextWithPadding = function (event) { var itext = new fabric.IText('Done', { fontSize: 18, padding : tnbConstants.ITEXT.PADDING, fill: '#FFF', }); itext.left = (event.pageX - $("#tnb-panel").position().left)-itext.width/2; itext.top = (event.pageY-$("#tnb-panel").position().top)-itext.height/2; var bg = new fabric.Rect({ fill: '#32b775', left : itext.left - tnbConstants.ITEXT.PADDING, top :itext.top - tnbConstants.ITEXT.PADDING, rx: 5, ry: 5, width: itext.width + tnbConstants.ITEXT.PADDING*2, height:itext.height + tnbConstants.ITEXT.PADDING*2, selectable : false }); itext.bgRect = bg; itext.on("moving",self.adjustBackRect); itext.on("scaling",self.adjustBackRect); return itext; } self.adjustBackRect = function (e) {
Lin weishuo
source share