Reset panning on aspect ratio change.
This commit is contained in:
parent
83a4dd08ac
commit
970b9b6b1d
@ -133,6 +133,17 @@ class Resizer {
|
|||||||
|
|
||||||
const siteSettings = this.settings.active.sites[window.location.host];
|
const siteSettings = this.settings.active.sites[window.location.host];
|
||||||
|
|
||||||
|
// reset zoom, but only on aspect ratio switch. We also know that aspect ratio gets converted to
|
||||||
|
// AspectRatio.Fixed when zooming, so let's keep that in mind
|
||||||
|
if (ar.type !== AspectRatio.Fixed) {
|
||||||
|
this.zoom.reset();
|
||||||
|
this.resetPan();
|
||||||
|
} else if (ar.ratio !== this.lastAr.ratio) {
|
||||||
|
// we must check against this.lastAR.ratio because some calls provide same value for ar and lastAr
|
||||||
|
this.zoom.reset();
|
||||||
|
this.resetPan();
|
||||||
|
}
|
||||||
|
|
||||||
// most everything that could go wrong went wrong by this stage, and returns can happen afterwards
|
// most everything that could go wrong went wrong by this stage, and returns can happen afterwards
|
||||||
// this means here's the optimal place to set or forget aspect ratio. Saving of current crop ratio
|
// this means here's the optimal place to set or forget aspect ratio. Saving of current crop ratio
|
||||||
// is handled in pageInfo.updateCurrentCrop(), which also makes sure to persist aspect ratio if ar
|
// is handled in pageInfo.updateCurrentCrop(), which also makes sure to persist aspect ratio if ar
|
||||||
@ -263,6 +274,10 @@ class Resizer {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toFixedAr() {
|
||||||
|
this.lastAr.type = AspectRatio.Fixed;
|
||||||
|
}
|
||||||
|
|
||||||
resetLastAr() {
|
resetLastAr() {
|
||||||
this.lastAr = {type: AspectRatio.Initial};
|
this.lastAr = {type: AspectRatio.Initial};
|
||||||
}
|
}
|
||||||
@ -288,6 +303,9 @@ class Resizer {
|
|||||||
// dont allow weird floats
|
// dont allow weird floats
|
||||||
this.videoAlignment = VideoAlignment.Center;
|
this.videoAlignment = VideoAlignment.Center;
|
||||||
|
|
||||||
|
// because non-fixed aspect ratios reset panning:
|
||||||
|
this.toFixedAr();
|
||||||
|
|
||||||
const player = this.conf.player.element;
|
const player = this.conf.player.element;
|
||||||
|
|
||||||
const relativeX = (event.pageX - player.offsetLeft) / player.offsetWidth;
|
const relativeX = (event.pageX - player.offsetLeft) / player.offsetWidth;
|
||||||
@ -299,6 +317,11 @@ class Resizer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resetPan() {
|
||||||
|
this.pan = {};
|
||||||
|
this.videoAlignment = this.settings.getDefaultVideoAlignment(window.location.host);
|
||||||
|
}
|
||||||
|
|
||||||
setPan(relativeMousePosX, relativeMousePosY){
|
setPan(relativeMousePosX, relativeMousePosY){
|
||||||
// relativeMousePos[X|Y] - on scale from 0 to 1, how close is the mouse to player edges.
|
// relativeMousePos[X|Y] - on scale from 0 to 1, how close is the mouse to player edges.
|
||||||
// use these values: top, left: 0, bottom, right: 1
|
// use these values: top, left: 0, bottom, right: 1
|
||||||
|
@ -18,6 +18,7 @@ class Zoom {
|
|||||||
|
|
||||||
reset(){
|
reset(){
|
||||||
this.scale = 1;
|
this.scale = 1;
|
||||||
|
this.logScale = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoomStep(amount){
|
zoomStep(amount){
|
||||||
@ -34,6 +35,8 @@ class Zoom {
|
|||||||
|
|
||||||
this.logger.log('info', 'debug', "[Zoom::zoomStep] changing zoom by", amount, ". New zoom level:", this.scale);
|
this.logger.log('info', 'debug', "[Zoom::zoomStep] changing zoom by", amount, ". New zoom level:", this.scale);
|
||||||
|
|
||||||
|
this.conf.resizer.toFixedAr();
|
||||||
|
|
||||||
this.conf.restoreAr();
|
this.conf.restoreAr();
|
||||||
this.conf.announceZoom(this.scale);
|
this.conf.announceZoom(this.scale);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user