| 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 | |
|---|
| | 134 | function 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]; |
|---|