From 675469caa7cbff58b04c7eeda16f031d8cd869d9 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Mon, 25 Nov 2013 04:12:40 +0400 Subject: [PATCH] fixed another bug with rolling images... Signed-off-by: Alex A. Naanou --- ui/TODO.otl | 94 ++++++++++++++++++++++++++++------------------------- ui/data.js | 12 +++++-- ui/setup.js | 49 ++++++++++++++-------------- 3 files changed, 85 insertions(+), 70 deletions(-) diff --git a/ui/TODO.otl b/ui/TODO.otl index 1a89111b..00915390 100755 --- a/ui/TODO.otl +++ b/ui/TODO.otl @@ -108,8 +108,39 @@ Roadmap -[_] 30% Gen 3 current todo - [_] 60% High priority +[_] 29% Gen 3 current todo + [_] 59% High priority + [_] 30% mark-based operations + [_] 50% cropping selection + [X] marked + [X] ribbon + [_] by tag/collection + [_] by group + [X] shift up/down + [_] tag + [_] group + | a group should behave as a single image but is + | viewable/expandable as a ribbon... + | + | should be two types of groups: + | - strict - always as a single image + | like a set of versions, processed and processing + | versions of the same image. + | (auto-group?) + | - loose - similar images, could be named collections + | viewed individually, but can be accessed either from + | a list or a member image (primary). + [_] collection + | make or add to existing collection + [_] 0% grouping / meta-image + [_] versions w. label image + | a set of images that is represented by one of the group + [_] collection + [_] editable list of external commands... + | to add things like exportdirs.py etc. + [_] Export data... + | same as export dirs but also include .ImageGrid/ dir with current + | data and images... [_] OSX: add alternatives to function buttons... [_] BUG: OSX: unable to load absolute paths... [_] BUG: when loading a non-existing dir, opening a new dir raises an error @@ -184,7 +215,7 @@ Roadmap | - title | - directory taggs and meta info | - ... - [_] 33% mormalize ribbons -- top-align sorted chunks + [_] 33% normalize ribbons -- top-align sorted chunks [X] basic mechanics | splitData(...) | mergeData(...) @@ -222,11 +253,18 @@ Roadmap | - CouchDB | - SQL | - file-db + [_] add ability to save/load ranges of images and the structures around them + | e.g.load image 100 to current ribbon -> will load 100 images + | for current ribbon and all the in between images from other + | ribbons above and below... [_] BUG CLASS: everything should work with empty ribbons... | currently some code breaks when seeing an empty ribbon... [_] BUG: shifting last image out of a ribbon misaligns the current ribbon | i.e. the prev ribbon was deleted and the new focused ribbon | is aligned as if it was not current... + | + | this is due to a race condition -- the alignment is done BEFORE + | the current image is set... [_] BUG: sometimes loading a raw directory stops at "error loading data.json" | and some times it does not err.. | @@ -245,14 +283,12 @@ Roadmap [_] index and group ALL files in an archive [_] import metadata [_] real GIDs - [_] 33% Thumbnail generation strategies + [_] 33% FAST thumbnail generation strategies [_] 0% pass 1: generate really fast previews [_] ~1/3 screen - for ribbon [_] ~1 screen - for single image mode [X] pass 2: generate normal previews [_] extract existing raw thumbnails/previews (for RAW files) - [_] editable list of external commands... - | to add things like exportdirs.py etc. [_] 0% Tablet UI [_] screen buttons [_] save settings to config.json @@ -311,38 +347,8 @@ Roadmap [_] 50% Undo/Redo [X] basic one step (revert to last save) [_] push/pop state stack - [_] 30% mark-based operations - [_] 50% cropping selection - [X] marked - [X] ribbon - [_] by tag/collection - [_] by group - [X] shift up/down - [_] tag - [_] group - | a group should behave as a single image but is - | viewable/expandable as a ribbon... - | - | should be two types of groups: - | - strict - always as a single image - | like a set of versions, processed and processing - | versions of the same image. - | (auto-group?) - | - loose - similar images, could be named collections - | viewed individually, but can be accessed either from - | a list or a member image (primary). - [_] collection - | make or add to existing collection [_] check if preview loaded, else load a different preview... - [_] add ability to save/load ranges of images and the structures around them - | e.g.load image 100 to current ribbon -> will load 100 images - | for current ribbon and all the in between images from other - | ribbons above and below... [_] single image mode transition (alpha-blend/fade/none) - [_] 0% grouping / meta-image - [_] versions w. label image - | a set of images that is represented by one of the group - [_] collection [_] 0% CSS [_] cleanup [_] split themes and layout @@ -686,7 +692,7 @@ Roadmap -[_] 61% Gen 3 UI implementation +[_] 74% Gen 3 UI implementation [X] 100% Infinite ribbon (lib) [X] cyclic ribbon [X] image block generation @@ -699,10 +705,10 @@ Roadmap | save only a block or changed data... [X] Adaptive preview size (lib) [X] Multiple ribbon (reuse) - [_] 0% User actions - | see [[controls.otl]] for basic actions... - | - | additional actions: + [_] 44% User actions + | see [[controls.otl]] for basic actions... + | + | additional actions: [X] 100% toggle mark image [X] mark between | mark all images between closest marks @@ -725,11 +731,11 @@ Roadmap [_] add/edit tags (set of images) [_] add/edit tags (single image) [X] rotate image - [_] 88% UI modes - [_] 66% single ribbon + [X] 100% UI modes + [X] 100% single ribbon [X] show marked only [X] show current ribbon - [_] show images shifted (all / above only / below only) in current ribbon + [X] show images shifted (all / above only / below only) in current ribbon [X] 100% multiple ribbons [X] show images above/below [X] show marked only diff --git a/ui/data.js b/ui/data.js index 85bac83d..27d8027d 100755 --- a/ui/data.js +++ b/ui/data.js @@ -1423,6 +1423,7 @@ function loadImagesAround(count, gid, ribbon, data){ // XXX NOTE: we use || instead of && here to compensate for an oddity // in getCommonSubArrayOffsets(...), see it for further details... if(left == null || right == null){ + console.log('>>> Ribbon ', ribbon, 'reloading...') var n = new_ribbon.indexOf(gid) var o = old_ribbon.indexOf(gid) o = o < 0 ? n : o @@ -1442,6 +1443,9 @@ function loadImagesAround(count, gid, ribbon, data){ // partial reload... } else { + console.log('>>> Ribbon ', ribbon, 'updating...') + console.log(' left:', left, + 'right:', right) var res = extendRibbon(left, right, ribbon_elem) // XXX this will get all the current images, not the resulting ones... var images = ribbon_elem.find('.image') @@ -1593,12 +1597,16 @@ function rollImages(n, ribbon, extend, no_compensate_shift){ if(n == 0){ return $([]) } - ribbon = ribbon == null ? getRibbon() : $(ribbon) + var r = typeof(ribbon) == typeof(123) ? ribbon : null + ribbon = ribbon == null ? getRibbon() + : r != null ? getRibbon(ribbon) + : $(ribbon) + var r = r == null ? getRibbonIndex(ribbon) : r var images = ribbon.find('.image') var from = n > 0 ? getImageGID(ribbon.find('.image').last()) : getImageGID(ribbon.find('.image').first()) - var gids = getImageGIDs(from, n) + var gids = getImageGIDs(from, n, r) if(gids.length == 0){ return $([]) } diff --git a/ui/setup.js b/ui/setup.js index 5fbb8c46..c72d9608 100755 --- a/ui/setup.js +++ b/ui/setup.js @@ -101,34 +101,35 @@ function setupDataBindings(viewer){ && l < Math.round(screen_size * LOAD_SCREENS))){ //loadImages(gid, Math.round(screen_size * LOAD_SCREENS), ribbon) loadImagesAround(Math.round(screen_size * LOAD_SCREENS), gid, ribbon) - } // roll the ribbon while we are advancing... - var head = img_before.prevAll('.image') - var tail = img_before.nextAll('.image') + } else { + var head = img_before.prevAll('.image') + var tail = img_before.nextAll('.image') - // NOTE: if this is greater than the number of images currently - // loaded, it might lead to odd effects... - var frame_size = Math.ceil((screen_size * LOAD_SCREENS) / 2) - var threshold = Math.floor(frame_size / 2) - threshold = threshold < 1 ? 1 : threshold + // NOTE: if this is greater than the number of images currently + // loaded, it might lead to odd effects... + var frame_size = Math.ceil((screen_size * LOAD_SCREENS) / 2) + var threshold = Math.floor(frame_size / 2) + threshold = threshold < 1 ? 1 : threshold - // do the loading... - // XXX need to expand/contract the ribbon depending on speed... - // ...might also be a good idea to load smaller images - // while scrolling really fast... - // XXX use extendRibbon, to both roll and expand/contract... - // XXX BUG: when rolling a ribbon, this will sometimes - // misalign an image... - // ...where exactly this happens in the ribbon depends on - // its size and LOAD_SCREENS... - // NOTE: calling centerView() will fix this. - // ...the problem is in centerRibbon - if(tail.length < threshold){ - var rolled = rollImages(frame_size, ribbon) - } - if(head.length < threshold){ - var rolled = rollImages(-frame_size, ribbon) + // do the loading... + // XXX need to expand/contract the ribbon depending on speed... + // ...might also be a good idea to load smaller images + // while scrolling really fast... + // XXX use extendRibbon, to both roll and expand/contract... + // XXX BUG: when rolling a ribbon, this will sometimes + // misalign an image... + // ...where exactly this happens in the ribbon depends on + // its size and LOAD_SCREENS... + // NOTE: calling centerView() will fix this. + // ...the problem is in centerRibbon + if(tail.length < threshold){ + var rolled = rollImages(frame_size, ribbon) + } + if(head.length < threshold){ + var rolled = rollImages(-frame_size, ribbon) + } } })