From 58da998d7561f1105af274e565ddc4347beafe23 Mon Sep 17 00:00:00 2001 From: Antoine Vandecreme Date: Sat, 30 Nov 2013 17:28:17 -0500 Subject: [PATCH] Add basic layers support --- src/viewer.js | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/viewer.js b/src/viewer.js index 7d9e755b..3037877c 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -578,6 +578,7 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, this.source = null; this.drawer = null; + this.drawers = []; this.viewport = this.preserveViewport ? this.viewport : null; //this.profiler = null; @@ -1045,6 +1046,20 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, return this; }, + /** + * @function + * @name OpenSeadragon.Viewer.prototype.addLayer + */ + addLayer: function( tileSource ) { + var drawer = new $.Drawer( + tileSource, + this.viewport, + this.canvas + ); + this.drawers.push( drawer ); + updateOnce( this ); + return drawer.canvas; + }, /** * @function @@ -1460,6 +1475,7 @@ function openTileSource( viewer, source ) { debugMode: _this.debugMode, debugGridColor: _this.debugGridColor }); + _this.drawers.push( _this.drawer ); //Instantiate a navigator if configured if ( _this.showNavigator && !_this.collectionMode ){ @@ -1929,7 +1945,7 @@ function updateOnce( viewer ) { } if ( animated ) { - viewer.drawer.update(); + updateDrawers( viewer ); if( viewer.navigator ){ viewer.navigator.update( viewer.viewport ); } @@ -1943,8 +1959,8 @@ function updateOnce( viewer ) { * @property {?Object} userData - Arbitrary subscriber-defined object. */ viewer.raiseEvent( "animation" ); - } else if ( THIS[ viewer.hash ].forceRedraw || viewer.drawer.needsUpdate() ) { - viewer.drawer.update(); + } else if ( THIS[ viewer.hash ].forceRedraw || drawersNeedUpdate( viewer ) ) { + updateDrawers( viewer ); if( viewer.navigator ){ viewer.navigator.update( viewer.viewport ); } @@ -1998,6 +2014,18 @@ function resizeViewportAndRecenter( viewer, containerSize, oldBounds, oldCenter viewport.fitBounds( newBounds, true ); } +function updateDrawers( viewer ) { + viewer.drawers.forEach( function( drawer ) { + drawer.update(); + }); +} + +function drawersNeedUpdate( viewer ) { + return viewer.drawers.some( function( drawer ) { + return drawer.needsUpdate(); + }); +} + /////////////////////////////////////////////////////////////////////////////// // Navigation Controls ///////////////////////////////////////////////////////////////////////////////