Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e9c9d96
Implement pad zero proof of concept
limzykenneth Nov 14, 2025
b12d6f9
Merge branch 'dev-2.0' into vector-pad-zero
limzykenneth Nov 28, 2025
80ac3cd
Merge branch 'dev-2.0' into vector-smaller-priority
limzykenneth Dec 1, 2025
124a60e
Vector use values property directly and calculate dimension
limzykenneth Dec 1, 2025
04a2f24
Implement vector smaller size priority
limzykenneth Dec 1, 2025
043e668
Merge remote-tracking branch 'og/dev-2.0' into vector-smaller-priority
ksen0 Jan 28, 2026
492b9e9
Vector decorator does not use Proxy
ksen0 Feb 6, 2026
93920ba
Abstract out vector format and dimension checks for binary vector ops
ksen0 Feb 6, 2026
f258b5e
Added tests
ksen0 Feb 18, 2026
346a2ac
Added benchmark tests
ksen0 Feb 25, 2026
7171ab9
Merge branch 'dev-2.0' into vector-smaller-priority
ksen0 Feb 25, 2026
e5df5f9
Updating tests for vectors - unit and bench
ksen0 Mar 4, 2026
613df14
Update vector documentation
ksen0 Mar 9, 2026
ce6a048
Operation logic in helpers
ksen0 Mar 12, 2026
a84505e
shared abstraction for vector validation
ksen0 Mar 18, 2026
b2c5185
Vector tests pass
ksen0 Mar 25, 2026
9a534d5
Merge branch 'dev-2.0' into vector-smaller-priority
ksen0 Mar 25, 2026
719b4bd
Update createVector doc
ksen0 Mar 25, 2026
32e351a
Prevent minification mangling from messing up decoration
limzykenneth Mar 25, 2026
b2a0972
Merge branch 'dev-2.0' into vector-smaller-priority
ksen0 Apr 8, 2026
01517db
Pass p5/FES into Vector and decorators
davepagurek Apr 10, 2026
2ea8587
Fix reference to
davepagurek Apr 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions src/core/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class p5 {
constructor(sketch, node) {
// Apply addon defined decorations
if(p5.decorations.size > 0){
decorateClass(p5, p5.decorations);
decorateClass(p5, p5.decorations, 'p5', p5);
p5.decorations.clear();
}

Expand Down Expand Up @@ -520,7 +520,7 @@ function createBindGlobal(instance) {
}

// Generic function to decorate classes
function decorateClass(Target, decorations, path){
function decorateClass(Target, decorations, path, p5){
path ??= Target.name;
// Static properties
for(const key in Target){
Expand All @@ -532,7 +532,8 @@ function decorateClass(Target, decorations, path){
const result = decorator(Target[key], {
kind: 'method',
name: key,
static: true
static: true,
p5
});
if(result){
Object.defineProperty(Target, key, {
Expand All @@ -545,7 +546,8 @@ function decorateClass(Target, decorations, path){
const result = decorator(undefined, {
kind: 'field',
name: key,
static: true
static: true,
p5
});
if(result && typeof result === 'function'){
Target[key] = result(Target[key]);
Expand All @@ -555,7 +557,7 @@ function decorateClass(Target, decorations, path){
}

if(typeof Target[key] === 'function' && Target[key].prototype){
decorateClass(Target[key], decorations, `${path}.${key}`);
decorateClass(Target[key], decorations, `${path}.${key}`, p5);
}
}
}
Expand All @@ -570,7 +572,8 @@ function decorateClass(Target, decorations, path){
const result = decorator(Target.prototype[member], {
kind: 'method',
name: member,
static: false
static: false,
p5
});
if(result) {
Object.defineProperty(Target.prototype, member, {
Expand All @@ -588,7 +591,8 @@ function decorateClass(Target, decorations, path){
const result = decorator(undefined, {
kind: 'field',
name: member,
static: false
static: false,
p5
});
Object.defineProperty(Target.prototype, member, {
enumerable: true,
Expand All @@ -602,12 +606,14 @@ function decorateClass(Target, decorations, path){
const getterResult = decorator(get, {
kind: 'getter',
name: member,
static: false
static: false,
p5
});
const setterResult = decorator(set, {
kind: 'setter',
name: member,
static: false
static: false,
p5
});
Object.defineProperty(Target.prototype, member, {
enumerable: true,
Expand Down
7 changes: 6 additions & 1 deletion src/image/p5.Image.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ class Image {
this.pixels = [];
}

// This will get overwritten when exported as part of p5.
_friendlyError(_e) {}

/**
* Gets or sets the pixel density for high pixel density displays.
*
Expand Down Expand Up @@ -1605,7 +1608,7 @@ class Image {
props.displayIndex = index;
this.drawingContext.putImageData(props.frames[index].image, 0, 0);
} else {
p5._friendlyError(
this._friendlyError(
'Cannot set GIF to a frame number that is higher than total number of frames or below zero.',
'setFrame'
);
Expand Down Expand Up @@ -2105,6 +2108,8 @@ function image(p5, fn){
*/
p5.Image = Image;

Image.prototype._friendlyError = p5._friendlyError;

/**
* The image's width in pixels.
*
Expand Down
2 changes: 2 additions & 0 deletions src/math/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import random from './random.js';
import trigonometry from './trigonometry.js';
import math from './math.js';
import vector from './p5.Vector.js';
import vectorValidation from './patch-vector.js';

export default function(p5){
p5.registerAddon(calculation);
Expand All @@ -12,4 +13,5 @@ export default function(p5){
p5.registerAddon(trigonometry);
p5.registerAddon(math);
p5.registerAddon(vector);
p5.registerAddon(vectorValidation);
}
19 changes: 3 additions & 16 deletions src/math/math.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ function math(p5, fn) {
* <a href="#/p5.Vector">p5.Vector</a> class.
*
* @method createVector
* @param {...Number} x Zero or more numbers, representing each component of the vector.
* @param {...Number} x List of numbers representing each component of the vector.
* @return {p5.Vector} new <a href="#/p5.Vector">p5.Vector</a> object.
*
* @example
Expand Down Expand Up @@ -92,21 +92,8 @@ function math(p5, fn) {
* point(pos);
* }
*/
fn.createVector = function (x, y, z) {
if (arguments.length === 0) {
p5._friendlyError(
'In 1.x, createVector() was a shortcut for createVector(0, 0, 0). In 2.x, p5.js has vectors of any dimension, so you must provide your desired number of zeros. Use createVector(0, 0) for a 2D vector and createVector(0, 0, 0) for a 3D vector.'
);
}
if (this instanceof p5) {
return new p5.Vector(
this._fromRadians.bind(this),
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is done only in p5.Vector.

this._toRadians.bind(this),
...arguments
);
} else {
return new p5.Vector(x, y, z);
}
fn.createVector = function (...args) {
return new p5.Vector(...args);
};

/**
Expand Down
Loading
Loading