blob: ce9c90269d6bca6001b22fd178fad4ab31ebd782 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
SVG.ViewBox = function(element) {
var x, y, width, height
, wm = 1 // width multiplier
, hm = 1 // height multiplier
, box = element.bbox()
, view = (element.attr('viewBox') || '').match(/-?[\d\.]+/g)
, we = element
, he = element
// get dimensions of current node
width = new SVG.Number(element.width())
height = new SVG.Number(element.height())
// find nearest non-percentual dimensions
while (width.unit == '%') {
wm *= width.value
width = new SVG.Number(we instanceof SVG.Doc ? we.parent().offsetWidth : we.parent().width())
we = we.parent()
}
while (height.unit == '%') {
hm *= height.value
height = new SVG.Number(he instanceof SVG.Doc ? he.parent().offsetHeight : he.parent().height())
he = he.parent()
}
// ensure defaults
this.x = box.x
this.y = box.y
this.width = width * wm
this.height = height * hm
this.zoom = 1
if (view) {
// get width and height from viewbox
x = parseFloat(view[0])
y = parseFloat(view[1])
width = parseFloat(view[2])
height = parseFloat(view[3])
// calculate zoom accoring to viewbox
this.zoom = ((this.width / this.height) > (width / height)) ?
this.height / height :
this.width / width
// calculate real pixel dimensions on parent SVG.Doc element
this.x = x
this.y = y
this.width = width
this.height = height
}
}
//
SVG.extend(SVG.ViewBox, {
// Parse viewbox to string
toString: function() {
return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height
}
})
|