added basic image rotation, still not working correctly with screen proportions (single image mode)...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-05-23 17:17:31 +04:00
parent 98349d869e
commit 891e8ee744
4 changed files with 145 additions and 6 deletions

View File

@ -782,6 +782,75 @@ function nextRibbon(mode){
/******************************************************** Rotating ***/
var cw = {
null: 0,
0: 90,
90: 180,
180: 270,
270: 0,
}
var ccw = {
null: 0,
0: 270,
90: 0,
180: 90,
270: 180,
}
// XXX need to account for proportions...
function rotateImage(direction, image){
var r_table = direction == 'Left' ? cw : ccw
image = image == null ? $('.current.image') : $(image)
image.each(function(i, e){
var img = $(this)
var o = img.attr('orientation')
img.attr('orientation', r_table[o])
// XXX account for proportions...
/*
//var w = image.css('width')
//var h = image.css('height')
var w = image.outerWidth()
var h = image.outerHeight()
if(w != h){
image.css({
width: h,
height: w,
})
}
*/
})
$('.viewer').trigger('rotating' + direction.capitalize(), [image])
}
function rotateLeft(image){
rotateImage('left', image)
}
function rotateRight(image){
rotateImage('right', image)
}
/******************************************************** Flipping ***/
function flipVertical(image){
// XXX
}
function flipHorizontal(image){
// XXX
}
/********************************************************* Zooming ***/ /********************************************************* Zooming ***/
function fitNImages(n){ function fitNImages(n){

View File

@ -27,6 +27,7 @@ var STUB_IMAGE_DATA = {
'900px': './images/sizes/900px/SIZE.jpg', '900px': './images/sizes/900px/SIZE.jpg',
}, },
classes: '', classes: '',
orientation: 0,
} }
// Data format... // Data format...
@ -316,7 +317,7 @@ function updateImage(image, gid, size){
// update image order... // update image order...
image.attr({ image.attr({
order: DATA.order.indexOf(gid) order: DATA.order.indexOf(gid),
}) })
// setup marks... // setup marks...
@ -333,9 +334,13 @@ function updateImage(image, gid, size){
// get the url... // get the url...
var preview = getBestPreview(gid, size) var preview = getBestPreview(gid, size)
image.css({ image
.css({
'background-image': 'url('+ preview.url +')', 'background-image': 'url('+ preview.url +')',
}) })
.attr({
orientation: img_data.orientation == null ? 0 : img_data.orientation,
})
html = window.DEBUG ? html = window.DEBUG ?
DATA.order.indexOf(gid) +'<br>'+ gid +'<br>'+ preview.size DATA.order.indexOf(gid) +'<br>'+ gid +'<br>'+ preview.size
@ -919,6 +924,18 @@ function setupDataBindings(viewer){
DATA.current = getImageGID($(image)) DATA.current = getImageGID($(image))
}) })
// basic image manipulation...
// XXX after this we need to save the images...
.on('rotatingLeft rotatingRight', function(evt, image){
$(image).each(function(i, e){
var img = $(this)
var gid = getImageGID(img)
var orientation = img.attr('orientation')
IMAGES[gid].orientation = orientation
})
})
// marks... // marks...
// XXX toggle marking a block is not yet supported... // XXX toggle marking a block is not yet supported...

View File

@ -106,6 +106,31 @@ body {
border: solid red 5px; border: solid red 5px;
} }
/* image turning... */
/* NOTE: need to account for proportions after turning... */
.image[orientation="90"] {
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
.image[orientation="180"] {
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
.image[orientation="270"] {
-webkit-transform: rotate(270deg);
-moz-transform: rotate(270deg);
-o-transform: rotate(270deg);
-ms-transform: rotate(270deg);
transform: rotate(270deg);
}
/* dot mark... */ /* dot mark... */
.marks-visible.viewer .marked.image:after { .marks-visible.viewer .marked.image:after {
display: block; display: block;
@ -123,10 +148,22 @@ body {
border-radius: 50%; border-radius: 50%;
background: blue; background: blue;
} }
.marks-visible.viewer .marked.image[orientation="90"]:after {
top: 5px;
right: 5px;
}
.marks-visible.viewer .marked.image[orientation="180"]:after {
top: 5px;
left: 5px;
}
.marks-visible.viewer .marked.image[orientation="270"]:after {
bottom: 5px;
left: 5px;
}
/* corner mark... (a-la bookmarks in PortableMag) */ /* corner mark... (a-la bookmarks in PortableMag) */
/* /*
.marked.image:after { .marks-visible.viewer .marked.image:after {
display: block; display: block;
position: absolute; position: absolute;
content: ""; content: "";
@ -147,6 +184,18 @@ body {
-ms-transform: rotate(45deg); -ms-transform: rotate(45deg);
transform: rotate(45deg); transform: rotate(45deg);
} }
.marks-visible.viewer .marked.image[orientation="90"]:after {
top: -15px;
left: -15px;
}
.marks-visible.viewer .marked.image[orientation="180"]:after {
bottom: -15px;
left: -15px;
}
.marks-visible.viewer .marked.image[orientation="270"]:after {
bottom: -15px;
right: -15px;
}
*/ */

View File

@ -32,6 +32,7 @@ var KEYBOARD_CONFIG = {
}, },
// help mode...
'.help-mode': { '.help-mode': {
title: 'Help', title: 'Help',
doc: 'NOTE: In this mode all other key bindings are disabled, except '+ doc: 'NOTE: In this mode all other key bindings are disabled, except '+
@ -170,6 +171,9 @@ var KEYBOARD_CONFIG = {
}), }),
}, },
L: doc('Rotate image left', function(){ rotateLeft() }),
R: doc('Rotate image left', function(){ rotateRight() }),
// zooming... // zooming...
'#1': doc('Fit one image', function(){ fitNImages(1) }), '#1': doc('Fit one image', function(){ fitNImages(1) }),