aboutsummaryrefslogtreecommitdiff
path: root/assets/canvas-runtime.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/canvas-runtime.js')
-rw-r--r--assets/canvas-runtime.js44
1 files changed, 41 insertions, 3 deletions
diff --git a/assets/canvas-runtime.js b/assets/canvas-runtime.js
index fe5f839c..6268f0bb 100644
--- a/assets/canvas-runtime.js
+++ b/assets/canvas-runtime.js
@@ -1969,7 +1969,8 @@ NinjaCvsRt.RuntimeSubPath = Object.create(NinjaCvsRt.RuntimeGeomObj, {
1969 if (ipColor.gradientMode){ 1969 if (ipColor.gradientMode){
1970 var position, gradient, cs, inset; //vars used in gradient calculations 1970 var position, gradient, cs, inset; //vars used in gradient calculations
1971 inset = Math.ceil( lw ) - 0.5; 1971 inset = Math.ceil( lw ) - 0.5;
1972 1972 inset=0;
1973
1973 if(ipColor.gradientMode === "radial") { 1974 if(ipColor.gradientMode === "radial") {
1974 var ww = w - 2*lw, hh = h - 2*lw; 1975 var ww = w - 2*lw, hh = h - 2*lw;
1975 gradient = ctx.createRadialGradient(w/2, h/2, 0, w/2, h/2, Math.max(ww, hh)/2); 1976 gradient = ctx.createRadialGradient(w/2, h/2, 0, w/2, h/2, Math.max(ww, hh)/2);
@@ -2107,7 +2108,40 @@ NinjaCvsRt.RuntimeBrushStroke = Object.create(NinjaCvsRt.RuntimeGeomObj, {
2107 } 2108 }
2108 this._LocalPoints = newPoints.slice(0); 2109 this._LocalPoints = newPoints.slice(0);
2109 } 2110 }
2110 } 2111
2112 // *** compute the bounding box *********
2113 var BBoxMin = [Infinity, Infinity, Infinity];
2114 var BBoxMax = [-Infinity, -Infinity, -Infinity];
2115 if (numPoints === 0) {
2116 BBoxMin = [0, 0, 0];
2117 BBoxMax = [0, 0, 0];
2118 } else {
2119 for (var i=0;i<numPoints;i++){
2120 var pt = this._LocalPoints[i];
2121 for (var d = 0; d < 3; d++) {
2122 if (BBoxMin[d] > pt[d]) {
2123 BBoxMin[d] = pt[d];
2124 }
2125 if (BBoxMax[d] < pt[d]) {
2126 BBoxMax[d] = pt[d];
2127 }
2128 }//for every dimension d from 0 to 2
2129 }
2130 }
2131
2132 //increase the bbox given the stroke width and the angle (in case of calligraphic brush)
2133 var bboxPadding = this._strokeWidth*0.5;
2134 for (var d = 0; d < 3; d++) {
2135 BBoxMin[d]-= bboxPadding;
2136 BBoxMax[d]+= bboxPadding;
2137 }//for every dimension d from 0 to 2
2138
2139 //******* update the local coords so that the bbox min is at the origin ******
2140 for (var i=0;i<numPoints;i++) {
2141 this._LocalPoints[i][0]-= BBoxMin[0];
2142 this._LocalPoints[i][1]-= BBoxMin[1];
2143 }
2144 }//if we need to do smoothing
2111 } 2145 }
2112 }, 2146 },
2113 2147
@@ -2148,6 +2182,7 @@ NinjaCvsRt.RuntimeBrushStroke = Object.create(NinjaCvsRt.RuntimeGeomObj, {
2148 if (ipColor.gradientMode){ 2182 if (ipColor.gradientMode){
2149 var position, gradient, cs, inset; //vars used in gradient calculations 2183 var position, gradient, cs, inset; //vars used in gradient calculations
2150 inset = Math.ceil( lw ) - 0.5; 2184 inset = Math.ceil( lw ) - 0.5;
2185 inset=0;
2151 2186
2152 if(ipColor.gradientMode === "radial") { 2187 if(ipColor.gradientMode === "radial") {
2153 var ww = w - 2*lw, hh = h - 2*lw; 2188 var ww = w - 2*lw, hh = h - 2*lw;
@@ -2231,7 +2266,10 @@ NinjaCvsRt.RuntimeBrushStroke = Object.create(NinjaCvsRt.RuntimeGeomObj, {
2231 var disp = [brushStamp[t][0], brushStamp[t][1]]; 2266 var disp = [brushStamp[t][0], brushStamp[t][1]];
2232 var alphaVal = 1.0; 2267 var alphaVal = 1.0;
2233 var distFromOpaqueRegion = Math.abs(t-halfNumTraces) - opaqueRegionHalfWidth; 2268 var distFromOpaqueRegion = Math.abs(t-halfNumTraces) - opaqueRegionHalfWidth;
2234 if (distFromOpaqueRegion>0) { 2269 if (numTraces === 1){
2270 distFromOpaqueRegion = 0;
2271 }
2272 else if (distFromOpaqueRegion>0) {
2235 var transparencyFactor = distFromOpaqueRegion/maxTransparentRegionHalfWidth; 2273 var transparencyFactor = distFromOpaqueRegion/maxTransparentRegionHalfWidth;
2236 alphaVal = 1.0 - transparencyFactor;//(transparencyFactor*transparencyFactor);//the square term produces nonlinearly varying alpha values 2274 alphaVal = 1.0 - transparencyFactor;//(transparencyFactor*transparencyFactor);//the square term produces nonlinearly varying alpha values
2237 alphaVal *= 0.5; //factor that accounts for lineWidth == 2 2275 alphaVal *= 0.5; //factor that accounts for lineWidth == 2