| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | /*!* Ext JS Library 4.0* Copyright(c) 2006-2011 Sencha Inc.* licensing@sencha.com* http://www.sencha.com/license*/// From code originally written by David Davis (http://www.sencha.com/blog/html5-video-canvas-and-ext-js/)Ext.define('MyDesktop.VideoWindow', {    extend: 'Ext.ux.desktop.Module',    uses: [        'Ext.ux.desktop.Video'    ],    id:'video',    windowId: 'video-window',    tipWidth: 160,    tipHeight: 96,    init : function(){        this.launcher = {            text: 'About Ext JS',            iconCls:'video'        }    },    createWindow : function(){        var me = this, desktop = me.app.getDesktop(),            win = desktop.getWindow(me.windowId);        if (!win) {            win = desktop.createWindow({                id: me.windowId,                title: 'About Ext JS',                width: 740,                height: 480,                iconCls: 'video',                animCollapse: false,                border: false,                layout: 'fit',                items: [                    {                        xtype: 'video',                        id: 'video-player',                        src: [                            // browser will pick the format it likes most:                            { src: 'http://dev.sencha.com/desktopvideo.mp4', type: 'video/mp4' },                            { src: 'http://dev.sencha.com/desktopvideo.ogv', type: 'video/ogg' },                            { src: 'http://dev.sencha.com/desktopvideo.mov', type: 'video/quicktime' }                        ],                        autobuffer: true,                        autoplay : true,                        controls : true,                        /* default */                        listeners: {                            afterrender: function(video) {                                me.videoEl = video.video.dom;                                if (video.supported) {                                    me.tip = new Ext.tip.ToolTip({                                        anchor   : 'bottom',                                        dismissDelay : 0,                                        height   : me.tipHeight,                                        width    : me.tipWidth,                                        renderTpl: [                                            '<canvas width="', me.tipWidth,                                                  '" height="', me.tipHeight, '">'                                        ],                                        renderSelectors: {                                            body: 'canvas'                                        },                                        listeners: {                                            afterrender: me.onTooltipRender,                                            show: me.renderPreview,                                            scope: me                                        }                                    }); // tip                                }                            }                        }                    }                ],                listeners: {                    beforedestroy: function() {                        me.tip = me.ctx = me.videoEl = null;                    }                }            });        }        if (me.tip) {            me.tip.setTarget(win.taskButton.el);        }        return win;    },    onTooltipRender: function (tip) {        // get the canvas 2d context        var el = tip.body.dom, me = this;        me.ctx = el.getContext && el.getContext('2d');    },    renderPreview: function() {        var me = this;        if ((me.tip && !me.tip.isVisible()) || !me.videoEl) {            return;        }        if (me.ctx) {            try {                me.ctx.drawImage(me.videoEl, 0, 0, me.tipWidth, me.tipHeight);            } catch(e) {};        }        // 20ms to keep the tooltip video smooth        Ext.Function.defer(me.renderPreview, 20, me);    }});
 |