wisemapping-open-source/web2d/src/main/javascript/peer/svg/TextPeer.js

155 lines
4.7 KiB
JavaScript
Raw Normal View History

2010-11-20 23:43:54 +01:00
/*
2011-08-30 01:10:05 +02:00
* Copyright [2011] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
2011-08-30 19:21:55 +02:00
web2d.peer.svg.TextPeer = new Class({
Extends: web2d.peer.svg.ElementPeer,
initialize : function() {
var svgElement = window.document.createElementNS(this.svgNamespace, 'text');
this.parent(svgElement);
this._position = {x:0,y:0};
this._font = new web2d.Font("Arial", this);
},
appendChild : function(element) {
this._native.appendChild(element._native);
},
setText : function(text) {
text = core.Utils.escapeInvalidTags(text);
var child = this._native.firstChild;
if ($defined(child)) {
this._native.removeChild(child);
}
this._text = text;
var textNode = window.document.createTextNode(text);
this._native.appendChild(textNode);
},
getText : function() {
return this._text;
},
setPosition : function(x, y) {
this._position = {x:x, y:y};
var height = this._font.getSize();
if ($defined(this._parent) && $defined(this._native.getBBox))
height = this.getHeight();
var size = parseInt(height);
this._native.setAttribute('y', y + size * 3 / 4);
//y+size/2
this._native.setAttribute('x', x);
},
getPosition : function() {
return this._position;
},
setFont : function(font, size, style, weight) {
if ($defined(font)) {
this._font = new web2d.Font(font, this);
}
if ($defined(style)) {
this._font.setStyle(style);
}
if ($defined(weight)) {
this._font.setWeight(weight);
}
if ($defined(size)) {
this._font.setSize(size);
}
this._updateFontStyle();
},
_updateFontStyle : function() {
this._native.setAttribute('font-family', this._font.getFontFamily());
this._native.setAttribute('font-size', this._font.getGraphSize());
this._native.setAttribute('font-style', this._font.getStyle());
this._native.setAttribute('font-weight', this._font.getWeight());
var scale = this._font.getFontScale();
this._native.xFontScale = scale.toFixed(1);
},
setColor : function(color) {
this._native.setAttribute('fill', color);
},
getColor : function() {
return this._native.getAttribute('fill');
},
setTextSize : function (size) {
this._font.setSize(size);
this._updateFontStyle();
},
2011-08-30 01:10:05 +02:00
2011-08-30 19:21:55 +02:00
setContentSize : function(width, height) {
this._native.xTextSize = width.toFixed(1) + "," + height.toFixed(1);
},
2009-06-07 20:59:43 +02:00
2011-08-30 19:21:55 +02:00
setStyle : function (style) {
2009-06-07 20:59:43 +02:00
this._font.setStyle(style);
2011-08-30 19:21:55 +02:00
this._updateFontStyle();
},
setWeight : function (weight) {
2009-06-07 20:59:43 +02:00
this._font.setWeight(weight);
2011-08-30 19:21:55 +02:00
this._updateFontStyle();
},
setFontFamily : function (family) {
var oldFont = this._font;
this._font = new web2d.Font(family, this);
this._font.setSize(oldFont.getSize());
this._font.setStyle(oldFont.getStyle());
this._font.setWeight(oldFont.getWeight());
this._updateFontStyle();
},
getFont : function () {
return {
font:this._font.getFont(),
size:parseInt(this._font.getSize()),
style:this._font.getStyle(),
weight:this._font.getWeight()
};
},
setSize : function (size) {
2009-06-07 20:59:43 +02:00
this._font.setSize(size);
2011-08-30 19:21:55 +02:00
this._updateFontStyle();
},
getWidth : function () {
var computedWidth = this._native.getBBox().width;
var width = parseInt(computedWidth);
width = width + this._font.getWidthMargin();
return width;
},
getHeight : function () {
var computedHeight = this._native.getBBox().height;
return parseInt(computedHeight);
},
getHtmlFontSize : function () {
return this._font.getHtmlSize();
2009-06-07 20:59:43 +02:00
}
2011-08-30 19:21:55 +02:00
});
2009-06-07 20:59:43 +02:00