/** * @private */Ext.define('Ext.event.publisher.ElementPaint', { extend: 'Ext.event.publisher.Publisher', requires: [ 'Ext.util.PaintMonitor', 'Ext.TaskQueue' ], type: 'paint', handledEvents: ['painted'], constructor: function() { this.monitors = {}; this.subscribers = {}; this.callParent(arguments); }, subscribe: function(element) { var me = this, id = element.id, subscribers = me.subscribers; if (subscribers[id]) { ++subscribers[id]; } else { subscribers[id] = 1; me.monitors[id] = new Ext.util.PaintMonitor({ element: element, callback: me.onElementPainted, scope: me, args: [element] }); } }, unsubscribe: function(element) { var id = element.id, subscribers = this.subscribers, monitors = this.monitors; if (subscribers[id] && !--subscribers[id]) { delete subscribers[id]; monitors[id].destroy(); delete monitors[id]; } if (element.activeRead) { Ext.TaskQueue.cancelRead(element.activeRead); } }, fireElementPainted: function(element) { delete element.activeRead; this.fire(element, 'painted', [element]); }, onElementPainted: function(element) { if (!element.activeRead) { element.activeRead = Ext.TaskQueue.requestRead( 'fireElementPainted', this, [element] //<debug> , !!element.$skipResourceCheck //</debug> ); } }}, function(ElementPaint) { ElementPaint.instance = new ElementPaint();});