mirror of
https://github.com/openseadragon/openseadragon.git
synced 2025-02-08 02:49:22 +03:00
Fixed issued that caused flicker when using the new LegacyTileSource! Also improves performance for dzi's and other tiled images since the issue was actually in the Drawer and a result of a mistake during the refactor. This is awesome imho! Please check out the new example page to see it in action.
This commit is contained in:
parent
3619ff7930
commit
1a7c96732f
@ -6,7 +6,7 @@
|
|||||||
PROJECT: openseadragon
|
PROJECT: openseadragon
|
||||||
BUILD_MAJOR: 0
|
BUILD_MAJOR: 0
|
||||||
BUILD_MINOR: 9
|
BUILD_MINOR: 9
|
||||||
BUILD_ID: 11
|
BUILD_ID: 12
|
||||||
BUILD: ${PROJECT}.${BUILD_MAJOR}.${BUILD_MINOR}.${BUILD_ID}
|
BUILD: ${PROJECT}.${BUILD_MAJOR}.${BUILD_MINOR}.${BUILD_ID}
|
||||||
VERSION: ${BUILD_MAJOR}.${BUILD_MINOR}.${BUILD_ID}
|
VERSION: ${BUILD_MAJOR}.${BUILD_MINOR}.${BUILD_ID}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @version OpenSeadragon 0.9.11
|
* @version OpenSeadragon 0.9.12
|
||||||
*
|
*
|
||||||
* @fileOverview
|
* @fileOverview
|
||||||
* <h2>
|
* <h2>
|
||||||
@ -5314,6 +5314,7 @@ $.Drawer.prototype = {
|
|||||||
* why there are so many TODO's inside this function.
|
* why there are so many TODO's inside this function.
|
||||||
*/
|
*/
|
||||||
function updateViewport( drawer ) {
|
function updateViewport( drawer ) {
|
||||||
|
|
||||||
drawer.updateAgain = false;
|
drawer.updateAgain = false;
|
||||||
|
|
||||||
var tile,
|
var tile,
|
||||||
@ -5342,7 +5343,13 @@ function updateViewport( drawer ) {
|
|||||||
Math.log( zeroRatioC / MIN_PIXEL_RATIO ) /
|
Math.log( zeroRatioC / MIN_PIXEL_RATIO ) /
|
||||||
Math.log( 2 )
|
Math.log( 2 )
|
||||||
)
|
)
|
||||||
);
|
),
|
||||||
|
renderPixelRatioC,
|
||||||
|
renderPixelRatioT,
|
||||||
|
zeroRatioT,
|
||||||
|
optimalRatio,
|
||||||
|
levelOpacity,
|
||||||
|
levelVisibility;
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
while ( drawer.lastDrawn.length > 0 ) {
|
while ( drawer.lastDrawn.length > 0 ) {
|
||||||
@ -5384,11 +5391,47 @@ function updateViewport( drawer ) {
|
|||||||
//TODO
|
//TODO
|
||||||
for ( level = highestLevel; level >= lowestLevel; level-- ) {
|
for ( level = highestLevel; level >= lowestLevel; level-- ) {
|
||||||
|
|
||||||
|
//Avoid calculations for draw if we have already drawn this
|
||||||
|
renderPixelRatioC = drawer.viewport.deltaPixelsFromPoints(
|
||||||
|
drawer.source.getPixelRatio( level ),
|
||||||
|
true
|
||||||
|
).x;
|
||||||
|
|
||||||
|
if ( ( !haveDrawn && renderPixelRatioC >= MIN_PIXEL_RATIO ) ||
|
||||||
|
( level == lowestLevel ) ) {
|
||||||
|
drawLevel = true;
|
||||||
|
haveDrawn = true;
|
||||||
|
} else if ( !haveDrawn ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderPixelRatioT = drawer.viewport.deltaPixelsFromPoints(
|
||||||
|
drawer.source.getPixelRatio( level ),
|
||||||
|
false
|
||||||
|
).x;
|
||||||
|
|
||||||
|
zeroRatioT = drawer.viewport.deltaPixelsFromPoints(
|
||||||
|
drawer.source.getPixelRatio( 0 ),
|
||||||
|
false
|
||||||
|
).x;
|
||||||
|
|
||||||
|
optimalRatio = drawer.config.immediateRender ?
|
||||||
|
1 :
|
||||||
|
zeroRatioT;
|
||||||
|
|
||||||
|
levelOpacity = Math.min( 1, ( renderPixelRatioC - 0.5 ) / 0.5 );
|
||||||
|
|
||||||
|
levelVisibility = optimalRatio / Math.abs(
|
||||||
|
optimalRatio - renderPixelRatioT
|
||||||
|
);
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
best = updateLevel(
|
best = updateLevel(
|
||||||
drawer,
|
drawer,
|
||||||
|
haveDrawn,
|
||||||
level,
|
level,
|
||||||
lowestLevel,
|
levelOpacity,
|
||||||
|
levelVisibility,
|
||||||
viewportTL,
|
viewportTL,
|
||||||
viewportBR,
|
viewportBR,
|
||||||
currentTime,
|
currentTime,
|
||||||
@ -5414,55 +5457,20 @@ function updateViewport( drawer ) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function updateLevel( drawer, level, lowestLevel, viewportTL, viewportBR, currentTime, best ){
|
function updateLevel( drawer, haveDrawn, level, levelOpacity, levelVisibility, viewportTL, viewportBR, currentTime, best ){
|
||||||
|
|
||||||
var x, y,
|
var x, y,
|
||||||
tileTL,
|
tileTL,
|
||||||
tileBR,
|
tileBR,
|
||||||
numberOfTiles,
|
numberOfTiles,
|
||||||
levelOpacity,
|
viewportCenter = drawer.viewport.pixelFromPoint( drawer.viewport.getCenter() );
|
||||||
levelVisibility,
|
|
||||||
renderPixelRatioC,
|
|
||||||
renderPixelRatioT,
|
|
||||||
haveDrawn = false,
|
|
||||||
drawLevel = false,
|
|
||||||
viewportCenter = drawer.viewport.pixelFromPoint( drawer.viewport.getCenter() ),
|
|
||||||
zeroRatioT = drawer.viewport.deltaPixelsFromPoints(
|
|
||||||
drawer.source.getPixelRatio( 0 ),
|
|
||||||
false
|
|
||||||
).x,
|
|
||||||
optimalRatio = drawer.config.immediateRender ?
|
|
||||||
1 :
|
|
||||||
zeroRatioT;
|
|
||||||
|
|
||||||
//Avoid calculations for draw if we have already drawn this
|
|
||||||
renderPixelRatioC = drawer.viewport.deltaPixelsFromPoints(
|
|
||||||
drawer.source.getPixelRatio( level ),
|
|
||||||
true
|
|
||||||
).x;
|
|
||||||
|
|
||||||
if ( ( !haveDrawn && renderPixelRatioC >= MIN_PIXEL_RATIO ) ||
|
|
||||||
( level == lowestLevel ) ) {
|
|
||||||
drawLevel = true;
|
|
||||||
haveDrawn = true;
|
|
||||||
} else if ( !haveDrawn ) {
|
|
||||||
return best;
|
|
||||||
}
|
|
||||||
|
|
||||||
//OK, a new drawing so do your calculations
|
//OK, a new drawing so do your calculations
|
||||||
tileTL = drawer.source.getTileAtPoint( level, viewportTL );
|
tileTL = drawer.source.getTileAtPoint( level, viewportTL );
|
||||||
tileBR = drawer.source.getTileAtPoint( level, viewportBR );
|
tileBR = drawer.source.getTileAtPoint( level, viewportBR );
|
||||||
numberOfTiles = drawer.source.getNumTiles( level );
|
numberOfTiles = drawer.source.getNumTiles( level );
|
||||||
|
|
||||||
renderPixelRatioT = drawer.viewport.deltaPixelsFromPoints(
|
|
||||||
drawer.source.getPixelRatio( level ),
|
|
||||||
false
|
|
||||||
).x;
|
|
||||||
|
|
||||||
levelOpacity = Math.min( 1, ( renderPixelRatioC - 0.5 ) / 0.5 );
|
|
||||||
levelVisibility = optimalRatio / Math.abs(
|
|
||||||
optimalRatio - renderPixelRatioT
|
|
||||||
);
|
|
||||||
|
|
||||||
resetCoverage( drawer.coverage, level );
|
resetCoverage( drawer.coverage, level );
|
||||||
|
|
||||||
if ( !drawer.config.wrapHorizontal ) {
|
if ( !drawer.config.wrapHorizontal ) {
|
||||||
|
@ -278,6 +278,7 @@ $.Drawer.prototype = {
|
|||||||
* why there are so many TODO's inside this function.
|
* why there are so many TODO's inside this function.
|
||||||
*/
|
*/
|
||||||
function updateViewport( drawer ) {
|
function updateViewport( drawer ) {
|
||||||
|
|
||||||
drawer.updateAgain = false;
|
drawer.updateAgain = false;
|
||||||
|
|
||||||
var tile,
|
var tile,
|
||||||
@ -306,7 +307,13 @@ function updateViewport( drawer ) {
|
|||||||
Math.log( zeroRatioC / MIN_PIXEL_RATIO ) /
|
Math.log( zeroRatioC / MIN_PIXEL_RATIO ) /
|
||||||
Math.log( 2 )
|
Math.log( 2 )
|
||||||
)
|
)
|
||||||
);
|
),
|
||||||
|
renderPixelRatioC,
|
||||||
|
renderPixelRatioT,
|
||||||
|
zeroRatioT,
|
||||||
|
optimalRatio,
|
||||||
|
levelOpacity,
|
||||||
|
levelVisibility;
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
while ( drawer.lastDrawn.length > 0 ) {
|
while ( drawer.lastDrawn.length > 0 ) {
|
||||||
@ -348,11 +355,47 @@ function updateViewport( drawer ) {
|
|||||||
//TODO
|
//TODO
|
||||||
for ( level = highestLevel; level >= lowestLevel; level-- ) {
|
for ( level = highestLevel; level >= lowestLevel; level-- ) {
|
||||||
|
|
||||||
|
//Avoid calculations for draw if we have already drawn this
|
||||||
|
renderPixelRatioC = drawer.viewport.deltaPixelsFromPoints(
|
||||||
|
drawer.source.getPixelRatio( level ),
|
||||||
|
true
|
||||||
|
).x;
|
||||||
|
|
||||||
|
if ( ( !haveDrawn && renderPixelRatioC >= MIN_PIXEL_RATIO ) ||
|
||||||
|
( level == lowestLevel ) ) {
|
||||||
|
drawLevel = true;
|
||||||
|
haveDrawn = true;
|
||||||
|
} else if ( !haveDrawn ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
renderPixelRatioT = drawer.viewport.deltaPixelsFromPoints(
|
||||||
|
drawer.source.getPixelRatio( level ),
|
||||||
|
false
|
||||||
|
).x;
|
||||||
|
|
||||||
|
zeroRatioT = drawer.viewport.deltaPixelsFromPoints(
|
||||||
|
drawer.source.getPixelRatio( 0 ),
|
||||||
|
false
|
||||||
|
).x;
|
||||||
|
|
||||||
|
optimalRatio = drawer.config.immediateRender ?
|
||||||
|
1 :
|
||||||
|
zeroRatioT;
|
||||||
|
|
||||||
|
levelOpacity = Math.min( 1, ( renderPixelRatioC - 0.5 ) / 0.5 );
|
||||||
|
|
||||||
|
levelVisibility = optimalRatio / Math.abs(
|
||||||
|
optimalRatio - renderPixelRatioT
|
||||||
|
);
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
best = updateLevel(
|
best = updateLevel(
|
||||||
drawer,
|
drawer,
|
||||||
|
haveDrawn,
|
||||||
level,
|
level,
|
||||||
lowestLevel,
|
levelOpacity,
|
||||||
|
levelVisibility,
|
||||||
viewportTL,
|
viewportTL,
|
||||||
viewportBR,
|
viewportBR,
|
||||||
currentTime,
|
currentTime,
|
||||||
@ -378,55 +421,20 @@ function updateViewport( drawer ) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function updateLevel( drawer, level, lowestLevel, viewportTL, viewportBR, currentTime, best ){
|
function updateLevel( drawer, haveDrawn, level, levelOpacity, levelVisibility, viewportTL, viewportBR, currentTime, best ){
|
||||||
|
|
||||||
var x, y,
|
var x, y,
|
||||||
tileTL,
|
tileTL,
|
||||||
tileBR,
|
tileBR,
|
||||||
numberOfTiles,
|
numberOfTiles,
|
||||||
levelOpacity,
|
viewportCenter = drawer.viewport.pixelFromPoint( drawer.viewport.getCenter() );
|
||||||
levelVisibility,
|
|
||||||
renderPixelRatioC,
|
|
||||||
renderPixelRatioT,
|
|
||||||
haveDrawn = false,
|
|
||||||
drawLevel = false,
|
|
||||||
viewportCenter = drawer.viewport.pixelFromPoint( drawer.viewport.getCenter() ),
|
|
||||||
zeroRatioT = drawer.viewport.deltaPixelsFromPoints(
|
|
||||||
drawer.source.getPixelRatio( 0 ),
|
|
||||||
false
|
|
||||||
).x,
|
|
||||||
optimalRatio = drawer.config.immediateRender ?
|
|
||||||
1 :
|
|
||||||
zeroRatioT;
|
|
||||||
|
|
||||||
//Avoid calculations for draw if we have already drawn this
|
|
||||||
renderPixelRatioC = drawer.viewport.deltaPixelsFromPoints(
|
|
||||||
drawer.source.getPixelRatio( level ),
|
|
||||||
true
|
|
||||||
).x;
|
|
||||||
|
|
||||||
if ( ( !haveDrawn && renderPixelRatioC >= MIN_PIXEL_RATIO ) ||
|
|
||||||
( level == lowestLevel ) ) {
|
|
||||||
drawLevel = true;
|
|
||||||
haveDrawn = true;
|
|
||||||
} else if ( !haveDrawn ) {
|
|
||||||
return best;
|
|
||||||
}
|
|
||||||
|
|
||||||
//OK, a new drawing so do your calculations
|
//OK, a new drawing so do your calculations
|
||||||
tileTL = drawer.source.getTileAtPoint( level, viewportTL );
|
tileTL = drawer.source.getTileAtPoint( level, viewportTL );
|
||||||
tileBR = drawer.source.getTileAtPoint( level, viewportBR );
|
tileBR = drawer.source.getTileAtPoint( level, viewportBR );
|
||||||
numberOfTiles = drawer.source.getNumTiles( level );
|
numberOfTiles = drawer.source.getNumTiles( level );
|
||||||
|
|
||||||
renderPixelRatioT = drawer.viewport.deltaPixelsFromPoints(
|
|
||||||
drawer.source.getPixelRatio( level ),
|
|
||||||
false
|
|
||||||
).x;
|
|
||||||
|
|
||||||
levelOpacity = Math.min( 1, ( renderPixelRatioC - 0.5 ) / 0.5 );
|
|
||||||
levelVisibility = optimalRatio / Math.abs(
|
|
||||||
optimalRatio - renderPixelRatioT
|
|
||||||
);
|
|
||||||
|
|
||||||
resetCoverage( drawer.coverage, level );
|
resetCoverage( drawer.coverage, level );
|
||||||
|
|
||||||
if ( !drawer.config.wrapHorizontal ) {
|
if ( !drawer.config.wrapHorizontal ) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user