diff --git a/src/ol/renderer/Composite.js b/src/ol/renderer/Composite.js new file mode 100644 index 0000000000..5682a15e90 --- /dev/null +++ b/src/ol/renderer/Composite.js @@ -0,0 +1,103 @@ +goog.provide('ol.renderer.Composite'); + +goog.require('goog.dom'); +goog.require('ol.layer.Layer'); +goog.require('ol.Loc'); + +/** + * @constructor + * @param {string|Element} target + */ +ol.renderer.Composite = function(target) { + + /** + * @type Element + * @private + */ + this.target_ = goog.dom.getElement(target); + + /** + * @type Array. + * @private + */ + this.renderers_ = []; + +}; + +/** + * @param {Array.} layers + * @param {ol.Loc} center + * @param {number} resolution + */ +ol.renderer.Composite.prototype.draw = function(layers, center, resolution) { +}; + +/** + * @param {ol.layer.Layer} layer + */ +ol.renderer.Composite.prototype.getRenderer = function(layer) { + function finder(candidate) { + return candidate.getLayer() === layer; + } + return goog.array.find(this.renderers_, finder); +}; + +/** + * @param {ol.layer.Layer} layer + */ +ol.renderer.Composite.prototype.createRenderer = function(layer) { +}; + +/** + * List of preferred renderer types. Layer renderers have a getType method + * that returns a string describing their type. This list determines the + * preferences for picking a layer renderer. + * + * @type {Array.} + */ +ol.renderer.Composite.preferredRenderers = ["svg", "canvas", "vml"]; + +/** + * @param {ol.layer.Layer} layer + * @returns {Function} + */ +ol.renderer.Composite.prototype.pickRendererType = function(layer) { + // maps candidate renderer types to candidate renderers + var types = {}; + + function picker(Candidate) { + var supports = Candidate.isSupported() && Candidate.canRender(layer); + if (supports) { + types[Candidate.getType()] = Candidate; + } + return supports; + } + var Candidates = goog.array.some(ol.renderer.Composite.registry_, picker); + + // check to see if any preferred renderers are available + var preferences = ol.renderer.Composite.preferredRenderers; + + var Renderer; + for (var i=0, ii=preferences.length; i} + * @private + */ +ol.renderer.Composite.registry_ = []; + +/** + * @param {Function} Renderer + */ +ol.renderer.Composite.register = function(Renderer) { + ol.renderer.Composite.registry_.push(Renderer); +};