Changeset 1708

Show
Ignore:
Timestamp:
12/17/06 14:41:15 (2 years ago)
Author:
eblot
Message:

RevtreePlugin:

Fix up Javascript + SVG issues for WebKit? and Opera.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • revtreeplugin/0.10/revtree/htdocs/js/svgtip.js

    r1705 r1708  
    9898      }  
    9999   } 
     100    
     101   var r = Object(); 
     102   var mx = svg.getScreenCTM(); 
    100103   var box = elem.getBBox(); 
    101    var matrix = svg.getScreenCTM(); 
    102    var p1 = svg.createSVGPoint(); 
    103    var p2 = svg.createSVGPoint(); 
    104    p1.x = box.x; 
    105    p1.y = box.y; 
    106    p2.x = p1.x + box.width; 
    107    p2.y = p1.y + box.height; 
    108    p1 = p1.matrixTransform(matrix); 
    109    p2 = p2.matrixTransform(matrix); 
    110    var r = Object(); 
    111    r.x = Math.floor(p1.x)+posLeft(); 
    112    r.y = Math.floor(p1.y)+posTop(); 
    113    r.w = Math.floor(p2.x-p1.x); 
    114    r.h = Math.floor(p2.y-p1.y); 
    115    return r; 
     104   var svgpos = findPos(svg); 
     105    
     106   // Not sure who's right or wrong here: Opera, Gecko ? 
     107   // Anyway the following hack seems to work. Javascript, oh my... 
     108   if ( jQuery.browser.opera || jQuery.browser.safari ) 
     109   { 
     110      r.x = Math.floor(box.x*mx.a)+svgpos[0]; 
     111      r.y = Math.floor(box.y*mx.d)+svgpos[1]; 
     112      r.w = Math.floor(box.width*mx.a); 
     113      r.h = Math.floor(box.height*mx.d); 
     114      return r; 
     115   } 
     116   else 
     117   { 
     118      var p1 = svg.createSVGPoint(); 
     119      var p2 = svg.createSVGPoint(); 
     120      p1.x = box.x; 
     121      p1.y = box.y; 
     122      p2.x = p1.x + box.width; 
     123      p2.y = p1.y + box.height; 
     124      p1 = p1.matrixTransform(mx); 
     125      p2 = p2.matrixTransform(mx); 
     126      r.x = Math.floor(p1.x)+posLeft(); 
     127      r.y = Math.floor(p1.y)+posTop(); 
     128      r.w = Math.floor(p2.x-p1.x); 
     129      r.h = Math.floor(p2.y-p1.y); 
     130      return r; 
     131   } 
     132
     133 
     134function findPos(obj) { 
     135        var curleft = curtop = 0; 
     136        if (obj.offsetParent) { 
     137                curleft = obj.offsetLeft 
     138                curtop = obj.offsetTop 
     139                while (obj = obj.offsetParent) { 
     140                        curleft += obj.offsetLeft 
     141                        curtop += obj.offsetTop 
     142                } 
     143        } 
     144        return [curleft,curtop]; 
    116145} 
    117146