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);