/** * @private * * Scroll position implementation */ Ext.define('Ext.util.translatable.ScrollPosition', { extend: 'Ext.util.translatable.Dom', wrapperWidth: 0, wrapperHeight: 0, config: { useWrapper: true }, getWrapper: function() { var wrapper = this.wrapper, element = this.getElement(), container; if (!wrapper) { container = element.getParent(); if (!container) { return null; } if (this.getUseWrapper()) { wrapper = element.wrap(); } else { wrapper = container; } element.addCls('x-translatable'); wrapper.addCls('x-translatable-container'); this.wrapper = wrapper; wrapper.on('resize', 'onWrapperResize', this); wrapper.on('painted', 'refresh', this); this.refresh(); } return wrapper; }, doTranslate: function(x, y) { var wrapper = this.getWrapper(), dom; if (wrapper) { dom = wrapper.dom; if (typeof x == 'number') { dom.scrollLeft = this.wrapperWidth - x; } if (typeof y == 'number') { dom.scrollTop = this.wrapperHeight - y; } } }, onWrapperResize: function(wrapper, info) { this.wrapperWidth = info.width; this.wrapperHeight = info.height; this.refresh(); }, destroy: function() { var element = this.getElement(), wrapper = this.wrapper; if (wrapper) { if (!element.isDestroyed) { if (this.getUseWrapper()) { wrapper.doReplaceWith(element); } element.removeCls('x-translatable'); } wrapper.removeCls('x-translatable-container'); wrapper.un('resize', 'onWrapperResize', this); wrapper.un('painted', 'refresh', this); delete this.wrapper; delete this._element; } this.callSuper(); } });