Mercurial > hg > digilib
comparison client/digitallibrary/jquery/jquery.digilib.js @ 665:0d3d9517e448 jquery
image transform works now under rotation!!! (at least for multiples of 90deg)
rectangle has adjustDiv to postition and size a jQuery object
rectangle constructor with two positions always returns a rectangle with positive width
| author | robcast |
|---|---|
| date | Tue, 25 Jan 2011 17:47:36 +0100 |
| parents | dcd64ecdd64a |
| children | 1e9d7d92135c |
comparison
equal
deleted
inserted
replaced
| 664:dcd64ecdd64a | 665:0d3d9517e448 |
|---|---|
| 670 var settings = data.settings; | 670 var settings = data.settings; |
| 671 // if (settings.interactionMode === 'fullscreen') { | 671 // if (settings.interactionMode === 'fullscreen') { |
| 672 var $buttonsDiv = $('<div class="buttons"></div>'); | 672 var $buttonsDiv = $('<div class="buttons"></div>'); |
| 673 $elem.append($buttonsDiv); | 673 $elem.append($buttonsDiv); |
| 674 var mode = settings.interactionMode; | 674 var mode = settings.interactionMode; |
| 675 var buttonSettings = settings.buttonSettings[mode] | 675 var buttonSettings = settings.buttonSettings[mode]; |
| 676 var actionNames = buttonSettings[actionGroup]; | 676 var actionNames = buttonSettings[actionGroup]; |
| 677 for (var i = 0; i < actionNames.length; i++) { | 677 for (var i = 0; i < actionNames.length; i++) { |
| 678 var actionName = actionNames[i]; | 678 var actionName = actionNames[i]; |
| 679 var buttonConfig = settings.buttons[actionName]; | 679 var buttonConfig = settings.buttons[actionName]; |
| 680 // construct the button html | 680 // construct the button html |
| 732 var $birdImg = $('<img class="birdimg"/>'); | 732 var $birdImg = $('<img class="birdimg"/>'); |
| 733 $elem.append($birdDiv); | 733 $elem.append($birdDiv); |
| 734 $birdDiv.append($birdzoomDiv); | 734 $birdDiv.append($birdzoomDiv); |
| 735 $birdDiv.append($birdImg); | 735 $birdDiv.append($birdImg); |
| 736 $birdzoomDiv.css(data.settings.birdIndicatorStyle); | 736 $birdzoomDiv.css(data.settings.birdIndicatorStyle); |
| 737 // $birdzoomDiv.offset($birdDiv.offset()); | |
| 738 // $birdzoomDiv.width($birdDiv.width()); | |
| 739 // $birdzoomDiv.height($birdDiv.height()); | |
| 740 data.$birdDiv = $birdDiv; | 737 data.$birdDiv = $birdDiv; |
| 741 data.$birdImg = $birdImg; | 738 data.$birdImg = $birdImg; |
| 742 $birdImg.load(birdImgLoadedHandler(data)); | 739 $birdImg.load(birdImgLoadedHandler(data)); |
| 743 $birdImg.attr('src', birdUrl); | 740 $birdImg.attr('src', birdUrl); |
| 744 if (data.settings.isBirdDivVisible) { | 741 if (data.settings.isBirdDivVisible) { |
| 798 trafo.concat(trafo.getScale(geom.size(1/area.width, 1/area.height))); | 795 trafo.concat(trafo.getScale(geom.size(1/area.width, 1/area.height))); |
| 799 // rotate | 796 // rotate |
| 800 if (data) { | 797 if (data) { |
| 801 /* var rot = trafo.getRotationAround(parseFloat(data.settings.rot), | 798 /* var rot = trafo.getRotationAround(parseFloat(data.settings.rot), |
| 802 geom.position(0.5 * area.width + area.x, 0.5 * area.height + area.y)); */ | 799 geom.position(0.5 * area.width + area.x, 0.5 * area.height + area.y)); */ |
| 803 var rot = trafo.getRotation(parseFloat(data.settings.rot)); | 800 var rot = trafo.getRotationAround(parseFloat(data.settings.rot), |
| 804 var trans1 = trafo.getTranslation(geom.position(-0.5 * area.width + area.x, -0.5 * area.height + area.y)); | 801 geom.position(0.5, 0.5)); |
| 805 var trans2 = trafo.getTranslation(geom.position(0.5 * area.width + area.x, 0.5 * area.height + area.y)); | |
| 806 trafo.concat(trans1); | |
| 807 trafo.concat(rot); | 802 trafo.concat(rot); |
| 808 trafo.concat(trans2); | |
| 809 } | 803 } |
| 810 // scale to screen position and size | 804 // scale to screen position and size |
| 811 trafo.concat(trafo.getScale(picrect)); | 805 trafo.concat(trafo.getScale(picrect)); |
| 812 trafo.concat(trafo.getTranslation(picrect)); | 806 trafo.concat(trafo.getTranslation(picrect)); |
| 813 /* if (data && data.settings.rot) { | |
| 814 var rot = trafo.getRotationAround(-data.settings.rot, | |
| 815 geom.position(0.5 * picrect.width + picrect.x, 0.5 * picrect.height + picrect.y)); | |
| 816 //var trans1 = trafo.getTranslation(geom.position(-0.5*picrect.width, -0.5*picrect.height)); | |
| 817 //var rot = trafo.getRotation(data.settings.rot); | |
| 818 //var trans2 = trafo.getTranslation(geom.position(0.5*picrect.width, 0.5*pirect.height)); | |
| 819 //trafo.concat(trans1); | |
| 820 trafo.concat(rot); | |
| 821 //trafo.concat(trans2); | |
| 822 } */ | |
| 823 return trafo; | 807 return trafo; |
| 824 }; | 808 }; |
| 825 | 809 |
| 826 // returns function for load event of scaler img | 810 // returns function for load event of scaler img |
| 827 var scalerImgLoadedHandler = function (data) { | 811 var scalerImgLoadedHandler = function (data) { |
| 893 return; | 877 return; |
| 894 }; | 878 }; |
| 895 // nice animation for embedded mode :-) | 879 // nice animation for embedded mode :-) |
| 896 var makeCompleteFunction = function($ind, normalSize) { | 880 var makeCompleteFunction = function($ind, normalSize) { |
| 897 return function() { | 881 return function() { |
| 898 if (normalSize) $ind.hide(); } | 882 if (normalSize) $ind.hide(); |
| 883 }; | |
| 899 }; | 884 }; |
| 900 var opts = { | 885 var opts = { |
| 901 'complete' : makeCompleteFunction($ind, normalSize) | 886 'complete' : makeCompleteFunction($ind, normalSize) |
| 902 }; | 887 }; |
| 903 if (!normalSize && $ind.css('display') === 'none') $ind.show(); | 888 if (!normalSize && $ind.css('display') === 'none') $ind.show(); |
| 920 }; | 905 }; |
| 921 | 906 |
| 922 // add a mark where clicked | 907 // add a mark where clicked |
| 923 var setMark = function (data) { | 908 var setMark = function (data) { |
| 924 var $scaler = data.$scaler; | 909 var $scaler = data.$scaler; |
| 925 console.debug("setmark"); | |
| 926 // start event capturing | 910 // start event capturing |
| 927 $scaler.one('click.digilib', function (evt) { | 911 $scaler.one('click.digilib', function (evt) { |
| 928 // event handler adding a new mark | 912 // event handler adding a new mark |
| 929 console.debug("setmark.click evt=",evt); | 913 var mpos = geom.position(evt); |
| 930 var mpos = geom.position(evt.pageX, evt.pageY); | |
| 931 var pos = data.imgTrafo.invtransform(mpos); | 914 var pos = data.imgTrafo.invtransform(mpos); |
| 932 data.marks.push(pos); | 915 data.marks.push(pos); |
| 933 redisplay(data); | 916 redisplay(data); |
| 934 return false; // do we even get here? | 917 return false; // do we even get here? |
| 935 }); | 918 }); |
| 940 $scaler = data.$scaler; | 923 $scaler = data.$scaler; |
| 941 var pt1, pt2; | 924 var pt1, pt2; |
| 942 var $zoomDiv = $('<div class="zoomrect" style="display:none"/>'); | 925 var $zoomDiv = $('<div class="zoomrect" style="display:none"/>'); |
| 943 $elem.append($zoomDiv); | 926 $elem.append($zoomDiv); |
| 944 $zoomDiv.css(data.settings.zoomrectStyle); | 927 $zoomDiv.css(data.settings.zoomrectStyle); |
| 945 //var overlay = getElement("overlay"); | |
| 946 // use overlay div to avoid <img> mousemove problems | |
| 947 var picRect = geom.rectangle($scaler); | 928 var picRect = geom.rectangle($scaler); |
| 948 // FIX ME: is there a way to query the border width from CSS info? | 929 // FIX ME: is there a way to query the border width from CSS info? |
| 949 // rect.x -= 2; // account for overlay borders | 930 // rect.x -= 2; // account for overlay borders |
| 950 // rect.y -= 2; | 931 // rect.y -= 2; |
| 951 //moveElement(overlay, picRect); | |
| 952 //showElement(overlay, true); | |
| 953 // start event capturing | |
| 954 //registerEvent("mousedown", overlay, zoomStart); | |
| 955 //registerEvent("mousedown", this.scalerImg, zoomStart); | |
| 956 | 932 |
| 957 var zoomStart = function (evt) { | 933 var zoomStart = function (evt) { |
| 958 pt1 = geom.position(evt); | 934 pt1 = geom.position(evt); |
| 959 // setup and show zoom div | 935 // setup and show zoom div |
| 960 //moveElement(zoomdiv, Rectangle(pt1.x, pt1.y, 0, 0)); | 936 //moveElement(zoomdiv, Rectangle(pt1.x, pt1.y, 0, 0)); |
| 970 // mouseup handler: end moving | 946 // mouseup handler: end moving |
| 971 var zoomEnd = function (evt) { | 947 var zoomEnd = function (evt) { |
| 972 pt2 = geom.position(evt); | 948 pt2 = geom.position(evt); |
| 973 // assume a click and continue if the area is too small | 949 // assume a click and continue if the area is too small |
| 974 var clickRect = geom.rectangle(pt1, pt2); | 950 var clickRect = geom.rectangle(pt1, pt2); |
| 975 clickRect.normalize(); | |
| 976 console.debug("clickRect.getArea()=",clickRect.getArea()); | |
| 977 if (clickRect.getArea() <= 5) { | 951 if (clickRect.getArea() <= 5) { |
| 978 return false; | 952 return false; |
| 979 } | 953 } |
| 980 // hide zoom div | 954 // hide zoom div |
| 981 $zoomDiv.remove(); | 955 $zoomDiv.remove(); |
| 994 | 968 |
| 995 // mouse move handler | 969 // mouse move handler |
| 996 var zoomMove = function (evt) { | 970 var zoomMove = function (evt) { |
| 997 pt2 = geom.position(evt); | 971 pt2 = geom.position(evt); |
| 998 var rect = geom.rectangle(pt1, pt2); | 972 var rect = geom.rectangle(pt1, pt2); |
| 999 rect.normalize(); | |
| 1000 rect.clipTo(picRect); | 973 rect.clipTo(picRect); |
| 1001 // update zoom div | 974 // update zoom div |
| 1002 $zoomDiv.offset({left : rect.x, top : rect.y}); | 975 rect.adjustDiv($zoomDiv); |
| 1003 $zoomDiv.width(rect.width).height(rect.height); | |
| 1004 return false; | 976 return false; |
| 1005 }; | 977 }; |
| 1006 | 978 |
| 1007 // bind start zoom handler | 979 // bind start zoom handler |
| 1008 $scaler.one('mousedown.digilib', zoomStart); | 980 $scaler.one('mousedown.digilib', zoomStart); |
