/** * @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]; } }, onElementPainted: function(element) { Ext.TaskQueue.requestRead('fire', this, [element, 'painted', [element]]); }}, function(ElementPaint) { ElementPaint.instance = new ElementPaint();});