mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-01 02:38:43 -05:00
Switch back to only one Gradient constructor for both linear and radial Gradients.
This commit is contained in:
parent
93437010aa
commit
9cdc4b9372
12 changed files with 41 additions and 65 deletions
|
@ -7,7 +7,7 @@
|
||||||
<script type="text/javascript" src="../../dist/paper.js"></script>
|
<script type="text/javascript" src="../../dist/paper.js"></script>
|
||||||
<script type="text/paperscript" canvas="canvas1">
|
<script type="text/paperscript" canvas="canvas1">
|
||||||
var path = new Path.Circle(view.center, view.bounds.height * 0.4);
|
var path = new Path.Circle(view.center, view.bounds.height * 0.4);
|
||||||
var gradient = new RadialGradient('yellow', 'red', 'black');
|
var gradient = new Gradient(['yellow', 'red', 'black'], true);
|
||||||
var from = path.position;
|
var from = path.position;
|
||||||
var to = path.bounds.rightCenter;
|
var to = path.bounds.rightCenter;
|
||||||
var gradientColor = new GradientColor(gradient, from, to);
|
var gradientColor = new GradientColor(gradient, from, to);
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
saturation: 1,
|
saturation: 1,
|
||||||
brightness: 1
|
brightness: 1
|
||||||
};
|
};
|
||||||
var gradient = new RadialGradient(color, 'black');
|
var gradient = new Gradient([color, 'black'], true);
|
||||||
|
|
||||||
var radius = this.radius = 50 * Math.random() + 30;
|
var radius = this.radius = 50 * Math.random() + 30;
|
||||||
this.item = new CompoundPath({
|
this.item = new CompoundPath({
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
var path = new Path.Rectangle(view.bounds);
|
var path = new Path.Rectangle(view.bounds);
|
||||||
var gradient = new RadialGradient(colors);
|
var gradient = new Gradient(colors, true);
|
||||||
var radius = Math.max(view.size.width, view.size.height) * 0.75;
|
var radius = Math.max(view.size.width, view.size.height) * 0.75;
|
||||||
path.fillColor = new GradientColor(gradient, point, point + [radius, 0]);
|
path.fillColor = new GradientColor(gradient, point, point + [radius, 0]);
|
||||||
var gradientColor = path.fillColor;
|
var gradientColor = path.fillColor;
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<link rel="stylesheet" href="../css/style.css">
|
<link rel="stylesheet" href="../css/style.css">
|
||||||
<script type="text/javascript" src="../../dist/paper.js"></script>
|
<script type="text/javascript" src="../../dist/paper.js"></script>
|
||||||
<script type="text/paperscript" canvas="canvas">
|
<script type="text/paperscript" canvas="canvas">
|
||||||
var radial = new RadialGradient(new Color(1, 1, 0, 0), 'red', 'black');
|
var radial = new Gradient([new Color(1, 1, 0, 0), 'red', 'black'], true);
|
||||||
var linear = new LinearGradient(new Color(1, 1, 0, 0), 'red', 'black');
|
var linear = new Gradient([new Color(1, 1, 0, 0), 'red', 'black'], false);
|
||||||
|
|
||||||
var radius = view.bounds.width * 0.4,
|
var radius = view.bounds.width * 0.4,
|
||||||
from = new Point(view.center.x),
|
from = new Point(view.center.x),
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
var color = { hue: hue, saturation: saturation, lightness: lightness };
|
var color = { hue: hue, saturation: saturation, lightness: lightness };
|
||||||
colors.push(color);
|
colors.push(color);
|
||||||
}
|
}
|
||||||
var gradient = new RadialGradient(colors);
|
var gradient = new Gradient(colors, true);
|
||||||
var from = center;
|
var from = center;
|
||||||
var to = center + vector;
|
var to = center + vector;
|
||||||
var gradientColor = new GradientColor(gradient, from, to);
|
var gradientColor = new GradientColor(gradient, from, to);
|
||||||
|
|
|
@ -16,16 +16,15 @@
|
||||||
* @class The Gradient object.
|
* @class The Gradient object.
|
||||||
*/
|
*/
|
||||||
var Gradient = this.Gradient = Base.extend(/** @lends Gradient# */{
|
var Gradient = this.Gradient = Base.extend(/** @lends Gradient# */{
|
||||||
|
_class: 'Gradient',
|
||||||
|
|
||||||
initialize: function(stops, _type) {
|
initialize: function(stops, radial) {
|
||||||
// Keep supporting the old way of creating gradients for the time being.
|
|
||||||
if (this.constructor === Gradient)
|
|
||||||
return new (_type === 'radial' ? RadialGradient : LinearGradient)(
|
|
||||||
stops);
|
|
||||||
// Define this Gradient's unique id.
|
// Define this Gradient's unique id.
|
||||||
this._id = ++Base._uid;
|
this._id = ++Base._uid;
|
||||||
this.setStops((arguments.length > 1 ? arguments : stops)
|
this.setStops(stops || ['white', 'black']);
|
||||||
|| ['white', 'black']);
|
// Support old version of string type argument and new radial boolean.
|
||||||
|
this.setRadial(typeof radial === 'string' && radial === 'radial'
|
||||||
|
|| radial || false);
|
||||||
},
|
},
|
||||||
|
|
||||||
_serialize: function(options, dictionary) {
|
_serialize: function(options, dictionary) {
|
||||||
|
@ -63,7 +62,7 @@ var Gradient = this.Gradient = Base.extend(/** @lends Gradient# */{
|
||||||
var index = this._owners ? this._owners.indexOf(color) : -1;
|
var index = this._owners ? this._owners.indexOf(color) : -1;
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
this._owners.splice(index, 1);
|
this._owners.splice(index, 1);
|
||||||
if (this._owners.length == 0)
|
if (this._owners.length === 0)
|
||||||
delete this._owners;
|
delete this._owners;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -109,6 +108,15 @@ var Gradient = this.Gradient = Base.extend(/** @lends Gradient# */{
|
||||||
this._changed();
|
this._changed();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getRadial: function() {
|
||||||
|
return this._radial;
|
||||||
|
},
|
||||||
|
|
||||||
|
setRadial: function(radial) {
|
||||||
|
this._radial = radial;
|
||||||
|
this._changed();
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the gradient is equal to the supplied gradient.
|
* Checks whether the gradient is equal to the supplied gradient.
|
||||||
*
|
*
|
||||||
|
@ -127,35 +135,3 @@ var Gradient = this.Gradient = Base.extend(/** @lends Gradient# */{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @name LinearGradient
|
|
||||||
*
|
|
||||||
* @class The LinearGradient object.
|
|
||||||
*/
|
|
||||||
var LinearGradient = this.LinearGradient = Gradient.extend(/** @lends LinearGradient# */{
|
|
||||||
_type: 'LinearGradient'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a linear gradient object
|
|
||||||
*
|
|
||||||
* @name LinearGradient#initialize
|
|
||||||
* @param {GradientStop[]} stops
|
|
||||||
*/
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @name RadialGradient
|
|
||||||
*
|
|
||||||
* @class The RadialGradient object.
|
|
||||||
*/
|
|
||||||
var RadialGradient = this.RadialGradient = Gradient.extend(/** @lends RadialGradient# */{
|
|
||||||
_type: 'RadialGradient'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a radial gradient object
|
|
||||||
*
|
|
||||||
* @name RadialGradient#initialize
|
|
||||||
* @param {GradientStop[]} stops
|
|
||||||
*/
|
|
||||||
});
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ var GradientColor = this.GradientColor = Color.extend(/** @lends GradientColor#
|
||||||
*
|
*
|
||||||
* // Create the gradient, passing it an array of colors to be converted
|
* // Create the gradient, passing it an array of colors to be converted
|
||||||
* // to evenly distributed color stops:
|
* // to evenly distributed color stops:
|
||||||
* var gradient = new LinearGradient('yellow', 'red', 'blue');
|
* var gradient = new Gradient(['yellow', 'red', 'blue']);
|
||||||
*
|
*
|
||||||
* // Have the gradient color run between the topLeft and
|
* // Have the gradient color run between the topLeft and
|
||||||
* // bottomRight points we defined earlier:
|
* // bottomRight points we defined earlier:
|
||||||
|
@ -66,7 +66,7 @@ var GradientColor = this.GradientColor = Color.extend(/** @lends GradientColor#
|
||||||
* var stops = [['yellow', 0], ['red', 0.15], ['red', 0.3], ['black', 0.9]];
|
* var stops = [['yellow', 0], ['red', 0.15], ['red', 0.3], ['black', 0.9]];
|
||||||
*
|
*
|
||||||
* // Create a radial gradient using the color stops array:
|
* // Create a radial gradient using the color stops array:
|
||||||
* var gradient = new RadialGradient(stops);
|
* var gradient = new Gradient(stops, true);
|
||||||
*
|
*
|
||||||
* // We will use the center point of the circle shaped path as
|
* // We will use the center point of the circle shaped path as
|
||||||
* // the origin point for our gradient color
|
* // the origin point for our gradient color
|
||||||
|
@ -87,7 +87,7 @@ var GradientColor = this.GradientColor = Color.extend(/** @lends GradientColor#
|
||||||
this._id = ++Base._uid;
|
this._id = ++Base._uid;
|
||||||
// Try object literal constructor first
|
// Try object literal constructor first
|
||||||
if (!this._set(gradient)) {
|
if (!this._set(gradient)) {
|
||||||
this.setGradient(gradient || new LinearGradient());
|
this.setGradient(gradient || new Gradient());
|
||||||
this.setOrigin(origin);
|
this.setOrigin(origin);
|
||||||
this.setDestination(destination);
|
this.setDestination(destination);
|
||||||
if (hilite)
|
if (hilite)
|
||||||
|
@ -139,7 +139,7 @@ var GradientColor = this.GradientColor = Color.extend(/** @lends GradientColor#
|
||||||
* // Create a rectangle shaped path with the same dimensions as
|
* // Create a rectangle shaped path with the same dimensions as
|
||||||
* // that of the view and fill it with a gradient color:
|
* // that of the view and fill it with a gradient color:
|
||||||
* var path = new Path.Rectangle(view.bounds);
|
* var path = new Path.Rectangle(view.bounds);
|
||||||
* var gradient = new LinearGradient('yellow', 'red', 'blue');
|
* var gradient = new Gradient(['yellow', 'red', 'blue']);
|
||||||
*
|
*
|
||||||
* // Have the gradient color run from the top left point of the view,
|
* // Have the gradient color run from the top left point of the view,
|
||||||
* // to the bottom right point of the view:
|
* // to the bottom right point of the view:
|
||||||
|
@ -185,7 +185,7 @@ var GradientColor = this.GradientColor = Color.extend(/** @lends GradientColor#
|
||||||
* radius: view.bounds.height * 0.4
|
* radius: view.bounds.height * 0.4
|
||||||
* });
|
* });
|
||||||
*
|
*
|
||||||
* var gradient = new RadialGradient('yellow', 'red', 'black');
|
* var gradient = new Gradient(['yellow', 'red', 'black'], true);
|
||||||
* var from = view.center;
|
* var from = view.center;
|
||||||
* var to = view.bounds.bottomRight;
|
* var to = view.bounds.bottomRight;
|
||||||
* var gradientColor = new GradientColor(gradient, from, to);
|
* var gradientColor = new GradientColor(gradient, from, to);
|
||||||
|
@ -223,7 +223,7 @@ var GradientColor = this.GradientColor = Color.extend(/** @lends GradientColor#
|
||||||
* radius: view.bounds.height * 0.4
|
* radius: view.bounds.height * 0.4
|
||||||
* });
|
* });
|
||||||
*
|
*
|
||||||
* var gradient = new RadialGradient('yellow', 'red', 'black');
|
* var gradient = new Gradient(['yellow', 'red', 'black'], true);
|
||||||
* var from = path.position;
|
* var from = path.position;
|
||||||
* var to = path.bounds.rightCenter;
|
* var to = path.bounds.rightCenter;
|
||||||
* var gradientColor = new GradientColor(gradient, from, to);
|
* var gradientColor = new GradientColor(gradient, from, to);
|
||||||
|
@ -255,13 +255,13 @@ var GradientColor = this.GradientColor = Color.extend(/** @lends GradientColor#
|
||||||
toCanvasStyle: function(ctx) {
|
toCanvasStyle: function(ctx) {
|
||||||
var gradient,
|
var gradient,
|
||||||
stops = this._gradient._stops;
|
stops = this._gradient._stops;
|
||||||
if (this._gradient._type === 'LinearGradient') {
|
if (this._gradient._radial) {
|
||||||
gradient = ctx.createLinearGradient(this._origin.x, this._origin.y,
|
|
||||||
this._destination.x, this._destination.y);
|
|
||||||
} else {
|
|
||||||
var origin = this._hilite || this._origin;
|
var origin = this._hilite || this._origin;
|
||||||
gradient = ctx.createRadialGradient(origin.x, origin.y,
|
gradient = ctx.createRadialGradient(origin.x, origin.y,
|
||||||
0, this._origin.x, this._origin.y, this._radius);
|
0, this._origin.x, this._origin.y, this._radius);
|
||||||
|
} else {
|
||||||
|
gradient = ctx.createLinearGradient(this._origin.x, this._origin.y,
|
||||||
|
this._destination.x, this._destination.y);
|
||||||
}
|
}
|
||||||
for (var i = 0, l = stops.length; i < l; i++) {
|
for (var i = 0, l = stops.length; i < l; i++) {
|
||||||
var stop = stops[i];
|
var stop = stops[i];
|
||||||
|
|
|
@ -89,7 +89,7 @@ var GradientStop = this.GradientStop = Base.extend(/** @lends GradientStop# */{
|
||||||
*
|
*
|
||||||
* // Prepare the gradient color and apply it to the path:
|
* // Prepare the gradient color and apply it to the path:
|
||||||
* var colors = [['yellow', 0.05], ['red', 0.2], ['black', 1]];
|
* var colors = [['yellow', 0.05], ['red', 0.2], ['black', 1]];
|
||||||
* var gradient = new RadialGradient(colors);
|
* var gradient = new Gradient(colors, true);
|
||||||
* var from = path.position;
|
* var from = path.position;
|
||||||
* var to = path.bounds.rightCenter;
|
* var to = path.bounds.rightCenter;
|
||||||
* var gradientColor = new GradientColor(gradient, from, to);
|
* var gradientColor = new GradientColor(gradient, from, to);
|
||||||
|
@ -135,7 +135,7 @@ var GradientStop = this.GradientStop = Base.extend(/** @lends GradientStop# */{
|
||||||
* });
|
* });
|
||||||
*
|
*
|
||||||
* // Create a radial gradient that mixes red and black evenly:
|
* // Create a radial gradient that mixes red and black evenly:
|
||||||
* var gradient = new RadialGradient('red', 'black');
|
* var gradient = new Gradient(['red', 'black'], true);
|
||||||
*
|
*
|
||||||
* // Fill the path with a gradient color that runs from its center,
|
* // Fill the path with a gradient color that runs from its center,
|
||||||
* // to the right center of its bounding rectangle:
|
* // to the right center of its bounding rectangle:
|
||||||
|
|
|
@ -342,13 +342,13 @@ new function() {
|
||||||
var gradientNode = getDefinition(color);
|
var gradientNode = getDefinition(color);
|
||||||
if (!gradientNode) {
|
if (!gradientNode) {
|
||||||
var gradient = color.gradient,
|
var gradient = color.gradient,
|
||||||
type = gradient._type,
|
radial = gradient._radial,
|
||||||
matrix = item._gradientMatrix,
|
matrix = item._gradientMatrix,
|
||||||
origin = color._origin.transform(matrix),
|
origin = color._origin.transform(matrix),
|
||||||
destination = color._destination.transform(matrix),
|
destination = color._destination.transform(matrix),
|
||||||
highlight = color._hilite && color._hilite.transform(matrix),
|
highlight = color._hilite && color._hilite.transform(matrix),
|
||||||
attrs;
|
attrs;
|
||||||
if (type == 'RadialGradient') {
|
if (radial) {
|
||||||
attrs = {
|
attrs = {
|
||||||
cx: origin.x,
|
cx: origin.x,
|
||||||
cy: origin.y,
|
cy: origin.y,
|
||||||
|
@ -367,8 +367,8 @@ new function() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
attrs.gradientUnits = 'userSpaceOnUse';
|
attrs.gradientUnits = 'userSpaceOnUse';
|
||||||
gradientNode = createElement(type[0].toLowerCase() + type.slice(1),
|
gradientNode = createElement(
|
||||||
attrs);
|
(radial ? 'radial' : 'linear') + 'Gradient', attrs);
|
||||||
var stops = gradient._stops;
|
var stops = gradient._stops;
|
||||||
for (var i = 0, l = stops.length; i < l; i++) {
|
for (var i = 0, l = stops.length; i < l; i++) {
|
||||||
var stop = stops[i],
|
var stop = stops[i],
|
||||||
|
|
|
@ -143,7 +143,7 @@ new function() {
|
||||||
stops.push(applyAttributes(new GradientStop(), child));
|
stops.push(applyAttributes(new GradientStop(), child));
|
||||||
}
|
}
|
||||||
var isRadial = type === 'radialGradient',
|
var isRadial = type === 'radialGradient',
|
||||||
gradient = new (isRadial ? RadialGradient : LinearGradient)(stops),
|
gradient = new Gradient(stops, isRadial),
|
||||||
origin, destination, highlight;
|
origin, destination, highlight;
|
||||||
if (isRadial) {
|
if (isRadial) {
|
||||||
origin = getPoint(node, 'cx', 'cy');
|
origin = getPoint(node, 'cx', 'cy');
|
||||||
|
|
|
@ -53,7 +53,7 @@ test('Path#clone()', function() {
|
||||||
|
|
||||||
test('Path#clone() with GradientColor', function() {
|
test('Path#clone() with GradientColor', function() {
|
||||||
var colors = ['red', 'green', 'black'];
|
var colors = ['red', 'green', 'black'];
|
||||||
var gradient = new RadialGradient(colors);
|
var gradient = new Gradient(colors, true);
|
||||||
var color = new GradientColor(gradient, [0, 0], [20, 20], [10, 10]);
|
var color = new GradientColor(gradient, [0, 0], [20, 20], [10, 10]);
|
||||||
|
|
||||||
var path = new Path([10, 20], [30, 40]);
|
var path = new Path([10, 20], [30, 40]);
|
||||||
|
|
|
@ -58,7 +58,7 @@ test('Empty Path', function() {
|
||||||
|
|
||||||
test('Gradients', function() {
|
test('Gradients', function() {
|
||||||
var path = new Path.Circle([100, 100], 40);
|
var path = new Path.Circle([100, 100], 40);
|
||||||
var gradient = new RadialGradient('yellow', 'red', 'black');
|
var gradient = new Gradient(['yellow', 'red', 'black'], true);
|
||||||
var from = path.position;
|
var from = path.position;
|
||||||
var to = path.bounds.rightCenter;
|
var to = path.bounds.rightCenter;
|
||||||
var gradientColor = new GradientColor(gradient, from, to);
|
var gradientColor = new GradientColor(gradient, from, to);
|
||||||
|
|
Loading…
Reference in a new issue