comparison client/digitallibrary/greyskin/dllib.js @ 430:fc5b8cade32f

bug fixes; added saving status in cookie; added basic screen calibration functionality;
author hertzhaft
date Mon, 09 Jan 2006 17:53:03 +0100
parents ab2557f079fc
children a6af40003a38
comparison
equal deleted inserted replaced
429:61bb8c55ed37 430:fc5b8cade32f
22 22
23 ! Requires baselib.js ! 23 ! Requires baselib.js !
24 24
25 */ 25 */
26 digilibVersion = "Digilib NG"; 26 digilibVersion = "Digilib NG";
27 dllibVersion = "2.0"; 27 dllibVersion = "2.027";
28 isDigilibInitialized = false; // gets set to true in dl_param_init 28 isDigilibInitialized = false; // gets set to true in dl_param_init
29 reloadPage = true; // reload the page when parameters are changed, otherwise update only "src" attribute of scaler img 29 reloadPage = true; // reload the page when parameters are changed, otherwise update only "src" attribute of scaler img
30 30
31 // global variables 31 // global variables
32 dlTrafo = new Transform(); 32 dlTrafo = new Transform();
34 dlArea = null; 34 dlArea = null;
35 dlMarks = null; 35 dlMarks = null;
36 dlFlags = null; 36 dlFlags = null;
37 37
38 // global elements 38 // global elements
39 elemScaler = null; 39 scalerDiv = null;
40 picElem = null; 40 scalerImg = null;
41
42 41
43 // flags for parameter sets 42 // flags for parameter sets
44 PARAM_FILE = 1; 43 PARAM_FILE = 1;
45 PARAM_MODE = 2; 44 PARAM_MODE = 2;
46 PARAM_SIZE = 4; 45 PARAM_DIM = 4;
47 PARAM_IMAGE = 8; 46 PARAM_IMAGE = 8;
48 PARAM_DPI = 16; 47 PARAM_DPI = 16;
49 PARAM_MARK = 32; 48 PARAM_MARK = 32;
50 PARAM_PAGES = 64; 49 PARAM_PAGES = 64;
51 PARAM_ALL = PARAM_FILE | PARAM_MODE | PARAM_SIZE | PARAM_IMAGE | PARAM_DPI | PARAM_MARK | PARAM_PAGES; 50 PARAM_SIZE = 128;
51 PARAM_ALL = PARAM_FILE | PARAM_MODE | PARAM_DIM | PARAM_IMAGE | PARAM_DPI | PARAM_MARK | PARAM_PAGES | PARAM_SIZE;
52 52
53 // mouse drag area that counts as one click 53 // mouse drag area that counts as one click
54 MIN_AREA_SIZE = 3 * 3 + 1; 54 MIN_AREA_SIZE = 3 * 3 + 1;
55 55
56 // standard zoom factor 56 // standard zoom factor
60 BIRD_MAXX = 100; 60 BIRD_MAXX = 100;
61 BIRD_MAXY = 100; 61 BIRD_MAXY = 100;
62 62
63 // with of arrow bars 63 // with of arrow bars
64 ARROW_WIDTH = 32; 64 ARROW_WIDTH = 32;
65
66 // with of calibration bar
67 CALIBRATION_WIDTH = 64;
65 68
66 function identify() { 69 function identify() {
67 // used for identifying a digilib instance 70 // used for identifying a digilib instance
68 // Relato uses that function - lugi 71 // Relato uses that function - lugi
69 return digilibVersion; 72 return digilibVersion;
75 function initParameters() { 78 function initParameters() {
76 // file 79 // file
77 newParameter('fn', '', PARAM_FILE); 80 newParameter('fn', '', PARAM_FILE);
78 newParameter('pn', '1', PARAM_FILE); 81 newParameter('pn', '1', PARAM_FILE);
79 // mode 82 // mode
80 newParameter('ws', '1.0', PARAM_MODE);
81 newParameter('mo', '', PARAM_MODE); 83 newParameter('mo', '', PARAM_MODE);
82 // relative dimensions of zoomed image 84 // relative dimensions of zoomed image
83 newParameter('wx', '0.0', PARAM_SIZE); 85 newParameter('wx', '0.0', PARAM_DIM);
84 newParameter('wy', '0.0', PARAM_SIZE); 86 newParameter('wy', '0.0', PARAM_DIM);
85 newParameter('ww', '1.0', PARAM_SIZE); 87 newParameter('ww', '1.0', PARAM_DIM);
86 newParameter('wh', '1.0', PARAM_SIZE); 88 newParameter('wh', '1.0', PARAM_DIM);
87 // image manipulation 89 // image manipulation
88 newParameter('brgt', '0.0', PARAM_IMAGE); 90 newParameter('brgt', '0.0', PARAM_IMAGE);
89 newParameter('cont', '0.0', PARAM_IMAGE); 91 newParameter('cont', '0.0', PARAM_IMAGE);
90 newParameter('rot', '0.0', PARAM_IMAGE); 92 newParameter('rot', '0.0', PARAM_IMAGE);
91 newParameter('rgba', '', PARAM_IMAGE); 93 newParameter('rgba', '', PARAM_IMAGE);
96 newParameter('ddpiy', '', PARAM_DPI); 98 newParameter('ddpiy', '', PARAM_DPI);
97 // marks 99 // marks
98 newParameter('mk', '', PARAM_MARK); 100 newParameter('mk', '', PARAM_MARK);
99 // pages total 101 // pages total
100 newParameter('pt', '0', PARAM_PAGES); 102 newParameter('pt', '0', PARAM_PAGES);
101 } 103 // size
104 newParameter('ws', '1.0', PARAM_SIZE);
105 }
102 106
103 function parseArea() { 107 function parseArea() {
104 // returns area Rectangle from current parameters 108 // returns area Rectangle from current parameters
105 return new Rectangle( 109 return new Rectangle(
106 getParameter("wx"), 110 getParameter("wx"),
324 } 328 }
325 329
326 function dl_init() { 330 function dl_init() {
327 // initalisation on load 331 // initalisation on load
328 if (!isDigilibInitialized) dl_param_init(); 332 if (!isDigilibInitialized) dl_param_init();
329 elemScaler = getElement("scaler"); 333 scalerDiv = getElement("scaler");
330 picElem = getElement("pic", true); 334 scalerImg = getElement("pic", true);
331 // in N4 pic is in the scaler layer 335 // in N4 pic is in the scaler layer
332 if (picElem == null && elemScaler) { 336 if (scalerImg == null && scalerDiv) {
333 picElem = elemScaler.document.images[0]; 337 scalerImg = scalerDiv.document.images[0];
334 } 338 }
335 // give a name to the window containing digilib 339 // give a name to the window containing digilib
336 window.name = defined(dlTarget) && dlTarget 340 window.name = defined(dlTarget) && dlTarget
337 ? dlTarget 341 ? dlTarget
338 : "digilib"; 342 : "digilib";
381 /* ********************************************** 385 /* **********************************************
382 * interactive digilib functions 386 * interactive digilib functions
383 * ******************************************** */ 387 * ******************************************** */
384 function renderMarks() { 388 function renderMarks() {
385 // make sure the image is loaded so we know its size 389 // make sure the image is loaded so we know its size
386 if (defined(picElem.complete) && !picElem.complete && !browserType.isN4 ) { 390 if (defined(scalerImg.complete) && !scalerImg.complete && !browserType.isN4 ) {
387 setTimeout("renderMarks()", 100); 391 setTimeout("renderMarks()", 100);
388 return; 392 return;
389 } 393 }
390 // put the visible marks on the image 394 // put the visible marks on the image
391 dlTrafo = parseTrafo(picElem); 395 dlTrafo = parseTrafo(scalerImg);
392 // debugProps(dlArea, "dlArea"); 396 // debugProps(dlArea, "dlArea");
393 for (var i = 0; i < dlMarks.length; i++) { 397 for (var i = 0; i < dlMarks.length; i++) {
394 var div = document.getElementById("mark" + i) || createMarkDiv(i); 398 var div = document.getElementById("mark" + i) || createMarkDiv(i);
395 var mark = dlMarks[i]; 399 var mark = dlMarks[i];
396 // debugProps(mark, "mark"); 400 // debugProps(mark, "mark");
412 416
413 function setMark(reload) { 417 function setMark(reload) {
414 418
415 function markEvent(evt) { 419 function markEvent(evt) {
416 // event handler adding a new mark 420 // event handler adding a new mark
417 unregisterEvent("mousedown", elemScaler, markEvent); 421 unregisterEvent("mousedown", scalerDiv, markEvent);
418 addMark(evt); 422 addMark(evt);
419 if ( defined(reload) && !reload ) { 423 if ( defined(reload) && !reload ) {
420 // don't redisplay 424 // don't redisplay
421 renderMarks(); 425 renderMarks();
422 return; 426 return;
423 } 427 }
424 display(); 428 display();
429 return stopEvent(evt);
425 } 430 }
426 431
427 // add a mark where clicked 432 // add a mark where clicked
428 window.focus(); 433 window.focus();
434 moveCenter(false);
429 // start event capturing 435 // start event capturing
430 registerEvent("mousedown", elemScaler, markEvent); 436 registerEvent("mousedown", scalerDiv, markEvent);
431 } 437 }
432 438
433 function removeMark(reload) { 439 function removeMark(reload) {
434 // remove the last mark 440 // remove the last mark
435 deleteMark(); 441 deleteMark();
444 function zoomArea() { 450 function zoomArea() {
445 var pt1, pt2; 451 var pt1, pt2;
446 var zoomdiv = getElement("zoom"); 452 var zoomdiv = getElement("zoom");
447 var overlay = getElement("overlay"); 453 var overlay = getElement("overlay");
448 // use overlay div to avoid <img> mousemove problems 454 // use overlay div to avoid <img> mousemove problems
449 var rect = getElementRect(picElem); 455 var picRect = getElementRect(scalerImg);
450 // FIX ME: is there a way to query the border width from CSS info? 456 // FIX ME: is there a way to query the border width from CSS info?
451 // rect.x -= 2; // account for overlay borders 457 // rect.x -= 2; // account for overlay borders
452 // rect.y -= 2; 458 // rect.y -= 2;
453 moveElement(overlay, rect); 459 moveElement(overlay, picRect);
454 showElement(overlay, true); 460 showElement(overlay, true);
455 // start event capturing 461 // start event capturing
456 registerEvent("mousedown", overlay, zoomStart); 462 registerEvent("mousedown", overlay, zoomStart);
457 registerEvent("mousedown", elemScaler, zoomStart); 463 registerEvent("mousedown", scalerImg, zoomStart);
458 window.focus(); 464 window.focus();
459 465
460 // mousedown handler: start moving 466 // mousedown handler: start moving
461 function zoomStart(evt) { 467 function zoomStart(evt) {
462 pt1 = evtPosition(evt); 468 pt1 = evtPosition(evt);
463 unregisterEvent("mousedown", overlay, zoomStart); 469 unregisterEvent("mousedown", overlay, zoomStart);
464 unregisterEvent("mousedown", elemScaler, zoomStart); 470 unregisterEvent("mousedown", scalerImg, zoomStart);
465 // unregisterEvent("mousedown", zoomdiv, zoomStart);
466 // setup and show zoom div 471 // setup and show zoom div
467 moveElement(zoomdiv, Rectangle(pt1.x, pt1.y, 0, 0)); 472 moveElement(zoomdiv, Rectangle(pt1.x, pt1.y, 0, 0));
468 showElement(zoomdiv, true); 473 showElement(zoomdiv, true);
469 // register move events 474 // register events
470 registerEvent("mousemove", overlay, zoomMove); 475 registerEvent("mousemove", document, zoomMove);
471 registerEvent("mousemove", zoomdiv, zoomMove); 476 registerEvent("mouseup", document, zoomEnd);
472 registerEvent("mousemove", elemScaler, zoomMove);
473 // register up events for drag end
474 registerEvent("mouseup", overlay, zoomEnd);
475 registerEvent("mouseup", zoomdiv, zoomEnd);
476 registerEvent("mouseup", elemScaler, zoomEnd);
477 return stopEvent(evt); 477 return stopEvent(evt);
478 } 478 }
479 479
480 // mouseup handler: end moving 480 // mouseup handler: end moving
481 function zoomEnd(evt) { 481 function zoomEnd(evt) {
482 pt2 = evtPosition(evt); 482 pt2 = evtPosition(evt);
483 // assume a click if the area is too small (up to 3 x 3 pixel) 483 // assume a click if the area is too small (up to 3 x 3 pixel)
484 var clickArea = getRect(pt1, pt2).getArea(); 484 var clickRect = getRect(pt1, pt2);
485 if (clickArea <= MIN_AREA_SIZE) return stopEvent(evt); 485 if (clickRect.getArea() <= MIN_AREA_SIZE) return stopEvent(evt);
486 // hide zoom div 486 // hide zoom div
487 showElement(zoomdiv, false); 487 showElement(zoomdiv, false);
488 showElement(overlay, false); 488 showElement(overlay, false);
489 // unregister move events 489 // unregister events
490 unregisterEvent("mousemove", overlay, zoomMove); 490 unregisterEvent("mousemove", document, zoomMove);
491 unregisterEvent("mousemove", zoomdiv, zoomMove); 491 unregisterEvent("mouseup", document, zoomMove);
492 unregisterEvent("mousemove", elemScaler, zoomMove);
493 // unregister drag events
494 unregisterEvent("mouseup", overlay, zoomEnd);
495 unregisterEvent("mouseup", zoomdiv, zoomEnd);
496 unregisterEvent("mouseup", elemScaler, zoomMove);
497 // calc offsets 492 // calc offsets
493 clickRect.clipTo(picRect);
498 var area = getRect( 494 var area = getRect(
499 // FIX ME: liefert negative x/y Werte, wenn hmir/vmir=1 495 // FIX ME: liefert negative x/y Werte, wenn hmir/vmir=1
500 dlTrafo.invtransform(pt1), 496 dlTrafo.invtransform(clickRect.getPt1()),
501 dlTrafo.invtransform(pt2) 497 dlTrafo.invtransform(clickRect.getPt2())
502 ); 498 );
503 setParameter("wx", cropFloat(area.x)); 499 setParameter("wx", cropFloat(area.x));
504 setParameter("wy", cropFloat(area.y)); 500 setParameter("wy", cropFloat(area.y));
505 setParameter("ww", cropFloat(area.width)); 501 setParameter("ww", cropFloat(area.width));
506 setParameter("wh", cropFloat(area.height)); 502 setParameter("wh", cropFloat(area.height));
512 } 508 }
513 509
514 // mouse move handler 510 // mouse move handler
515 function zoomMove(evt) { 511 function zoomMove(evt) {
516 pt2 = evtPosition(evt); 512 pt2 = evtPosition(evt);
513 var rect = getRect(pt1, pt2);
514 rect.clipTo(picRect);
517 // update zoom div 515 // update zoom div
518 moveElement(zoomdiv, getRect(pt1, pt2)); 516 moveElement(zoomdiv, rect);
519 return stopEvent(evt); 517 return stopEvent(evt);
520 } 518 }
521 519
522 // get a rectangle from two points 520 // get a rectangle from two points
523 function getRect(p1, p2) { 521 function getRect(p1, p2) {
551 setParameter("wh", 1.0); 549 setParameter("wh", 1.0);
552 display(); 550 display();
553 } 551 }
554 552
555 553
556 function moveCenter() { 554 function moveCenter(on) {
557 // move visible area so that it's centered around the clicked point 555 // move visible area so that it's centered around the clicked point
558 if ( (dlArea.width == 1.0) && (dlArea.height == 1.0) ) { 556 if (isFullArea()) return; // nothing to do
559 // nothing to do 557 // starting event capture
560 return; 558 if (on) registerEvent("mousedown", scalerImg, moveCenterEvent);
561 } 559 else unregisterEvent("mousedown", scalerImg, moveCenterEvent);
562 window.focus(); 560 window.focus();
563 561 }
564 function moveCenterEvent(evt) { 562
565 // move to handler 563 function moveCenterEvent(evt) {
566 var pt = dlTrafo.invtransform(evtPosition(evt)); 564 // move to handler
567 var newarea = new Rectangle( 565 var pt = dlTrafo.invtransform(evtPosition(evt));
568 pt.x - 0.5 * dlArea.width, 566 var newarea = new Rectangle(
569 pt.y - 0.5 * dlArea.height, 567 pt.x - 0.5 * dlArea.width,
570 dlArea.width, 568 pt.y - 0.5 * dlArea.height,
571 dlArea.height 569 dlArea.width,
572 ); 570 dlArea.height
573 newarea.stayInside(dlMaxArea); 571 );
574 // newarea = dlMaxArea.fit(newarea); 572 newarea.stayInside(dlMaxArea);
575 // debugProps(newarea, "newarea"); 573 // newarea = dlMaxArea.fit(newarea);
576 // debugProps(dlArea, "dlArea"); 574 // debugProps(newarea, "newarea");
577 if (newarea.equals(dlArea)) return; // keep event handler 575 // debugProps(dlArea, "dlArea");
578 unregisterEvent("mousedown", elemScaler, moveCenterEvent); 576 if (newarea.equals(dlArea)) return; // keep event handler
579 // set parameters 577 unregisterEvent("mousedown", scalerImg, moveCenterEvent);
580 setParamFromArea(newarea); 578 // set parameters
581 parseArea(); 579 setParamFromArea(newarea);
582 display(); 580 parseArea();
583 } 581 display();
584
585 // starting event capture
586 registerEvent("mousedown", elemScaler, moveCenterEvent);
587 } 582 }
588 583
589 function isFullArea(area) { 584 function isFullArea(area) {
590 if (!area) area = dlArea; 585 if (!area) area = dlArea;
591 return ((area.width == 1.0) && (area.height == 1.0)); 586 return ((area.width == 1.0) && (area.height == 1.0));
592 } 587 }
593 588
594 function canMove(movx, movy) { 589 function canMove(movx, movy) {
595 if (isFullArea()) return false; 590 if (isFullArea()) return false;
591 var x2 = dlArea.x + dlArea.width;
592 var y2 = dlArea.y + dlArea.height;
596 // debugProps(dlArea); 593 // debugProps(dlArea);
597 return ((movx < 0) && (dlArea.x > 0)) 594 return ((movx < 0) && (dlArea.x > 0))
598 || ((movy < 0) && (dlArea.y > 0)) 595 || ((movx > 0) && (x2 < 1.0))
599 || ((movx > 0) && (dlArea.x + dlArea.width < 1.0)) 596 || ((movy < 0) && (dlArea.y > 0))
600 || ((movy > 0) && (dlArea.y + dlArea.height < 1.0)) 597 || ((movy > 0) && (y2 < 1.0))
601 } 598 }
602 599
603 function moveBy(movx, movy) { 600 function moveBy(movx, movy) {
604 // move visible area by movx and movy (in units of ww, wh) 601 // move visible area by movx and movy (in units of ww, wh)
605 if (!canMove(movx, movy)) return; // nothing to do 602 if (!canMove(movx, movy)) return; // nothing to do
606 var newarea = dlArea.copy(); 603 var newarea = dlArea.copy();
723 var elem = getElement("about"); 720 var elem = getElement("about");
724 if (elem == null) { 721 if (elem == null) {
725 if (!show) return; 722 if (!show) return;
726 alert("About Digilib - dialog missing in HTML code!" 723 alert("About Digilib - dialog missing in HTML code!"
727 + "\nDigilib Version: " + digilibVersion 724 + "\nDigilib Version: " + digilibVersion
725 + "\JSP Version: " + jspVersion
728 + "\ndlLib Version: " + dllibVersion 726 + "\ndlLib Version: " + dllibVersion
729 + "\nbaseLib Version: " + baseLibVersion); 727 + "\nbaseLib Version: " + baseLibVersion);
730 return; 728 return;
731 } 729 }
732 document.getElementById("digilib-version").innerHTML = "Digilib Version: " + digilibVersion; 730 document.getElementById("digilib-version").innerHTML = "Digilib Version: " + digilibVersion;
731 document.getElementById("jsp-version").innerHTML = "JSP Version: " + jspVersion;
733 document.getElementById("baselib-version").innerHTML = "baseLib Version: " + baseLibVersion; 732 document.getElementById("baselib-version").innerHTML = "baseLib Version: " + baseLibVersion;
734 document.getElementById("dllib-version").innerHTML = "dlLib Version: " + dllibVersion; 733 document.getElementById("dllib-version").innerHTML = "dlLib Version: " + dllibVersion;
735 showElement(elem, show); 734 showElement(elem, show);
736 } 735 }
737 736
738 function loadBirdImage() { 737 function loadBirdImage() {
739 var img = getElement("bird-image"); 738 var img = getElement("bird-image");
740 var src = "../servlet/Scaler?" 739 var src = "../servlet/Scaler?"
741 + getQueryString(PARAM_FILE | PARAM_MODE) 740 + getQueryString(PARAM_FILE)
742 + "&dw=" + BIRD_MAXX 741 + "&dw=" + BIRD_MAXX
743 + "&dh=" + BIRD_MAXY; 742 + "&dh=" + BIRD_MAXY;
744 img.src = src; 743 img.src = src;
745 } 744 }
746 745
747 function showBirdDiv(show) { 746 function showBirdDiv(show) {
748 // show or hide "bird's eye" div 747 // show or hide "bird's eye" div
749 var startPos; // anchor for dragging 748 var startPos; // anchor for dragging
750 var newRect; // position after drag 749 var newRect; // position after drag
751 var birdImg = getElement("bird-image"); 750 var birdImg = getElement("bird-image");
751 var birdArea = getElement("bird-area");
752 var overlay = getElement("overlay");
752 showElement(birdImg, show); 753 showElement(birdImg, show);
753 var birdArea = getElement("bird-area"); 754 // dont show selector if area has full size
754 // dont show selector if area is full size
755 if (!show || isFullArea()) { 755 if (!show || isFullArea()) {
756 // hide area 756 // hide area
757 showElement(birdArea, false); 757 showElement(birdArea, false);
758 showElement(overlay, false);
758 return; 759 return;
759 }; 760 };
760 var birdImgRect = getElementRect(birdImg); 761 var birdImgRect = getElementRect(birdImg);
761 var area = parseArea(); 762 var area = parseArea();
762 // scale area down to img size 763 // scale area down to img size
766 birdImgRect.y + birdImgRect.height * area.y, 767 birdImgRect.y + birdImgRect.height * area.y,
767 birdImgRect.width * area.width, 768 birdImgRect.width * area.width,
768 birdImgRect.height * area.height 769 birdImgRect.height * area.height
769 ); 770 );
770 moveElement(birdArea, birdAreaRect); 771 moveElement(birdArea, birdAreaRect);
771 showElement(birdArea, show); 772 showElement(birdArea, true);
772 registerEvent("mousedown", birdArea, birdAreaStartDrag); 773 moveElement(overlay, birdImgRect);
774 showElement(overlay, true);
775 registerEvent("mousedown", overlay, birdAreaStartDrag);
776 registerEvent("mousedown", birdImg, birdAreaStartDrag);
773 777
774 function birdAreaStartDrag(evt) { 778 function birdAreaStartDrag(evt) {
775 // mousedown handler: start drag 779 // mousedown handler: start drag
776 startPos = evtPosition(evt); 780 startPos = evtPosition(evt);
777 registerEvent("mousemove", birdArea, birdAreaMove); 781 unregisterEvent("mousedown", overlay, birdAreaStartDrag);
778 registerEvent("mousemove", birdImg, birdAreaMove); 782 unregisterEvent("mousedown", birdImg, birdAreaStartDrag);
779 registerEvent("mouseup", birdArea, birdAreaEndDrag); 783 registerEvent("mousemove", document, birdAreaMove);
780 registerEvent("mouseup", birdImg, birdAreaEndDrag); 784 registerEvent("mouseup", document, birdAreaEndDrag);
781
782 // debugProps(getElementRect(bird)) 785 // debugProps(getElementRect(bird))
783 return stopEvent(evt); 786 return stopEvent(evt);
784 } 787 }
785 788
786 function birdAreaMove(evt) { 789 function birdAreaMove(evt) {
801 return stopEvent(evt); 804 return stopEvent(evt);
802 } 805 }
803 806
804 function birdAreaEndDrag(evt) { 807 function birdAreaEndDrag(evt) {
805 // mouseup handler: reload page 808 // mouseup handler: reload page
806 unregisterEvent("mousemove", birdArea, birdAreaMove); 809 unregisterEvent("mousemove", document, birdAreaMove);
807 unregisterEvent("mouseup", birdArea, birdAreaEndDrag); 810 unregisterEvent("mouseup", document, birdAreaEndDrag);
808 unregisterEvent("mousemove", birdImg, birdAreaMove); 811 showElement(overlay, false);
809 unregisterEvent("mouseup", birdImg, birdAreaEndDrag); 812 if (newRect == null) { // no movement happened
813 startPos = birdAreaRect.getCenter();
814 birdAreaMove(evt); // set center to click position
815 }
810 setParameter("wx", cropFloat((newRect.x - birdImgRect.x) / birdImgRect.width)); 816 setParameter("wx", cropFloat((newRect.x - birdImgRect.x) / birdImgRect.width));
811 setParameter("wy", cropFloat((newRect.y - birdImgRect.y) / birdImgRect.height)); 817 setParameter("wy", cropFloat((newRect.y - birdImgRect.y) / birdImgRect.height));
812 // width and height parameters remain the same
813 // setParameter("ww", cropFloat(newRect.width / birdImgRect.width));
814 // setParameter("ww", cropFloat(newRect.height / birdImgRect.height));
815 // parseArea(); // why?
816 // zoomed is always fit 818 // zoomed is always fit
817 setParameter("ws", 1); 819 setParameter("ws", 1);
818 display(); 820 display();
819 return stopEvent(evt); 821 return stopEvent(evt);
820 } 822 }
825 moveElement(arrow, rect); 827 moveElement(arrow, rect);
826 showElement(arrow, show); 828 showElement(arrow, show);
827 } 829 }
828 830
829 function showArrows() { 831 function showArrows() {
830 if (defined(picElem.complete) && !picElem.complete && !browserType.isN4 ) { 832 if (defined(scalerImg.complete) && !scalerImg.complete && !browserType.isN4 ) {
831 setTimeout("showArrows()", 100); 833 setTimeout("showArrows()", 100);
832 return; 834 return;
833 } 835 }
834 var r = getElementRect(picElem); 836 var r = getElementRect(scalerImg);
835 showArrow('up', 837 showArrow('up',
836 new Rectangle(r.x, r.y, r.width, ARROW_WIDTH), 838 new Rectangle(r.x, r.y, r.width, ARROW_WIDTH),
837 canMove(0, -1) 839 canMove(0, -1)
838 ); 840 );
839 showArrow('down', 841 showArrow('down',
848 new Rectangle(r.x + r.width - ARROW_WIDTH, r.y, ARROW_WIDTH, r.height), 850 new Rectangle(r.x + r.width - ARROW_WIDTH, r.y, ARROW_WIDTH, r.height),
849 canMove(1, 0) 851 canMove(1, 0)
850 ); 852 );
851 } 853 }
852 854
855 function calibrate(direction) {
856 // calibrate screen
857 var startPos; // anchor for dragging
858 var newRect; // position after drag
859 var calDiv = getElement("calibration");
860 var overlay = getElement("overlay");
861 moveElement(overlay, getWinRect());
862 showElement(overlay, true);
863 var xDir = direction == "x";
864 moveCenter(false);
865 registerEvent("mousedown", document, calibrationStartDrag);
866
867 function calibrationStartDrag(evt) {
868 // mousedown handler: start drag
869 startPos = evtPosition(evt);
870 unregisterEvent("mousedown", document, calibrationStartDrag);
871 registerEvent("mousemove", document, calibrationMove);
872 registerEvent("mouseup", document, calibrationEndDrag);
873 registerEvent("mousemove", calDiv, calibrationMove);
874 registerEvent("mouseup", calDiv, calibrationEndDrag);
875 newRect = new Rectangle(
876 startPos.x,
877 startPos.y,
878 xDir ? 1 : CALIBRATION_WIDTH,
879 xDir ? CALIBRATION_WIDTH : 1
880 );
881 // stay within image
882 moveElement(calDiv, newRect);
883 showElement(calDiv, true);
884 // debugProps(getElementRect(bird))
885 return stopEvent(evt);
886 }
887
888 function calibrationMove(evt) {
889 // mousemove handler: drag
890 var pos = evtPosition(evt);
891 var dx = (xDir) ? pos.x - startPos.x : CALIBRATION_WIDTH;
892 var dy = (xDir) ? CALIBRATION_WIDTH : pos.y - startPos.y;
893 // move birdArea div, keeping size
894 newRect = new Rectangle(startPos.x, startPos.y, dx, dy);
895 // stay within image
896 moveElement(calDiv, newRect);
897 showElement(calDiv, true);
898 return stopEvent(evt);
899 }
900
901 function calibrationEndDrag(evt) {
902 // mouseup handler: calibrate
903 unregisterEvent("mousemove", document, calibrationMove);
904 unregisterEvent("mouseup", document, calibrationEndDrag);
905 unregisterEvent("mousemove", calDiv, calibrationMove);
906 unregisterEvent("mouseup", calDiv, calibrationEndDrag);
907 showElement(calDiv, false);
908 showElement(overlay, false);
909 moveCenter(true);
910
911 // TODO: calculate ...
912 return stopEvent(evt);
913 }
914 }
915
916 // :tabSize=4:indentSize=4:noTabs=true:
917