13
0
livetrax/share/web_surfaces/builtin/mixer/toolkit/widgets/root.js
2020-07-21 06:49:27 +02:00

77 lines
2.5 KiB
JavaScript

/*
* This file is part of Toolkit.
*
* Toolkit is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* Toolkit is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU General
* Public License along with this program; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
"use strict";
(function(w, TK){
function visibility_change() {
if (document.hidden) {
this.disable_draw();
} else {
this.enable_draw();
}
}
function resized() {
if (!this.resize_event) {
this.resize_event = true;
this.trigger_resize();
}
}
/**
* TK.Root is used to force a resize on all its child widgets
* as soon as the browser window is resized. It also toggles drawing
* of its children depending on the state of visibility of the
* browser tab or browser window.
*
* @extends TK.Container
*
* @class TK.Root
*/
TK.Root = TK.class({
Extends: TK.Container,
_class: "Root",
_options: Object.create(TK.Container.prototype._options),
static_events: {
initialized: function () {
window.addEventListener("resize", this._resize_cb);
document.addEventListener("visibilitychange", this._visibility_cb, false);
this.enable_draw();
},
destroy: function() {
window.removeEventListener("resize", this._resize_cb);
document.removeEventListener("visibilitychange", this._visibility_cb)
this._resize_cb = this._visibility_cb = null;
},
redraw: function() {
if (this.resize_event)
this.resize_event = false;
},
},
initialize: function (options) {
TK.Container.prototype.initialize.call(this, options);
/**
* @member {HTMLDivElement} TK.Root#element - The main DIV container.
* Has class <code>toolkit-root</code>.
*/
TK.add_class(this.element, "toolkit-root");
this._resize_cb = resized.bind(this);
this._visibility_cb = visibility_change.bind(this);
this.resize_event = false;
},
});
})(this, this.TK);