mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-30 19:00:09 +00:00
fixed a dependency leak in viewer.Client and did zoom actions...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
d1db72b938
commit
1cc4cafc95
@ -211,10 +211,10 @@ module.RibbonsPrototype = {
|
|||||||
// gets the visible size of the image tile in pixels.
|
// gets the visible size of the image tile in pixels.
|
||||||
//
|
//
|
||||||
// XXX try and make image size the product of vmin and scale...
|
// XXX try and make image size the product of vmin and scale...
|
||||||
getVisibleImageSize: function(dim){
|
getVisibleImageSize: function(dim, scale){
|
||||||
|
scale = scale || this.getScale()
|
||||||
dim = dim == null ? 'width' : dim
|
dim = dim == null ? 'width' : dim
|
||||||
var img = this.viewer.find('.image')
|
var img = this.viewer.find('.image')
|
||||||
var scale = this.getScale()
|
|
||||||
if(dim == 'height'){
|
if(dim == 'height'){
|
||||||
return img.outerHeight(true) * scale
|
return img.outerHeight(true) * scale
|
||||||
} else if(dim == 'width'){
|
} else if(dim == 'width'){
|
||||||
@ -230,7 +230,7 @@ module.RibbonsPrototype = {
|
|||||||
var scale = scale == null ? 1 : scale/this.getScale()
|
var scale = scale == null ? 1 : scale/this.getScale()
|
||||||
|
|
||||||
var W = this.viewer.width()
|
var W = this.viewer.width()
|
||||||
var w = this.getVisibleImageSize('width')*scale
|
var w = this.getVisibleImageSize('width') * scale
|
||||||
|
|
||||||
return W/w
|
return W/w
|
||||||
},
|
},
|
||||||
@ -1408,12 +1408,25 @@ module.RibbonsPrototype = {
|
|||||||
//
|
//
|
||||||
// If n is given this will fit n images (default: 1)
|
// If n is given this will fit n images (default: 1)
|
||||||
//
|
//
|
||||||
|
// NOTE: this will never scale the view in a wat that an image
|
||||||
|
// overflows either in height nor width.
|
||||||
|
//
|
||||||
// XXX might be usefull to set origin before scaling...
|
// XXX might be usefull to set origin before scaling...
|
||||||
fitImage: function(n){
|
fitImage: function(n){
|
||||||
n = n == null ? 1 : n
|
n = n == null ? 1 : n
|
||||||
|
|
||||||
|
// NOTE: this is width oriented...
|
||||||
var scale = this.getScreenWidthImages(1) / n
|
var scale = this.getScreenWidthImages(1) / n
|
||||||
|
|
||||||
|
// check bounds...
|
||||||
|
var H = this.viewer.height()
|
||||||
|
var h = this.getVisibleImageSize('height', 1)
|
||||||
|
|
||||||
|
// n images will be higher than the viewer, adjust for height...
|
||||||
|
if(h*scale >= H){
|
||||||
|
scale = H/h
|
||||||
|
}
|
||||||
|
|
||||||
this
|
this
|
||||||
.setScale(scale)
|
.setScale(scale)
|
||||||
//.centerRibbon(null, null, scale)
|
//.centerRibbon(null, null, scale)
|
||||||
|
|||||||
@ -138,8 +138,14 @@ module.GLOBAL_KEYBOARD = {
|
|||||||
shift: function(){ a.shiftImageDown() },
|
shift: function(){ a.shiftImageDown() },
|
||||||
'ctrl+shift': function(){ a.shiftImageDownNewRibbon() },
|
'ctrl+shift': function(){ a.shiftImageDownNewRibbon() },
|
||||||
},
|
},
|
||||||
'#0': function(){ a.fitImage(20) },
|
'#0': function(){ a.fitMax() },
|
||||||
'#1': function(){ a.fitOrig() },
|
'#1': {
|
||||||
|
default: function(){ a.fitImage() },
|
||||||
|
ctrl: function(){
|
||||||
|
event.preventDefault()
|
||||||
|
a.fitOrig()
|
||||||
|
},
|
||||||
|
},
|
||||||
'#2': function(){ a.fitTwo() },
|
'#2': function(){ a.fitTwo() },
|
||||||
'#3': function(){ a.fitThree() },
|
'#3': function(){ a.fitThree() },
|
||||||
'#4': function(){ a.fitFour() },
|
'#4': function(){ a.fitFour() },
|
||||||
@ -149,6 +155,10 @@ module.GLOBAL_KEYBOARD = {
|
|||||||
'#8': function(){ a.fitEight() },
|
'#8': function(){ a.fitEight() },
|
||||||
'#9': function(){ a.fitNine() },
|
'#9': function(){ a.fitNine() },
|
||||||
|
|
||||||
|
'+': function(){ a.zoomIn() },
|
||||||
|
'=': '+',
|
||||||
|
'-': function(){ a.zoomOut() },
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,6 +32,8 @@ actions.Actions({
|
|||||||
// XXX should this be here???
|
// XXX should this be here???
|
||||||
config: {
|
config: {
|
||||||
'steps-to-change-direction': 3,
|
'steps-to-change-direction': 3,
|
||||||
|
'max-screen-images': 30,
|
||||||
|
'zoom-step': 1.2,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
@ -190,14 +192,12 @@ actions.Actions({
|
|||||||
// NOTE: for all of these, current/ribbon image is a default...
|
// NOTE: for all of these, current/ribbon image is a default...
|
||||||
//
|
//
|
||||||
// XXX move this out to a mixin...
|
// XXX move this out to a mixin...
|
||||||
|
|
||||||
shiftImageUp: ['Shift image up',
|
shiftImageUp: ['Shift image up',
|
||||||
'If implicitly shifting current image (i.e. no arguments), focus '
|
'If implicitly shifting current image (i.e. no arguments), focus '
|
||||||
+'will shift to the next or previous image in the current '
|
+'will shift to the next or previous image in the current '
|
||||||
+'ribbon depending on current direction.',
|
+'ribbon depending on current direction.',
|
||||||
function(target){
|
function(target){
|
||||||
// stop transitions...
|
|
||||||
this.ribbons.preventTransitions()
|
|
||||||
|
|
||||||
// by default we need to update the current position...
|
// by default we need to update the current position...
|
||||||
if(target == null){
|
if(target == null){
|
||||||
var direction = this.direction == 'right' ? 'next' : 'prev'
|
var direction = this.direction == 'right' ? 'next' : 'prev'
|
||||||
@ -215,20 +215,12 @@ actions.Actions({
|
|||||||
} else {
|
} else {
|
||||||
this.data.shiftImageUp(target)
|
this.data.shiftImageUp(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore transitions...
|
|
||||||
return function(){
|
|
||||||
this.ribbons.restoreTransitions()
|
|
||||||
}
|
|
||||||
}],
|
}],
|
||||||
shiftImageDown: ['Shift image down',
|
shiftImageDown: ['Shift image down',
|
||||||
'If implicitly shifting current image (i.e. no arguments), focus '
|
'If implicitly shifting current image (i.e. no arguments), focus '
|
||||||
+'will shift to the next or previous image in the current '
|
+'will shift to the next or previous image in the current '
|
||||||
+'ribbon depending on current direction.',
|
+'ribbon depending on current direction.',
|
||||||
function(target){
|
function(target){
|
||||||
// stop transitions...
|
|
||||||
this.ribbons.preventTransitions()
|
|
||||||
|
|
||||||
// by default we need to update the current position...
|
// by default we need to update the current position...
|
||||||
if(target == null){
|
if(target == null){
|
||||||
var direction = this.direction == 'right' ? 'next' : 'prev'
|
var direction = this.direction == 'right' ? 'next' : 'prev'
|
||||||
@ -246,11 +238,6 @@ actions.Actions({
|
|||||||
} else {
|
} else {
|
||||||
this.data.shiftImageDown(target)
|
this.data.shiftImageDown(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore transitions...
|
|
||||||
return function(){
|
|
||||||
this.ribbons.restoreTransitions()
|
|
||||||
}
|
|
||||||
}],
|
}],
|
||||||
shiftImageUpNewRibbon: ['Shift image up to a new empty ribbon',
|
shiftImageUpNewRibbon: ['Shift image up to a new empty ribbon',
|
||||||
function(target){
|
function(target){
|
||||||
@ -442,11 +429,32 @@ actions.Actions(Client, {
|
|||||||
}],
|
}],
|
||||||
|
|
||||||
// zooming...
|
// zooming...
|
||||||
// XXX
|
//
|
||||||
|
// Zooming is done by multiplying the current scale by config['zoom-step']
|
||||||
|
// and rounding to nearest discrete number of images to fit on screen.
|
||||||
zoomIn: ['Zoom in',
|
zoomIn: ['Zoom in',
|
||||||
function(){ }],
|
function(){
|
||||||
|
this.ribbons.setOrigin()
|
||||||
|
|
||||||
|
//var n = Math.round(this.ribbons.getScreenWidthImages())-1
|
||||||
|
var d = this.config['zoom-step']
|
||||||
|
var s = a.ribbons.getScale() * d
|
||||||
|
var n = Math.floor(this.ribbons.getScreenWidthImages(s))
|
||||||
|
|
||||||
|
this.fitImage(n <= 0 ? 1 : n)
|
||||||
|
}],
|
||||||
zoomOut: ['Zoom out',
|
zoomOut: ['Zoom out',
|
||||||
function(){ }],
|
function(){
|
||||||
|
this.ribbons.setOrigin()
|
||||||
|
|
||||||
|
//var n = Math.round(this.ribbons.getScreenWidthImages())+1
|
||||||
|
var d = this.config['zoom-step']
|
||||||
|
var s = a.ribbons.getScale() / d
|
||||||
|
var n = Math.ceil(this.ribbons.getScreenWidthImages(s))
|
||||||
|
|
||||||
|
var max = this.config['max-screen-images']
|
||||||
|
this.fitImage(n > max ? max : n)
|
||||||
|
}],
|
||||||
|
|
||||||
fitOrig: ['Fit to original scale',
|
fitOrig: ['Fit to original scale',
|
||||||
function(){
|
function(){
|
||||||
@ -461,7 +469,6 @@ actions.Actions(Client, {
|
|||||||
|
|
||||||
// NOTE: if this gets a count argument it will fit count images,
|
// NOTE: if this gets a count argument it will fit count images,
|
||||||
// default is one.
|
// default is one.
|
||||||
// XXX animation broken for this...
|
|
||||||
fitImage: ['Fit image',
|
fitImage: ['Fit image',
|
||||||
function(count){
|
function(count){
|
||||||
//this.ribbons.preventTransitions()
|
//this.ribbons.preventTransitions()
|
||||||
@ -473,7 +480,6 @@ actions.Actions(Client, {
|
|||||||
//this.ribbons.restoreTransitions()
|
//this.ribbons.restoreTransitions()
|
||||||
}],
|
}],
|
||||||
|
|
||||||
// XXX should these be relative to screen rather than actual image counts?
|
|
||||||
fitTwo: ['Fit two images', function(){ this.fitImage(2) }],
|
fitTwo: ['Fit two images', function(){ this.fitImage(2) }],
|
||||||
fitThree: ['Fit three images', function(){ this.fitImage(3) }],
|
fitThree: ['Fit three images', function(){ this.fitImage(3) }],
|
||||||
fitFour: ['Fit four images', function(){ this.fitImage(4) }],
|
fitFour: ['Fit four images', function(){ this.fitImage(4) }],
|
||||||
@ -486,9 +492,8 @@ actions.Actions(Client, {
|
|||||||
fitEleven: ['Fit eleven images', function(){ this.fitImage(11) }],
|
fitEleven: ['Fit eleven images', function(){ this.fitImage(11) }],
|
||||||
fitTwelve: ['Fit twelve images', function(){ this.fitImage(12) }],
|
fitTwelve: ['Fit twelve images', function(){ this.fitImage(12) }],
|
||||||
|
|
||||||
// XXX
|
|
||||||
fitMax: ['Fit the maximum number of images',
|
fitMax: ['Fit the maximum number of images',
|
||||||
function(){ }],
|
function(){ this.fitImage(this.config['max-screen-images']) }],
|
||||||
|
|
||||||
// XXX
|
// XXX
|
||||||
fitSmall: ['Show small image',
|
fitSmall: ['Show small image',
|
||||||
@ -504,15 +509,19 @@ actions.Actions(Client, {
|
|||||||
// XXX these are cheating...
|
// XXX these are cheating...
|
||||||
shiftImageUp: [
|
shiftImageUp: [
|
||||||
function(target){
|
function(target){
|
||||||
|
this.ribbons.preventTransitions()
|
||||||
|
|
||||||
return function(){
|
return function(){
|
||||||
// XXX this is cheating...
|
this.ribbons.restoreTransitions()
|
||||||
this.reload()
|
this.reload()
|
||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
shiftImageDown: [
|
shiftImageDown: [
|
||||||
function(target){
|
function(target){
|
||||||
|
this.ribbons.preventTransitions()
|
||||||
|
|
||||||
return function(){
|
return function(){
|
||||||
// XXX this is cheating...
|
this.ribbons.restoreTransitions()
|
||||||
this.reload()
|
this.reload()
|
||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
@ -566,6 +575,9 @@ actions.Actions(Client, {
|
|||||||
|
|
||||||
// basic image editing...
|
// basic image editing...
|
||||||
//
|
//
|
||||||
|
// XXX should these call .images.* or should it be done by data...
|
||||||
|
// ...I think that data is a better candidate as it should be
|
||||||
|
// standalone...
|
||||||
rotateCW: [
|
rotateCW: [
|
||||||
function(target){ this.ribbons.rotateCW(target) }],
|
function(target){ this.ribbons.rotateCW(target) }],
|
||||||
rotateCCW: [
|
rotateCCW: [
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user