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