/* * 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. */ 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(); }, setContentSize : function(width, height) { this._native.xTextSize = width.toFixed(1) + "," + height.toFixed(1); }, setStyle : function (style) { this._font.setStyle(style); this._updateFontStyle(); }, setWeight : function (weight) { this._font.setWeight(weight); 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) { this._font.setSize(size); 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(); } });