Skip to content

v6.0.0

Choose a tag to compare

@iangilman iangilman released this 18 Feb 18:22
· 8 commits to master since this release
  • NEW BEHAVIOR: OpenSeadragon Data Pipeline Overhaul (#2407, #2643, #2718, #2739, #2775, #2762, #2816, #2863, #2858, #2871 @Aiosa)
    • DEPRECATION: Properties on tile that manage drawer data, or store data to draw: Tile.[element|imgElement|style|context2D|getImage|getCanvasContext] and transitively Tile.getScaleForEdgeSmoothing
    • DEPRECATION: TileSource data lifecycle handlers: system manages these automatically: TileSource.[createTileCache|destroyTileCache|getTileCacheData|getTileCacheDataAsImage|getTileCacheDataAsContext2D]
    • Tiles data is driven by caches: tiles can have multiple caches and cache can reference multiple tiles.
    • Data types & conversion pipeline: caches support automated conversion between types, and call optionally destructors. These are asynchronous.
    • Data conversion reasoning: the system keeps costs of converters and seeks the cheapest conversion to a target format (using Dijkstra).
    • Async support: events can now await handlers. Added OpenSeadragon.Promise proxy object. This object supports also synchronous mode.
    • Drawers define what data they are able to work with, and receive automatically data from one of the declared types.
    • Drawers now store data only inside cache, and provide optional type converters to move data into a format they can work with.
    • TileSource equality operator. TileSource destructor support. TileSources now must output type of the data they download [context.finish].
    • Zombies: data can outlive tiles, and be kept in the system to wait if they are not suddenly needed. Turned on automatically with TiledImage addition with replace: true and equality test success.
    • ImagesLoadedPerFrame is boosted 10 times when system is fresh (reset / open) and then declines back to original value.
    • CacheRecord supports 'internal cache' of 'SimpleCache' type. This cache can be used by drawers to hide complex types used for rendering. Such caches are stored internally on CacheRecord objects.
    • CacheRecord drives asynchronous data management and ensures correct behavior through awaiting Promises.
    • TileCache adds new methods for cache modification: renameCache, cloneCache, injectCache, replaceCache, restoreTilesThatShareOriginalCache, safeUnloadCache, unloadCacheForTile and more. Used internally within invalidation events
    • Tiles have up to two 'originalCacheKey' and 'cacheKey' caches, which keep original data and target drawn data (if modified).
    • Invalidation Pipeline: New event 'tile-invalidated' and requestInvalidate methods on World and TiledImage. Tiles get methods to modify data to draw, system prepares data for drawing and swaps them with the current main tile cache.
    • New test suites for the new cache system, conversion pipeline and invalidation events.
    • New testing/demo utilities (MockSeadragon, DrawerSwitcher for switching drawers in demos, getBuiltInDrawersForTest for testing all drawers), serialization guard in tests to remove circular references.
    • New demos, demonstrating the new pipeline. New demos for older plugins to show how compatible new version is.
    • Misc: updated CSS for dev server, new dev & test commands.
  • NEW BEHAVIOR: The per-image ajaxHeaders (specified when opening) are now being merged with the viewer's ajaxHeaders (overriding as appropriate), rather than replacing them (#2757 @hrocha1)
  • New tile source: IIP (Internet Imaging Protocol) (#2719 @ruven)
  • New tile source: Iris (#2759 @nkathawa)
  • The default drawer is now 'auto' which chooses between WebGL or canvas based on the device (#2829 @iangilman)
  • New option: loadDestinationTilesOnAnimation. With it on, during animations, OSD loads tiles in the destination region, rather than the areas passed through on the way to the destination. This new feature is on by default. (#2686, #2690 @MichaelWGibson)
  • New option: DrawerBase option for offscreen drawer creation, methods for TiledImage and TileSource creation exposed (#2790, #2822 @Aiosa)
  • New data types: imageBitmap support with workers, image fetching moved from downloadTileStart to convertor (#2790 @Aiosa)
  • New API: stopPropagation property on events (#2790 @Aiosa)
  • Viewer element coordinate transformations are now based on the actual OSD element, rather than the element given to it by the user code, so it's more reliable (#2855 @dao251)
  • Overlay wrapper elements now have a "openseadragon-overlay-wrapper" class. If the overlay element has an ID, the wrapper gets a variant on that ID, but if the overlay element does not have an ID, we no longer give the wrapper an ID. (#2698 @lokaesshwar)
  • The functions the viewer uses to operate the zoom in and zoom out buttons are now accessible to be called programatically (#2702 @achu1998)
  • The Viewer now has a getFullyLoaded function and a fully-loaded-change event, so you can know when all of the images in the viewer are loaded (#2707 @achu1998)
  • The Viewer and TiledImage now both have a whenFullyLoaded function that will call you back when they are fully loaded (#2707 @achu1998)
  • Improved IIIF tile requests in certain edge cases (#2710 @ruven)
  • Now only removing OSD-created elements on destroy (rather than emptying out the entire container) (#2724 @Vinith1919)
  • Now if you hold down navigation keys (pan or zoom), the movement is continuous rather than having a pause after the initial start (#2735 @achu1998)
  • Added tries and maxReached properties to tile-load-failed event (#2777 @Tobio89)
  • You can now turn off keyboard navigation (#2773 @colinrlim @yurii2007)
  • Added: WebGLDrawer option to unpack textures with premultiplied alpha (#2776 @adriandarian)
  • The WebGLDrawer now explicitly supports WebGL2. It's engaged automatically where available, with improvements to render quality (#2804 @adriandarian)
  • If the WebGLDrawer loses its context (e.g. because too many WebGL surfaces in the browser) it now tries to recover, and switches to the canvas drawer if it can't (#2853 @pearcetm)
  • Added optional support for tile load batching (#2834 @Aiosa)
  • We are now including the TypeScript definitions directly in the project (#2813, #2823 @rssaini01)
  • Better error handling in DataTypeConverter (#2860 @dao251)
  • Improved detection for proper WebGL support before using the WebGLDrawer (#2865 @pearcetm)
  • Improved drawer selection process; now if a drawer isn't included in the list of options, we won't use it (#2868 @pearcetm)
  • Improved performance on mobile (#2732 @Sumaiya2505)
  • Improved OSM compatibility (#2854 @JohanVisser97)
  • Improved how OpenSeadragon is imported in various environments (#2644 @Aiosa)
  • Improved documentation and code naming (#2676 @bennlich, #2729 @shaswata-26, #2754 @ganglike248, #2826 @kaicataldo, #2851 @pearcetm, #2852 @Aiosa)
  • Improved unit tests (#2640 @harshkg23, #2803 @adriandarian, #2845 @adriandarian)
  • Other internal code improvements (#2785 @suvanshenoy)
  • Fixed: Transparency detection didn't always work properly (#2636 @pcram-techcyte)
  • Fixed: MouseTracker's hasGestureHandlers and hasScrollHandler values were not getting updated upon dynamically adding/removing handlers (#2649 @Seafret)
  • Fixed: Sometimes images wouldn't update when you changed their opacity (#2652 @pearcetm)
  • Fixed: Possible MouseTracker hash collision (#2657 @cff29546)
  • Fixed: Relative panning sometimes used the wrong starting point, causing jumping during touch panning (#2704 @DougTCooke)
  • Fixed: World.arrange would misalign images that were rotated (#2709 @yowzadave)
  • Fixed: In some cases TiledImage would throw an exception if there were no tiles to update (#2733 @DougTCooke)
  • Fixed: TileSource API has now uniform behavior (#2790 @Aiosa)
  • Fixed: Bugfixes and documentation improvement on tile invalidation pipeline (#2790 @Aiosa)
  • Fixed: Sometimes the tile positions wouldn't update when the viewer was resized (#2798 @artokai)
  • Fixed: Sometimes other elements on the page would get disrupted by the viewer going into full page/full screen mode (#2786 @DrRataplan)
  • Fixed: In some circumstances an inline DZI tile source would get "undefined" added to the end of its URLs (#2832 @susanmonnelly)
  • Fixed: In some circumstances the navigator wouldn't update its contents if you resized it (#2849 @pearcetm)