123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 |
- if (!dojo._hasResource["dojox.gfx._base"]) { // _hasResource checks added by
- // build. Do not use
- // _hasResource directly in your
- // code.
- dojo._hasResource["dojox.gfx._base"] = true;
- dojo.provide("dojox.gfx._base");
- // candidates for dojox.style (work on VML and SVG nodes)
- dojox.gfx._hasClass = function(/* DomNode */node, /* String */classStr) {
- // summary:
- // Returns whether or not the specified classes are a portion of the
- // class list currently applied to the node.
- // return (new
- // RegExp('(^|\\s+)'+classStr+'(\\s+|$)')).test(node.className) //
- // Boolean
- return ((" " + node.getAttribute("className") + " ").indexOf(" "
- + classStr + " ") >= 0); // Boolean
- }
- dojox.gfx._addClass = function(/* DomNode */node, /* String */classStr) {
- // summary:
- // Adds the specified classes to the end of the class list on the
- // passed node.
- var cls = node.getAttribute("className");
- if ((" " + cls + " ").indexOf(" " + classStr + " ") < 0) {
- node.setAttribute("className", cls + (cls ? ' ' : '') + classStr);
- }
- }
- dojox.gfx._removeClass = function(/* DomNode */node, /* String */classStr) {
- // summary: Removes classes from node.
- node
- .setAttribute("className", node.getAttribute("className")
- .replace(
- new RegExp('(^|\\s+)' + classStr
- + '(\\s+|$)'), "$1$2"));
- }
- // candidate for dojox.html.metrics (dynamic font resize handler is not
- // implemented here)
- // derived from Morris John's emResized measurer
- dojox.gfx._base._getFontMeasurements = function() {
- // summary
- // Returns an object that has pixel equivilents of standard font size
- // values.
- var heights = {
- '1em' : 0,
- '1ex' : 0,
- '100%' : 0,
- '12pt' : 0,
- '16px' : 0,
- 'xx-small' : 0,
- 'x-small' : 0,
- 'small' : 0,
- 'medium' : 0,
- 'large' : 0,
- 'x-large' : 0,
- 'xx-large' : 0
- };
- if (dojo.isIE) {
- // we do a font-size fix if and only if one isn't applied already.
- // NOTE: If someone set the fontSize on the HTML Element, this will
- // kill it.
- dojo.doc.documentElement.style.fontSize = "100%";
- }
- // set up the measuring node.
- var div = dojo.doc.createElement("div");
- div.style.position = "absolute";
- div.style.left = "-100px";
- div.style.top = "0";
- div.style.width = "30px";
- div.style.height = "1000em";
- div.style.border = "0";
- div.style.margin = "0";
- div.style.padding = "0";
- div.style.outline = "0";
- div.style.lineHeight = "1";
- div.style.overflow = "hidden";
- dojo.body().appendChild(div);
- // do the measurements.
- for (var p in heights) {
- div.style.fontSize = p;
- heights[p] = Math.round(div.offsetHeight * 12 / 16) * 16 / 12
- / 1000;
- }
- dojo.body().removeChild(div);
- div = null;
- return heights; // object
- };
- dojox.gfx._base._fontMeasurements = null;
- dojox.gfx._base._getCachedFontMeasurements = function(recalculate) {
- if (recalculate || !dojox.gfx._base._fontMeasurements) {
- dojox.gfx._base._fontMeasurements = dojox.gfx._base
- ._getFontMeasurements();
- }
- return dojox.gfx._base._fontMeasurements;
- };
- // candidate for dojo.dom
- dojox.gfx._base._uniqueId = 0;
- dojox.gfx._base._getUniqueId = function() {
- // summary: returns a unique string for use with any DOM element
- var id;
- do {
- id = "dojoUnique" + (++dojox.gfx._base._uniqueId);
- } while (dojo.byId(id));
- return id;
- };
- dojo.mixin(dojox.gfx, {
- // summary: defines constants, prototypes, and utility functions
- // default shapes, which are used to fill in missing parameters
- defaultPath : {
- type : "path",
- path : ""
- },
- defaultPolyline : {
- type : "polyline",
- points : []
- },
- defaultRect : {
- type : "rect",
- x : 0,
- y : 0,
- width : 100,
- height : 100,
- r : 0
- },
- defaultEllipse : {
- type : "ellipse",
- cx : 0,
- cy : 0,
- rx : 200,
- ry : 100
- },
- defaultCircle : {
- type : "circle",
- cx : 0,
- cy : 0,
- r : 100
- },
- defaultLine : {
- type : "line",
- x1 : 0,
- y1 : 0,
- x2 : 100,
- y2 : 100
- },
- defaultImage : {
- type : "image",
- x : 0,
- y : 0,
- width : 0,
- height : 0,
- src : ""
- },
- defaultText : {
- type : "text",
- x : 0,
- y : 0,
- text : "",
- align : "start",
- decoration : "none",
- rotated : false,
- kerning : true
- },
- defaultTextPath : {
- type : "textpath",
- text : "",
- align : "start",
- decoration : "none",
- rotated : false,
- kerning : true
- },
- // default geometric attributes
- defaultStroke : {
- type : "stroke",
- color : "black",
- style : "solid",
- width : 1,
- cap : "butt",
- join : 4
- },
- defaultLinearGradient : {
- type : "linear",
- x1 : 0,
- y1 : 0,
- x2 : 100,
- y2 : 100,
- colors : [{
- offset : 0,
- color : "black"
- }, {
- offset : 1,
- color : "white"
- }]
- },
- defaultRadialGradient : {
- type : "radial",
- cx : 0,
- cy : 0,
- r : 100,
- colors : [{
- offset : 0,
- color : "black"
- }, {
- offset : 1,
- color : "white"
- }]
- },
- defaultPattern : {
- type : "pattern",
- x : 0,
- y : 0,
- width : 0,
- height : 0,
- src : ""
- },
- defaultFont : {
- type : "font",
- style : "normal",
- variant : "normal",
- weight : "normal",
- size : "10pt",
- family : "serif"
- },
- normalizeColor : function(/* Color */color) {
- // summary: converts any legal color representation to normalized
- // dojo.Color object
- return (color instanceof dojo.Color)
- ? color
- : new dojo.Color(color); // dojo.Color
- },
- normalizeParameters : function(existed, update) {
- // summary: updates an existing object with properties from an
- // "update" object
- // existed: Object: the "target" object to be updated
- // update: Object: the "update" object, whose properties will be
- // used to update the existed object
- if (update) {
- var empty = {};
- for (var x in existed) {
- if (x in update && !(x in empty)) {
- existed[x] = update[x];
- }
- }
- }
- return existed; // Object
- },
- makeParameters : function(defaults, update) {
- // summary: copies the original object, and all copied properties
- // from the "update" object
- // defaults: Object: the object to be cloned before updating
- // update: Object: the object, which properties are to be cloned
- // during updating
- if (!update)
- return dojo.clone(defaults);
- var result = {};
- for (var i in defaults) {
- if (!(i in result)) {
- result[i] = dojo.clone((i in update)
- ? update[i]
- : defaults[i]);
- }
- }
- return result; // Object
- },
- formatNumber : function(x, addSpace) {
- // summary: converts a number to a string using a fixed notation
- // x: Number: number to be converted
- // addSpace: Boolean?: if it is true, add a space before a positive
- // number
- var val = x.toString();
- if (val.indexOf("e") >= 0) {
- val = x.toFixed(4);
- } else {
- var point = val.indexOf(".");
- if (point >= 0 && val.length - point > 5) {
- val = x.toFixed(4);
- }
- }
- if (x < 0) {
- return val; // String
- }
- return addSpace ? " " + val : val; // String
- },
- // font operations
- makeFontString : function(font) {
- // summary: converts a font object to a CSS font string
- // font: Object: font object (see dojox.gfx.defaultFont)
- return font.style + " " + font.variant + " " + font.weight + " "
- + font.size + " " + font.family; // Object
- },
- splitFontString : function(str) {
- // summary: converts a CSS font string to a font object
- // str: String: a CSS font string
- var font = dojo.clone(dojox.gfx.defaultFont);
- var t = str.split(/\s+/);
- do {
- if (t.length < 5) {
- break;
- }
- font.style = t[0];
- font.varian = t[1];
- font.weight = t[2];
- var i = t[3].indexOf("/");
- font.size = i < 0 ? t[3] : t[3].substring(0, i);
- var j = 4;
- if (i < 0) {
- if (t[4] == "/") {
- j = 6;
- break;
- }
- if (t[4].substr(0, 1) == "/") {
- j = 5;
- break;
- }
- }
- if (j + 3 > t.length) {
- break;
- }
- font.size = t[j];
- font.family = t[j + 1];
- } while (false);
- return font; // Object
- },
- // length operations
- cm_in_pt : 72 / 2.54, // Number: centimeters per inch
- mm_in_pt : 7.2 / 2.54, // Number: millimeters per inch
- px_in_pt : function() {
- // summary: returns a number of pixels per point
- return dojox.gfx._base._getCachedFontMeasurements()["12pt"] / 12; // Number
- },
- pt2px : function(len) {
- // summary: converts points to pixels
- // len: Number: a value in points
- return len * dojox.gfx.px_in_pt(); // Number
- },
- px2pt : function(len) {
- // summary: converts pixels to points
- // len: Number: a value in pixels
- return len / dojox.gfx.px_in_pt(); // Number
- },
- normalizedLength : function(len) {
- // summary: converts any length value to pixels
- // len: String: a length, e.g., "12pc"
- if (len.length == 0)
- return 0;
- if (len.length > 2) {
- var px_in_pt = dojox.gfx.px_in_pt();
- var val = parseFloat(len);
- switch (len.slice(-2)) {
- case "px" :
- return val;
- case "pt" :
- return val * px_in_pt;
- case "in" :
- return val * 72 * px_in_pt;
- case "pc" :
- return val * 12 * px_in_pt;
- case "mm" :
- return val / dojox.gfx.mm_in_pt * px_in_pt;
- case "cm" :
- return val / dojox.gfx.cm_in_pt * px_in_pt;
- }
- }
- return parseFloat(len); // Number
- },
- // a constant used to split a SVG/VML path into primitive components
- pathVmlRegExp : /([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
- pathSvgRegExp : /([A-Za-z])|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
- equalSources : function(a, b) {
- // summary: compares event sources, returns true if they are equal
- return a && b && a == b;
- }
- });
- }
|