/*
 * Ext JS Library
 * Copyright(c) 2006-2020 Sencha Inc.
 * licensing@sencha.com
 * http://www.sencha.com/license
 */
 
/**
 * @class Ext.ux.desktop.Wallpaper
 * @extends Ext.Component
 * <p>This component renders an image that stretches to fill the component.</p>
 */
Ext.define('Ext.ux.desktop.Wallpaper', {
    extend: 'Ext.Component',
 
    alias: 'widget.wallpaper',
 
    cls: 'ux-wallpaper',
    html: '<img src="' + Ext.BLANK_IMAGE_URL + '">',
 
    stretch: false,
    wallpaper: null,
    stateful: true,
    stateId: 'desk-wallpaper',
 
    afterRender: function() {
        var me = this;
 
        me.callParent();
        me.setWallpaper(me.wallpaper, me.stretch);
    },
 
    applyState: function() {
        var me = this,
            old = me.wallpaper;
 
        me.callParent(arguments);
 
        if (old !== me.wallpaper) {
            me.setWallpaper(me.wallpaper);
        }
    },
 
    getState: function() {
        return this.wallpaper && { wallpaper: this.wallpaper };
    },
 
    setWallpaper: function(wallpaper, stretch) {
        var me = this,
            imgEl, bkgnd;
 
        me.stretch = (stretch !== false);
        me.wallpaper = wallpaper;
 
        if (me.rendered) {
            imgEl = me.el.dom.firstChild;
 
            if (!wallpaper || wallpaper === Ext.BLANK_IMAGE_URL) {
                Ext.fly(imgEl).hide();
            }
            else if (me.stretch) {
                imgEl.src = wallpaper;
 
                me.el.removeCls('ux-wallpaper-tiled');
                Ext.fly(imgEl).setStyle({
                    width: '100%',
                    height: '100%'
                }).show();
            }
            else {
                Ext.fly(imgEl).hide();
 
                bkgnd = 'url(' + wallpaper + ')';
                me.el.addCls('ux-wallpaper-tiled');
            }
 
            me.el.setStyle({
                backgroundImage: bkgnd || ''
            });
 
            if (me.stateful) {
                me.saveState();
            }
        }
 
        return me;
    }
});