@iangilman iangilman released this Jun 21, 2016 · 158 commits to master since this release

  • Fixed problems with zoom/pan constraints with certain extreme settings (#965)
  • Fixed an issue causing the browser to crash on iOS (#966)



@iangilman iangilman released this May 26, 2016 · 170 commits to master since this release

  • BREAKING CHANGE: Viewport.homeBounds, Viewport.contentSize, Viewport.contentAspectX and
    Viewport.contentAspectY have been removed. (#846)
  • BREAKING CHANGE: The Overlay.getBounds method now takes the viewport as parameter. (#896)
  • DEPRECATION: Overlay.scales, Overlay.bounds and Overlay.position have been deprecated. (#896)
    • Overlay.width !== null should be used to test whether the overlay scales horizontally
    • Overlay.height !== null should be used to test whether the overlay scales vertically
    • The Overlay.getBounds method should be used to get the bounds of the overlay in viewport coordinates
    • Overlay.location replaces Overlay.position
  • DEPRECATION: Viewport.setHomeBounds has been deprecated (#846)
  • DEPRECATION: the Viewport constructor is now ignoring the contentSize option (#846)
  • Tile edge smoothing at high zoom (#764)
  • Fixed issue with reference strip popping up virtual keyboard on mobile devices (#779)
  • Now supporting rotation in the Rect class (#782)
  • Drag outside of iframe now works better, as long as both pages are on the same domain (#790)
  • Coordinate conversion now takes rotation into account (#796)
  • Support tile-less IIIF as per LegacyTileSource (#816)
  • You can now give an empty string to the tabIndex option (#805)
  • Fixed issue with rotation and clicking in the navigator (#807)
  • Broadened the check for mime type in LegacyTileSource URLs to allow query strings (#819)
  • Added globalCompositeOperation option for tiledImage, to allow for different transfer modes (#814)
  • Added Viewer.addSimpleImage method for easily adding non-tiled images (#827)
  • DziTileSource now works properly with DZI files that have no extension (#835)
  • Fixed content clipping with rotation (#463, #567 and #833)
  • Fixed navigator not being rotated when viewport rotation is set in constructor (#840)
  • Fixed: Viewer.setMouseNavEnabled wasn't affecting all of the viewer's trackers (#845)
  • Fixed: with scrollToZoom disabled, the viewer caused page scrolling to slow down (#858)
  • Added Viewer.getOverlayById and Overlay.getBounds functions (#853)
  • Tiled images with 0 opacity no longer load their tiles or do drawing calculations (#859)
  • Fixed issue with edge smoothing with PNG tiles at high zoom (#860)
  • Fixed: Images with transparency were clearing images layered below them (#861)
  • Fixed issue causing HTML pages to jump unwantedly to the reference strip upon loading (#872)
  • Added addOnceHandler method to EventSource (#887)
  • Added TiledImage.fitBounds method (#888)
  • Overlays can now be scaled in a single dimension by providing a point location and either width or height (#896)
  • Added full rotation support to overlays (#729, #193)
  • Viewport.goHome() now takes clipping into account (#910)
  • Improved zoom to point (#923)
  • Optimized sketch canvas clearing and blending for images with opacity or transfer modes (#927)
  • Now taking rotation into account in viewport getBounds and fitBounds methods (#934)
  • Added option to disable navigator auto-fade (#935)
  • Fixed issue with maintaining viewport position with full screen (#940)
  • Fixed an issue with simultaneous touch events (#930)
  • Avoid loading clipped out tiles (#939)
  • Improved precision for subtle moves with fitBounds (#939)
  • Fixed an issue in viewer.addTiledImage with replace:true when viewer has navigator (#948)



@iangilman iangilman released this Nov 12, 2015 · 416 commits to master since this release

  • BREAKING CHANGE: the tile does not hold a reference to its image anymore. Only the tile cache keep a reference to images.
  • BREAKING CHANGE: TileSource.tileSize no longer exists; use TileSource.getTileWidth() and TileSource.getTileHeight() instead.
  • DEPRECATION: let ImageRecord.getRenderedContext create the rendered context instead of using ImageRecord.setRenderedContext
  • DEPRECATION: TileSource.getTileSize() is deprecated. Use TileSource.getTileWidth() and TileSource.getTileHeight() instead.
  • Changed resize behaviour to prevent "snapping" to world bounds when constraints allow more space (#711)
  • Added support for non-square tiles (#673)
    • TileSource.Options objects can now optionally provide tileWidth/tileHeight instead of tileSize for non-square tile support.
    • IIIFTileSources will now respect non-square tiles if available.
  • Added new tile source for simple images: ImageTileSource (#760)
  • Optimized adding large numbers of items to the world with collectionMode (#735)
  • Registers as an AMD module where possible (#719)
  • Added "tile-loaded" event on the viewer allowing to modify a tile before it is marked ready to be drawn (#659)
  • Added "tile-unloaded" event on the viewer allowing to free up memory one has allocated on a tile (#659)
  • Added 'tile-load-failed' event (#725)
  • Added additional coordinates conversion methods to TiledImage (#662)
  • Added preserveImageSizeOnResize option (#666)
  • Added collectionColumns as a configuration parameter (#680)
  • Added option in addTiledImage to replace tiledImage at index (#706)
  • Added autoRefigureSizes flag to World for optimizing mass rearrangements (#715)
  • You can now change viewport margins after the viewer is created (#721)
  • Added a patch to help slow down the scroll devices that fire too fast (#754)
  • Fixed flickering tiles with useCanvas=false when no cache is used (#661)
  • 'display: none' no longer gets reset on overlays during draw (#668)
  • Better error reporting for tile load failures (#679)
  • Added XDomainRequest as fallback method for ajax requests if XMLHttpRequest fails (for IE < 10) (#693)
  • Now avoiding using eval when JSON.parse is available (#696)
  • Rotation now works properly on retina display (#708)
  • Fixed issue with tiledImages loading tiles at every level instead of just the best level (#728)
  • Fixed placeholderFillStyle flicker (#727)
  • Fix for Chrome (v45) issue that key is sometimes undefined outside of the for-in loop (#730)
  • World.removeAll now cancels any in-flight image loads; same for Viewer.open and Viewer.close (#734)
  • Fixed overlays position (use rounding instead of flooring and ceiling) (#741)
  • Fixed issue with including overlays in your tileSources array when creating/opening in the viewer (#745)
  • Fixed issue in iOS devices that would cause all touch events to fail after a Multitasking Gesture was triggered (#744)
  • Fixed an issue with TiledImage setPosition/setWidth/setHeight not reliably triggering a redraw (#720)
  • Fixed zooming in with plus key on a Swedish keyboard (#763)



@iangilman iangilman released this May 26, 2015 · 586 commits to master since this release

This is a major release with a number of breaking changes and deprecations (see below) and a major feature, true multi-image support:


Please pay special attention to the breaking changes below if you had previously used the multi-image or multi-layer features of the previous versions of OpenSeadragon.

We've also added improved info on coordinate systems (even more important now with multi-image):


...and published an SVG overlay plugin:



  • True multi-image mode (#450)
    • BREAKING CHANGE: Passing an array for the tileSources option is no longer enough to trigger sequence mode; you have to set the sequenceMode option to true as well
    • BREAKING CHANGE: Navigator no longer sends an open event when its viewer opens
    • BREAKING CHANGE: Viewer.drawers and Viewer.drawersContainer no longer exist
    • BREAKING CHANGE: A Viewer's Drawer and Viewport are now made once per Viewer and reused for every image that Viewer opens (rather than being recreated for every open); this means if you change Viewer options between opens, the behavior is different now.
    • DEPRECATION: use Viewer.addTiledImage instead of Viewer.addLayer
      • addTiledImage supports positioning config properties
    • DEPRECATION: use World.getItemAt instead of Viewer.getLayerAtLevel
    • DEPRECATION: use World.getIndexOfItem instead of Viewer.getLevelOfLayer
    • DEPRECATION: use World.getItemCount instead of Viewer.getLayersCount
    • DEPRECATION: use World.setItemIndex instead of Viewer.setLayerLevel
    • DEPRECATION: use World.removeItem instead of Viewer.removeLayer
    • DEPRECATION: use World.needsDraw instead of Drawer.needsUpdate
    • DEPRECATION: use TileCache.numTilesLoaded instead of Drawer.numTilesLoaded
    • DEPRECATION: use World.resetItems instead of Drawer.reset
    • DEPRECATION: use Drawer.clear and World.draw instead of Drawer.update
    • DEPRECATION: the layersAspectRatioEpsilon option is no longer necessary
    • DEPRECATION: Viewer's add-layer event is now World's add-item event
    • DEPRECATION: Viewer's layer-level-changed event is now World's item-index-change event
    • DEPRECATION: Viewer's remove-layer event is now World's remove-item event
    • DEPRECATION: Viewer's add-layer-failed event is now add-item-failed
    • DEPRECATION: TileSourceCollection has been retired in favor of World
    • DEPRECATION: collectionMode no longer draws outlines or reflections for items
    • Drawer has been split into three classes:
      • TiledImage, tile management and positioning for a single tiled image
      • TileCache, tile caching for all images
      • Drawer, tile drawing for all images
    • New class: World, keeps track of multiple images in the scene
    • Viewer now has world and tileCache properties
    • Rect and Point now have clone functions
    • New Viewport method for managing homeBounds as well as constraints: setHomeBounds
    • Viewport.open supports positioning config properties
    • For multi-image open, drawing isn't started until all tileSources have been opened
    • You can specify a clip area for each image (only works on browsers that support the HTML5 canvas) (#594)
    • Added placeholderFillStyle so image rectangles can be drawn even before their tiles load (#635)
    • Ability to set opacity on individual TiledImages (#644)
  • Margins option to push the home region in from the edges of the Viewer (#505)
  • Rect and Point toString() functions are now consistent: rounding values to nearest hundredth
  • Overlays appear in the DOM immediately on open or addOverlay (#507)
  • imageLoaderLimit now works (#544)
  • Turning off scrollToZoom in gestureSettings now allows scroll events to propagate
  • You can now set a minZoomLevel that's greater than the home zoom level
  • Added union() to OpenSeadragon.Rect
  • Fixed an error in fitBounds if the new and old bounds were extremely close in size
  • Added ajaxWithCredentials option (#543)
  • Added viewport-change event for after the viewport changes but before it's drawn
  • A spring's current value is now updated immediately on reset (#524)
  • Fixed an error in fitBounds that occurred sometimes with immediately = true
  • Added support for HDPI (retina) displays (#583)
  • Corrected IIIF tile source to use canonical syntax (#586)
  • Fixed x/y typo that caused horizontal reference strip to be rendered only relative to height (#595)
  • Fixed Firefox 35 not able to open local files (#588)
  • Fixed an issue with zero size viewers in IE8 (#609)
  • Fixed: Cross Origin policy not working (#613)
  • Optimized tile loading by clearing the queue on a re-draw when imageLoaderLimit is set (#616)
  • Now animating zoom spring exponentially (#631)
  • Added http://editorconfig.org/ config file (#637)
  • Keyboard pan speed is now the same regardless of zoom level (#645)



@iangilman iangilman released this Jan 29, 2015 · 904 commits to master since this release

  • Added preserveOverlays option (#561)
  • Fixed: DZI tilesource was broken on IE8/IE9 (#563)
  • Exposed secondary pointer button (middle, right, etc.) events from MouseTracker and through viewer (#479)
  • MouseTracker - Improved IE 8 compatibility (#562)
  • MouseTracker - Improved IE 9+ compatibility (#564)
  • MouseTracker - Simulated touchenter/touchleave events now bubble to parent element MouseTrackers (#566)
  • MouseTracker - Improved multitouch support in enter/exit event handlers (#566)
  • MouseTracker - orphaned tracked touch pointers removed (fix for #539)
  • MouseTracker - removed touchenter/touchleave event support since the events don't exist on any known platform and have been removed from the W3C specification (#566)
  • Removed Viewer onContainerPress/onContainerRelease handlers (and the associated 'container-release' event ) that were never fired due to the canvas (child) element capturing the DOM events (#566)
  • Added 'canvas-enter', 'canvas-exit', and 'canvas-press' events to Viewer (#566)
  • ButtonGroup - removed obsolete MouseTracker event handlers (#566)
  • MouseTracker - added keydown and keyup handlers (#568)
  • Modifier keys ignored in keyboard navigation handlers (#503)
  • Requesting keyboard focus when viewer is clicked (#537)
  • Arrow key navigation fixed across platforms (#565)
  • Removed textarea element from viewer DOM. Viewer.canvas now handles keyboard navigation (#569)
  • Removed 'position' property from MouseTracker keyDownHandler/keyUpHandler/keyHandler functions (#573)
  • Fixed pointer event model detection for IE 10 and IE 11 (#571)
  • Added setMouseNavEnabled() support to Navigator (#572)
  • MouseTracker now defaults to tracking on (#558)
  • Removed Viewer focusHandler/onCanvasFocus (#577)
  • Added tabIndex option to viewer (#577)



@iangilman iangilman released this Jan 5, 2015 · 968 commits to master since this release

  • New combined IIIF TileSource for 1.0 through 2.0 (#441)
    • BREAKING CHANGE: Removed IIIF1_1TileSource (now that IIIFTileSource supports all versions)
  • Allowed TileSources to have dynamic tileSize via source.getTileSize(level) (#441)
    • DEPRECATION: Use .getTileSize(level) instead of .tileSize
  • Fix for IIPServer-style urls when using DZI (#413)
  • Fix memory leak while destroying the viewer (#421)
  • Added fitBoundsWithConstraints() to the viewport (#423)
  • Fixed MouseTracker cross-browser issues with tracking pointers over and out of the tracked element (pull request #448, fix for #152, #404, #420, and #427)
  • Fixed incorrect flick direction after image is rotated (#452)
  • Debug mode now works with rotate images (#453)
  • Now supporting dzi xml with namespaces (#462)
  • You can now rotate the navigator along with the main viewer (#455)
  • Viewport.setRotation now allows all rotation angles (#466)
  • Pinch rotate is now available (defaults to off) (#468)
  • Added option for home button to fill viewer (#474)
  • Better handling of mid-update image loaded callbacks (#409)
  • Tracked pointers are now cleaned up when Viewer.setMouseNavEnabled(false) is called (#518)
  • Added explicit pointer capture for touch event model touchstart events (#552)



@iangilman iangilman released this May 8, 2014 · 1120 commits to master since this release

  • Fixed issue with dragging the navigator highlight on Webkit browsers (#395)
  • Improved Viewer Options Support in Gesture Handling (#399)



@iangilman iangilman released this Apr 30, 2014 · 1131 commits to master since this release

  • BREAKING CHANGE: the openseadragon-canvas element now has two child divs. This means: (#298)
    • The drawer element is no longer accessible via viewer.canvas.firstChild but via viewer.drawersContainer.firstChild or viewer.drawer.canvas.
    • The overlays elements are no longer accessible via viewer.canvas.childNodes but via viewer.overlaysContainer.childNodes or viewer.currentOverlays[i].element.
  • BREAKING CHANGE: Pseudo full screen mode on IE<11 using activex has been dropped. OpenSeadragon will run in full page if full screen mode is requested.
  • BREAKING CHANGE: MouseTracker touch pinch gestures are no longer converted to scroll events. MouseTracker.pinchHandler should be used instead. (#369)
  • DEPRECATION: overlay functions have been moved from Drawer to Viewer (#331)
  • DEPRECATION: OpenSeadragon.cancelFullScreen has been renamed OpenSeadragon.exitFullScreen (#358)
  • DEPRECATION: The 'isTouchEvent' property passed in MouseTracker events is deprecated and has been replaced with 'pointerType', which is a String value "mouse", "touch", "pen", etc. to support multiple simultaneous pointing devices (#369)
  • DEPRECATION: The 'buttonDownAny' property passed in MouseTracker enter and exit events (enterHandler/exitHandler) is deprecated and has been replaced with 'buttons', which indicates the button(s) currently pressed (#369)
  • DEPRECATION: The 'buttonDownAny' property passed in Viewer's 'container-enter' and 'container-exit' events is deprecated and has been replaced with 'buttons', which indicates the button(s) currently pressed (#369)
  • Added layers support. Multiple images can now been displayed on top of each other with transparency via the Viewer.addLayer method (#298)
  • Improved overlay functions (#331)
  • Fixed: Nav button highlight states aren't quite aligned on Firefox (#303)
  • Added ControlAnchor options for default controls (#304)
  • Enabled basic cross-domain tile loading without tainting canvas (works in Chrome and Firefox) (#308)
  • Added crossOriginPolicy drawer configuration to enable or disable CORS image requests (#364)
  • Disabled CORS by default (#377)
  • Added a ControlAnchor.ABSOLUTE enumeration. Enables absolute positioning of control elements in the viewer (#310)
  • Added a 'navigator-scroll' event to Navigator. Fired when mousewheel events occur in the navigator (#310)
  • Added a navigatorMaintainSizeRatio option. If set to true, the navigator minimap resizes when the viewer element is resized (#310)
  • Added 'ABSOLUTE' as a navigatorPosition option, along with corresponding navigatorTop, navigatorLeft options. Allows the navigator minimap to be placed anywhere in the viewer (#310)
  • Enhanced the navigatorTop, navigatorLeft, navigatorHeight, and navigatorWidth options to allow a number for pixel units or a string for other element units (%, em, etc.) (#310)
  • Additional enhancements for IIIF support (#315)
  • Fixed: Setting degrees in Viewer constructor has no effect (#336)
  • Added pre-draw event for tiles to allow applications to alter the image (#348)
  • Added optional Rotate Left/Right buttons to standard controls (#341)
  • Added optimization for large numbers of overlays: checkResize = false option for OpenSeadragon.Overlay (#365)
  • Updated full screen API, adding support for Opera and IE11 and allowing keyboard input in Chrome (#358)
  • Various fixes to bring OpenSeadragon into W3C compliance (#375)
  • Added separate flags for turning off each of the nav buttons (#376)
  • Added support for query parameters in DZI tileSource URL (#378)
  • Enhanced MouseTracker for multi-touch (#369)
    • Added support for tracking multiple touch-points on multiple/simultaneous pointing devices
    • Added support for the W3C Pointer Events event model. Enables touch/multi-touch on IE10+
    • Added a dragEndHandler event callback, called when a drag gesture ends
    • Added a pinchHandler event callback, called as a pinch gesture (2 touch points) is occurring
    • Added real-time velocity (speed and direction) tracking to drag operations. 'speed' and 'direction' values are passed in the dragHandler and dragEndHandler event data
  • Enhanced Viewer for multi-touch (#369)
    • Added pinch zoom with the new MouseTracker pinchHandler. The 'pan' and 'zoom' Viewer events can be used to detect changes resulting in pinch gestures
    • Added a "canvas-pinch" event fired by the pinch event handler
    • Added flick gesture with the new MouseTracker dragEndHandler
    • Added a "canvas-drag-end" event fired by the drag-end event handler
    • Added a GestureSettings class for per-device gesture options. Currently has settings to enable/disable zoom-on-scroll, zoom-on-pinch, zoom-on-click, and flick gesture settings.
    • Added GestureSettings objects for mouse, touch, and pen devices to the Viewer options giving users the ability to customize gesture handling in the viewer
    • Added velocity (speed and direction) properties to the "canvas-drag" event
  • Added double-click gesture detection to MouseTracker with corresponding dblClickHandler event callback (#392)
  • Added zoom on double-click feature to Viewer, with corresponding dblClickToZoom option added to the GestureSettings class (#392)
  • Made it possible to run OpenSeadragon from local filesystem on some browsers (#379)



@iangilman iangilman released this Dec 3, 2013 · 1303 commits to master since this release

NOTE: This version has a number of breaking changes to the API, mostly in event handling. See below.

  • BREAKING CHANGE: All EventSource and MouseTracker event handler method signatures changed to 'handlerMethod(event)' where event == { eventSource, userData, ... } (#251) (Also fixes #23, #224, #239)
    • The new eventSource property in the event object replaces the old eventSource parameter that was passed to handler methods.
    • Where the event object duplicated the eventSource value, those properties have been removed. This affects the following events:
      • All Button events - 'button' property removed
      • All Viewer (Viewer, Drawer, Viewport) events - 'viewer' property removed
  • BREAKING CHANGE: Renamed EventHandler to EventSource (#225)
  • BREAKING CHANGE: Event names changed for consistency: changed to lower case, compound names hyphenated, and "on" prefixes removed (#226):
    • Viewer "animationstart" changed to "animation-start"
    • Viewer "animationfinish" changed to "animation-finish"
    • Button "onPress" changed to "press"
    • Button "onRelease" changed to "release"
    • Button "onClick" changed to "click"
    • Button "onEnter" changed to "enter"
    • Button "onExit" changed to "exit"
    • Button "onFocus" changed to "focus"
    • Button "onBlur" changed to "blur"
  • BREAKING CHANGE: Numerous improvements to fullPage/fullScreen (#256):
    • Retains zoom/pan position better when switching into and out of fullPage.
    • Retains scroll position when switching back out.
    • More resilient to styling variations on the page.
    • setFullPage no longer automatically engages fullScreen; there's now a separate setFullScreen.
    • 'fullpage' event is now 'full-page'.
    • The fullpage property of the 'full-page' event is now fullPage.
    • There is now a 'full-screen' event with a fullScreen property (true if it has gone to full screen).
    • There are now 'pre-full-page' and 'pre-full-screen' events that include a preventDefaultAction property you can set in your handler to cancel. They also have fullPage and fullScreen properties respectively, to indicate if they are going into or out of the mode.
  • BREAKING CHANGE: Removed the 'onPageChange' callback from the viewer options. Viewer.goToPage() now raises the 'page' event only (#285)
  • Major documentation improvements (#281)
  • MouseTracker now passes the original event objects to its handler methods (#23)
  • MouseTracker now supports an optional 'moveHandler' method for tracking mousemove events (#215)
  • Added stopHandler to MouseTracker. (#262)
  • Fixed: Element-relative mouse coordinates now correct if the element and/or page is scrolled (using new OpenSeadragon.getElementOffset() method) (#131)
  • Fixed: Pinch zoom event issue, regressive issue from previous event system changes (#244)
  • Added IIIF Image API 1.1 Tile Source (#230)
  • IIIF 1.0 now uses pixel based syntax (#249)
  • Fixed: Touch event issue where no canvas-click events were being raised (#240)
  • Check that zoom reference point is valid before using it in zoomTo and zoomBy (#247)
  • Added a number of easier coordinate conversion methods to viewport (#243)
  • Added the ability to create a viewer and start at a specified page (#252)
  • Fixed image resolve issue with collection mode (#255)
  • DOM events are now passed through as 'event.originalEvent' in viewer and button events where appropriate. (#257) Affects the following events:
    • Viewer: 'canvas-release', 'canvas-click', 'canvas-drag', 'canvas-scroll', 'container-enter', 'container-exit', 'container-release'
    • Button: 'enter', 'exit', 'press', 'release', 'focus', 'blur', 'click'
  • Fixed: IE 10 not reading DZI file correctly in certain circumstances (#218)
  • Added support for the 'wheel' DOM mousewheel event (#261)
  • Fix for non-canvas tile rendering at large size (#264)
  • Drawer now uses an HTML5 canvas element whenever it's available. Can be overridden with the Viewer.useCanvas option (#191)
  • Added a boolean preventDefaultAction property (default false) to the event object passed to MouseTracker handler methods. (#270) Implemented in the following MouseTracker subscribers:
    • Viewer.keyboardCommandArea.innerTracker.focusHandler: preventDefaultAction == true prevents scrolling viewer into view
    • Viewer.keyboardCommandArea.innerTracker.keyHandler: preventDefaultAction == true prevents viewer keyboard navigation
    • Viewer.innerTracker.clickHandler: preventDefaultAction == true prevents viewer zoom on click
    • Viewer.innerTracker.dragHandler: preventDefaultAction == true prevents viewer panning with mouse/touch
    • Viewer.innerTracker.scrollHandler: preventDefaultAction == true prevents viewer zooming on mousewheel/pinch
  • Fixed: IE8 error with custom buttons - "Object doesn't support this action" (#279)
  • Support IIIF servers that don't report tile dimensions (#286)
  • Added an autoResize option. Default is true. When set to false, the viewer takes no action when its container element is resized. (#291)
  • Added a static 'version' property to OpenSeadragon. Useful for plugins that require specific OpenSeadragon versions. (#292)



@iangilman iangilman released this Sep 23, 2013 · 1516 commits to master since this release

  • Fixed: canvas-click event shouldn't fire as you drag (#198)
  • Fixed: LegacyTileSource doesn't fail gracefully when no supported file formats are found (#202)
  • Added an optional userData argument to EventHandler.addHandler() which is passed unchanged to the handler method (#203)
  • Fixed AJAX error reporting on IE8 (#208)
  • Added viewportToImageRectangle method, and updated imageToViewportRectangle, imageToViewportCoordinates, and viewportToImageCoordinates to be more flexible with params (#212)
  • Fixed: Viewer is not responsive (css) after returning from full screen (#222)