Changeset 7810
- Timestamp:
- 03/27/07 14:02:16 (20 months ago)
- Location:
- trunk
- Files:
-
- 1 added
- 4 modified
-
src/gfx/common.js (modified) (3 diffs)
-
src/gfx/shape.js (modified) (1 diff)
-
src/gfx/svg.js (modified) (3 diffs)
-
src/gfx/vml.js (modified) (8 diffs)
-
tests/gfx/test_linestyle.html (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gfx/common.js
r7176 r7810 5 5 dojo.require("dojo.lang.extras"); 6 6 dojo.require("dojo.dom"); 7 dojo.require("dojo.html.metrics"); 7 8 8 9 dojo.lang.mixin(dojo.gfx, { … … 23 24 24 25 // default geometric attributes 25 defaultStroke: {type: "stroke", color: "black", width: 1, cap: "butt", join: 4},26 defaultStroke: {type: "stroke", color: "black", style: "solid", width: 1, cap: "butt", join: 4}, 26 27 defaultLinearGradient: {type: "linear", x1: 0, y1: 0, x2: 100, y2: 100, 27 28 colors: [{offset: 0, color: "black"}, {offset: 1, color: "white"}]}, … … 116 117 return font; // Object 117 118 }, 119 // length operations 120 cm_in_pt: 72 / 2.54, // Number: centimeters per inch 121 mm_in_pt: 7.2 / 2.54, // Number: millimeters per inch 122 px_in_pt: function(){ 123 // summary: returns a number of pixels per point 124 return dojo.html.getCachedFontMeasurements()["12pt"] / 12; // Number 125 }, 126 pt2px: function(len){ 127 // summary: converts points to pixels 128 // len: Number: a value in points 129 return len * dojo.gfx.px_in_pt(); // Number 130 }, 131 px2pt: function(len){ 132 // summary: converts pixels to points 133 // len: Number: a value in pixels 134 return len / dojo.gfx.px_in_pt(); // Number 135 }, 136 normalizedLength: function(len) { 137 // summary: converts any length value to pixels 138 // len: String: a length, e.g., "12pc" 139 if(len.length == 0) return 0; 140 if(len.length > 2){ 141 var px_in_pt = dojo.gfx.px_in_pt(); 142 var val = parseFloat(len); 143 switch(len.slice(-2)){ 144 case "px": return val; 145 case "pt": return val * px_in_pt; 146 case "in": return val * 72 * px_in_pt; 147 case "pc": return val * 12 * px_in_pt; 148 case "mm": return val / dojo.gfx.mm_in_pt * px_in_pt; 149 case "cm": return val / dojo.gfx.cm_in_pt * px_in_pt; 150 } 151 } 152 return parseFloat(len); // Number 153 }, 118 154 119 155 // a constant used to split a SVG/VML path into primitive components -
trunk/src/gfx/shape.js
r7772 r7810 437 437 dojo.gfx.makeParameters(dojo.gfx.defaultFont, newFont); 438 438 this._setFont(); 439 } 440 }); 439 return this; // self 440 } 441 }); -
trunk/src/gfx/svg.js
r7772 r7810 25 25 } 26 26 return null; // Node 27 }; 28 29 dojo.gfx.svg.dasharray = { 30 solid: "none", 31 shortdash: [4, 1], 32 shortdot: [1, 1], 33 shortdashdot: [4, 1, 1, 1], 34 shortdashdotdot: [4, 1, 1, 1, 1, 1], 35 dot: [1, 3], 36 dash: [4, 3], 37 longdash: [8, 3], 38 dashdot: [4, 3, 1, 3], 39 longdashdot: [8, 3, 1, 3], 40 longdashdotdot: [8, 3, 1, 3, 1, 3] 27 41 }; 28 42 … … 112 126 rn.setAttribute("stroke-linejoin", s.join); 113 127 } 128 var da = s.style.toLowerCase(); 129 if(da in dojo.gfx.svg.dasharray){ da = dojo.gfx.svg.dasharray[da]; } 130 if(da instanceof Array){ 131 for(var i = 0; i < da.length; ++i){ 132 da[i] *= s.width; 133 } 134 if(s.cap != "butt"){ 135 for(var i = 0; i < da.length; i += 2){ 136 da[i] -= s.width; 137 if(da[i] < 1){ da[i] = 1; } 138 } 139 for(var i = 1; i < da.length; i += 2){ 140 da[i] += s.width; 141 } 142 } 143 da = da.join(","); 144 } 145 rn.setAttribute("stroke-dasharray", da); 146 rn.setAttribute("dojoGfxStrokeStyle", s.style); 114 147 } 115 148 return this; // self … … 309 342 strokeStyle.join = rawNode.getAttribute("stroke-miterlimit"); 310 343 } 344 strokeStyle.style = rawNode.getAttribute("dojoGfxStrokeStyle"); 311 345 } 312 346 return strokeStyle; // Object -
trunk/src/gfx/vml.js
r7402 r7810 6 6 dojo.require("dojo.lang.extras"); 7 7 dojo.require("dojo.string.*"); 8 dojo.require("dojo.html.metrics");9 8 10 9 dojo.require("dojo.gfx.color"); … … 144 143 if(f.width && f.height){ 145 144 // in points 146 fo.size.x = dojo.gfx. vml.px2pt(f.width);147 fo.size.y = dojo.gfx. vml.px2pt(f.height);145 fo.size.x = dojo.gfx.px2pt(f.width); 146 fo.size.y = dojo.gfx.px2pt(f.height); 148 147 } 149 148 fo.alignShape = false; … … 198 197 // rn.stroke.miterlimit = s.width; 199 198 } 199 rn.stroke.dashstyle = s.style == "none" ? "Solid" : s.style; 200 200 } 201 201 return this; // self … … 289 289 }else if(fo.on && fo.type == "tile"){ 290 290 var fillStyle = dojo.lang.shallowCopy(dojo.gfx.defaultPattern, true); 291 fillStyle.width = dojo.gfx. vml.pt2px(fo.size.x); // from pt292 fillStyle.height = dojo.gfx. vml.pt2px(fo.size.y); // from pt291 fillStyle.width = dojo.gfx.pt2px(fo.size.x); // from pt 292 fillStyle.height = dojo.gfx.pt2px(fo.size.y); // from pt 293 293 fillStyle.x = fo.origin.x * fillStyle.width; 294 294 fillStyle.y = fo.origin.y * fillStyle.height; … … 310 310 strokeStyle.color = new dojo.gfx.color.Color(rawNode.strokecolor.value); 311 311 dojo.debug("We are expecting an .75pt here, instead of strokeweight = " + rawNode.strokeweight ); 312 strokeStyle.width = dojo.gfx. vml.normalizedLength(rawNode.strokeweight+"");312 strokeStyle.width = dojo.gfx.normalizedLength(rawNode.strokeweight+""); 313 313 strokeStyle.color.a = rawNode.stroke.opacity; 314 314 strokeStyle.cap = this._translate(this._capMapReversed, rawNode.stroke.endcap); 315 315 strokeStyle.join = rawNode.stroke.joinstyle == "miter" ? rawNode.stroke.miterlimit : rawNode.stroke.joinstyle; 316 strokeStyle.style = rawNode.stroke.dashstyle; 316 317 }else{ 317 318 return null; … … 330 331 matrix.yx = s.matrix.xtoy; 331 332 matrix.yy = s.matrix.ytoy; 332 matrix.dx = dojo.gfx. vml.pt2px(s.offset.x);333 matrix.dy = dojo.gfx. vml.pt2px(s.offset.y);333 matrix.dx = dojo.gfx.pt2px(s.offset.x); 334 matrix.dy = dojo.gfx.pt2px(s.offset.y); 334 335 } 335 336 return dojo.gfx.matrix.normalize(matrix); // dojo.gfx.matrix.Matrix … … 850 851 // see comments in _getRealMatrix() 851 852 if(matrix){ 852 matrix = dojo.gfx.matrix.multiply(matrix, {dy: dojo.gfx. vml.normalizedLength(this.fontStyle.size) * 0.35});853 matrix = dojo.gfx.matrix.multiply(matrix, {dy: dojo.gfx.normalizedLength(this.fontStyle.size) * 0.35}); 853 854 } 854 855 return matrix; // dojo.gfx.Matrix2D … … 864 865 if(matrix){ 865 866 matrix = dojo.gfx.matrix.multiply(matrix, 866 {dy: -dojo.gfx. vml.normalizedLength(this.fontStyle ? this.fontStyle.size : "10pt") * 0.35});867 {dy: -dojo.gfx.normalizedLength(this.fontStyle ? this.fontStyle.size : "10pt") * 0.35}); 867 868 } 868 869 return matrix; // dojo.gfx.Matrix2D