diff --git a/src/style/Color.js b/src/style/Color.js index ac4524ac..9376414c 100644 --- a/src/style/Color.js +++ b/src/style/Color.js @@ -571,8 +571,7 @@ var Color = this.Color = Base.extend(new function() { * Called by various setters whenever a color value changes */ _changed: function() { - this._css = null; - this._canvasGradient = null; + this._canvasStyle = null; if (this._owner) this._owner._changed(/*#=*/ Change.STYLE); }, @@ -706,33 +705,26 @@ var Color = this.Color = Base.extend(new function() { * @return {String} A css string representation of the color. */ toCss: function(noAlpha) { - var css = this._css; - // Only cache _css value if we're not ommiting alpha, as required - // by SVG export. - if (!css || noAlpha) { - var components = this._convert('rgb'), - alpha = noAlpha || this._alpha == null ? 1 : this._alpha; - components = [ - Math.round(components[0] * 255), - Math.round(components[1] * 255), - Math.round(components[2] * 255) - ]; - if (alpha < 1) - components.push(alpha); - var css = (components.length == 4 ? 'rgba(' : 'rgb(') - + components.join(', ') + ')'; - if (!noAlpha) - this._css = css; - } - return css; + var components = this._convert('rgb'), + alpha = noAlpha || this._alpha == null ? 1 : this._alpha; + components = [ + Math.round(components[0] * 255), + Math.round(components[1] * 255), + Math.round(components[2] * 255) + ]; + if (alpha < 1) + components.push(alpha); + return (components.length == 4 ? 'rgba(' : 'rgb(') + + components.join(', ') + ')'; }, toCanvasStyle: function(ctx) { + if (this._canvasStyle) + return this._canvasStyle; + // Normal colors are simply represented by their css string. if (this._type !== 'gradient') - return this.toCss(); - // Gradient code form here onwards, incudling caching - if (this._canvasGradient) - return this._canvasGradient; + return this._canvasStyle = this.toCss(); + // Gradient code form here onwards var components = this._components, gradient = components[0], stops = gradient._stops, @@ -756,9 +748,10 @@ var Color = this.Color = Base.extend(new function() { } for (var i = 0, l = stops.length; i < l; i++) { var stop = stops[i]; - canvasGradient.addColorStop(stop._rampPoint, stop._color.toCss()); + canvasGradient.addColorStop(stop._rampPoint, + stop._color.toCanvasStyle()); } - return this._canvasGradient = canvasGradient; + return this._canvasStyle = canvasGradient; }, /** @@ -773,6 +766,7 @@ var Color = this.Color = Base.extend(new function() { var point = components[i]; matrix._transformPoint(point, point, true); } + this._changed(); } },