mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
fixed a biggish align bug...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
9e9198fb72
commit
7fc490e32a
@ -89,8 +89,8 @@ Roadmap
|
||||
|
||||
|
||||
|
||||
[_] 24% Gen 3 current todo
|
||||
[_] 49% High priority
|
||||
[_] 25% Gen 3 current todo
|
||||
[_] 51% High priority
|
||||
[_] BUG: sometimes duplicate images get loaded...
|
||||
| this happens when jumping back and forth on the mid ribbon until
|
||||
| the last element shows up and then moving left until the frame
|
||||
@ -121,7 +121,7 @@ Roadmap
|
||||
| prior sizing after recycling...
|
||||
| ...check if centerRibbon(...) and correctImageProportionsForRotation(...)
|
||||
| are called in right sequence...
|
||||
[_] BUG: changing window size (F11) in single image modes messes things up...
|
||||
[X] BUG: changing window size (F11) in single image modes messes things up...
|
||||
| some images are of different sizes (newly loaded) and aligned in a wrong way...
|
||||
|
|
||||
| appears not to affect square-fit view...
|
||||
@ -136,6 +136,7 @@ Roadmap
|
||||
| appears to be a state leak, this affects:
|
||||
| - correctImageProportionsForRotation(image) -- mis-alignes images
|
||||
| while after cycling single image mode, behaves correctly...
|
||||
| - affects finNImages(...) -- uses old size of viewer...
|
||||
[_] BUG: jumping screen images does not load the adjacent ribbons...
|
||||
| positioning is OK but ribbons are not fully visible...
|
||||
[_] ASAP: test on Android...
|
||||
|
||||
34
ui/base.js
34
ui/base.js
@ -924,26 +924,17 @@ function nextRibbon(mode){
|
||||
|
||||
/******************************************************** Rotating ***/
|
||||
|
||||
// Compensate for viewer proportioned and rotated images.
|
||||
//
|
||||
// NOTE: this is not neede for square image blocks.
|
||||
function correctImageProportionsForRotation(images){
|
||||
var viewer = $('.viewer')
|
||||
var W = viewer.innerWidth()
|
||||
var H = viewer.innerHeight()
|
||||
// NOTE: this is here because we are comparing proportions of two
|
||||
// very differently sized elements, and though the proportions
|
||||
// may be the same, the actual result may be vastly different
|
||||
// due of pixel rounding...
|
||||
// Real example:
|
||||
// Viewer: 826x601
|
||||
// Image: 413x300
|
||||
// ratio 1: W/H - w/h = -0.002290626733222556
|
||||
// ratio 2: W/w - H/h = -0.0033333333333334103
|
||||
// NOTE: this might get out of hand for close to square viewer...
|
||||
// ...one way to cheat out of this is to round any ratio
|
||||
// close to 1 to 1.
|
||||
// XXX find a better way out of this, avoiding floats...
|
||||
var rounding_error = 0.007
|
||||
|
||||
$(images).each(function(i, e){
|
||||
var viewer_p = W > H ? 'landscape' : 'portrait'
|
||||
|
||||
return $(images).each(function(i, e){
|
||||
var image = $(this)
|
||||
// orientation...
|
||||
var o = image.attr('orientation')
|
||||
@ -953,11 +944,12 @@ function correctImageProportionsForRotation(images){
|
||||
|
||||
// non-square image...
|
||||
if(w != h){
|
||||
var proportions = W/H - w/h
|
||||
|
||||
var image_p = w > h ? 'landscape' : 'portrait'
|
||||
|
||||
// when the image is turned 90deg/270deg and its
|
||||
// proportions are the same as the screen...
|
||||
if((o == 90 || o == 270) && Math.abs(proportions) < rounding_error ){
|
||||
if((o == 90 || o == 270) && image_p == viewer_p){
|
||||
image.css({
|
||||
width: h,
|
||||
height: w,
|
||||
@ -968,7 +960,8 @@ function correctImageProportionsForRotation(images){
|
||||
'margin-left': (w - h)/2,
|
||||
'margin-right': (w - h)/2,
|
||||
})
|
||||
} else if((o == 0 || o == 180) && Math.abs(proportions) > rounding_error ){
|
||||
|
||||
} else if((o == 0 || o == 180) && image_p != viewer_p){
|
||||
image.css({
|
||||
width: h,
|
||||
height: w,
|
||||
@ -1053,13 +1046,16 @@ function fitNImages(n){
|
||||
var W = viewer.innerWidth()
|
||||
var H = viewer.innerHeight()
|
||||
|
||||
// XXX this may not work correctly for portrait proportioned viewers...
|
||||
var scale = Math.min(W / (w * n), H / h)
|
||||
|
||||
// NOTE: if animating, the next two likes must be animated together...
|
||||
setElementScale($('.ribbon-set'), scale)
|
||||
centerView(image, 'css')
|
||||
|
||||
$('.viewer').trigger('fittingImages', [n])
|
||||
viewer.trigger('fittingImages', [n])
|
||||
|
||||
return scale
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -54,7 +54,8 @@ $(function(){
|
||||
// XXX in single image mode this still causes problems...
|
||||
// this can be resolved by cycling to ribbon mode and back...
|
||||
.resize(function() {
|
||||
correctImageProportionsForRotation('.images')
|
||||
|
||||
toggleImageProportions('!')
|
||||
centerView()
|
||||
})
|
||||
|
||||
|
||||
@ -33,11 +33,13 @@
|
||||
// - <index> : 0 for 'off' and 1 for 'on' (see below)
|
||||
// - 'on' : switch mode on -- add class
|
||||
// - 'off' : switch mode off -- remove class
|
||||
// - '!' : reload current state, same as toggler(toggler('?'))
|
||||
// - '?' : return current state ('on'|'off')
|
||||
//
|
||||
// In forms 2 and 3, if class_list is a list of strings, the <action> can be:
|
||||
// - <index> : explicitly set the state to index in class_list
|
||||
// - <class-name> : explicitly set a class from the list
|
||||
// - '!' : reload current state, same as toggler(toggler('?'))
|
||||
// - '?' : return current state ('on'|'off')
|
||||
//
|
||||
// In the third form the <target> is a jquery-compatible object.
|
||||
@ -122,7 +124,7 @@ function createCSSClassToggler(elem, class_list, callback_a, callback_b){
|
||||
}
|
||||
}
|
||||
// we need to get the current state...
|
||||
if(action == null || action == '?'){
|
||||
if(action == null || action == '?' || action == '!'){
|
||||
// get current state...
|
||||
var cur = 'none'
|
||||
for(var i=0; i < class_list.length; i++){
|
||||
@ -136,6 +138,11 @@ function createCSSClassToggler(elem, class_list, callback_a, callback_b){
|
||||
return bool_action ? (cur == 'none' ? 'off' : 'on') : cur
|
||||
}
|
||||
|
||||
// force reload of current state...
|
||||
if(action == '!'){
|
||||
action = bool_action ? (cur == 'none' ? 'off' : 'on') : cur
|
||||
}
|
||||
|
||||
// invalid action...
|
||||
} else if((bool_action && ['on', 'off'].indexOf(action) == -1)
|
||||
|| (!bool_action && class_list.indexOf(action) == -1)){
|
||||
@ -163,7 +170,8 @@ function createCSSClassToggler(elem, class_list, callback_a, callback_b){
|
||||
if(callback_pre != null){
|
||||
if(callback_pre.call(this, action) === false){
|
||||
// XXX should we return action here???
|
||||
return
|
||||
//return
|
||||
return action
|
||||
}
|
||||
}
|
||||
// update the element...
|
||||
|
||||
@ -159,7 +159,7 @@ var toggleSingleImageMode = createCSSClassToggler(
|
||||
w = SETTINGS['screen-images-ribbon-mode']
|
||||
w = w == null ? DEFAULT_SCREEN_IMAGES : w
|
||||
|
||||
toggleImageProportions('fit-square')
|
||||
toggleImageProportions('none')
|
||||
fitNImages(w)
|
||||
var i = SETTINGS['image-info-ribbon-mode'] == 'on' ? 'on' : 'off'
|
||||
toggleImageInfo(i)
|
||||
@ -260,7 +260,7 @@ var toggleInlineImageInfo = createCSSClassToggler(
|
||||
var toggleImageProportions = createCSSClassToggler(
|
||||
'.viewer',
|
||||
[
|
||||
'fit-square',
|
||||
'none',
|
||||
'fit-viewer'
|
||||
],
|
||||
function(action){
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user