| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| var mercury = require('mercury'); |
| var store = require('../../lib/store'); |
| var log = require('../../lib/log')('debug'); |
| |
| module.exports = create; |
| module.exports.enableContinuousRendering = enableContinuousRendering; |
| |
| function create() { |
| |
| var state = mercury.varhash({ |
| continuousRendering: mercury.struct({ |
| /* |
| * Enables continuous rendering for debugging purposes. |
| */ |
| enabled: mercury.value(false), |
| /* |
| * Internal ticker that can be used to force state change. |
| */ |
| ticker: mercury.value(0) |
| }) |
| }); |
| |
| watchContinuousRendering(state.get('continuousRendering')); |
| |
| return { |
| state: state |
| }; |
| } |
| |
| /* |
| * Watches for changes to continuousRendering enabled state |
| */ |
| function watchContinuousRendering(state) { |
| var renderer; |
| mercury.watch(state.enabled, function(enabled) { |
| if (!enabled) { |
| clearInterval(renderer); |
| renderer = null; |
| return; |
| } |
| if (!renderer) { |
| log.warn('Continuous rendering is enabled.' + |
| ' Use window.enableContinuousRendering(false) to disable'); |
| // Add to ticker value every 16ms to cause state change and rerender |
| renderer = setInterval(function() { |
| state.ticker.set(state.ticker + 1); |
| }, 16); |
| } |
| }); |
| |
| // Load previous preference from store |
| store.getValue('continuousRendering').then(function(enabled) { |
| enabled = !!enabled; // Cast to bool |
| state.enabled.set(enabled); |
| }).catch(function() { |
| log.error('Could not get value of continuousRendering from store'); |
| }); |
| } |
| |
| /* |
| * Enables continuous rendering for debugging purposes. |
| */ |
| function enableContinuousRendering(state, enabled) { |
| enabled = !!enabled; // Cast to bool |
| state.get('continuousRendering').enabled.set(enabled); |
| store.setValue('continuousRendering', enabled).catch(function() { |
| log.error('Could not save value of continuousRendering to store'); |
| }); |
| } |