-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProcessing_api.h
More file actions
188 lines (183 loc) · 23.8 KB
/
Copy pathProcessing_api.h
File metadata and controls
188 lines (183 loc) · 23.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
// Processing_api.h
// Included in Sketch_run.cpp to make Processing API available to user-defined
// classes inside sketches (which don't inherit from PApplet).
#pragma once
#include "Processing.h"
// ── Math (static, no instance needed) ────────────────────────────────────────
inline float radians(float d) { return PApplet::radians(d); }
inline float degrees(float r) { return PApplet::degrees(r); }
inline float sq(float x) { return PApplet::sq(x); }
inline float lerp(float a,float b,float t) { return PApplet::lerp(a,b,t); }
inline bool* getKeysDown() { return PApplet::g_papplet ? PApplet::g_papplet->keysDown : nullptr; }
inline bool* getMouseDown() { return PApplet::g_papplet ? PApplet::g_papplet->mouseDown : nullptr; }
inline float map(float v,float i0,float i1,float o0,float o1) { return PApplet::map(v,i0,i1,o0,o1); }
inline float constrain(float v,float lo,float hi) { return PApplet::constrain(v,lo,hi); }
inline float max(float a,float b) { return PApplet::max(a,b); }
inline float min(float a,float b) { return PApplet::min(a,b); }
inline float max(float a,float b,float c) { return PApplet::max(a,b,c); }
inline float min(float a,float b,float c) { return PApplet::min(a,b,c); }
inline float dist(float x1,float y1,float x2,float y2) { return PApplet::dist(x1,y1,x2,y2); }
inline float dist(float x1,float y1,float z1,float x2,float y2,float z2) { return PApplet::dist(x1,y1,z1,x2,y2,z2); }
inline float mag(float x,float y) { return PApplet::mag(x,y); }
inline float mag(float x,float y,float z) { return PApplet::mag(x,y,z); }
inline float norm(float v,float lo,float hi){ return PApplet::norm(v,lo,hi); }
// ── Drawing forwarders ────────────────────────────────────────────────────────
inline void background(float g) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->background(g); }
inline void background(float r,float g,float b) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->background(r,g,b); }
inline void background(float r,float g,float b,float a){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->background(r,g,b,a); }
inline void fill(float g) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->fill(g); }
inline void fill(float r,float g,float b) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->fill(r,g,b); }
inline void fill(float r,float g,float b,float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->fill(r,g,b,a); }
inline void noFill() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noFill(); }
inline void stroke(float g) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->stroke(g); }
inline void stroke(float r,float g,float b) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->stroke(r,g,b); }
inline void stroke(float r,float g,float b,float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->stroke(r,g,b,a); }
inline void noStroke() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noStroke(); }
inline void strokeWeight(float w) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->strokeWeight(w); }
inline void point(float x,float y) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->point(x,y); }
inline void line(float x1,float y1,float x2,float y2) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->line(x1,y1,x2,y2); }
inline void line(float x1,float y1,float z1,float x2,float y2,float z2){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->line(x1,y1,z1,x2,y2,z2); }
inline void rect(float x,float y,float w,float h) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->rect(x,y,w,h); }
inline void ellipse(float x,float y,float w,float h) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->ellipse(x,y,w,h); }
inline void circle(float x,float y,float d) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->circle(x,y,d); }
inline void triangle(float x1,float y1,float x2,float y2,float x3,float y3){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->triangle(x1,y1,x2,y2,x3,y3); }
inline void arc(float x,float y,float w,float h,float s,float e){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->arc(x,y,w,h,s,e); }
inline void arc(float x,float y,float w,float h,float s,float e,int m){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->arc(x,y,w,h,s,e,m); }
inline void translate(float x,float y) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->translate(x,y); }
inline void translate(float x,float y,float z) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->translate(x,y,z); }
inline void rotate(float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->rotate(a); }
inline void rotateX(float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->rotateX(a); }
inline void rotateY(float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->rotateY(a); }
inline void rotateZ(float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->rotateZ(a); }
inline void scale(float s) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->scale(s); }
inline void scale(float x,float y) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->scale(x,y); }
inline void pushMatrix() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->pushMatrix(); }
inline void popMatrix() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->popMatrix(); }
inline void push() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->push(); }
inline void pop() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->pop(); }
inline void pushStyle() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->pushStyle(); }
inline void popStyle() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->popStyle(); }
inline void resetMatrix() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->resetMatrix(); }
inline void beginShape(int k=-1) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->beginShape(k); }
inline void endShape(int m=0) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->endShape(m); }
inline void vertex(float x,float y) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->vertex(x,y); }
inline void vertex(float x,float y,float z) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->vertex(x,y,z); }
inline void vertex(float x,float y,float u,float v) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->vertex(x,y,u,v); }
inline void bezierVertex(float cx1,float cy1,float cx2,float cy2,float x,float y){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->bezierVertex(cx1,cy1,cx2,cy2,x,y); }
inline void curveVertex(float x,float y) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->curveVertex(x,y); }
inline void tint(float g) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->tint(g); }
inline void tint(float r,float g,float b) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->tint(r,g,b); }
inline void tint(float r,float g,float b,float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->tint(r,g,b,a); }
inline void noTint() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noTint(); }
inline void smooth() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->smooth(); }
inline void noSmooth() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noSmooth(); }
inline void colorMode(int m,float mx=255.f) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->colorMode(m,mx); }
inline void colorMode(int m,float h,float s,float b,float a=255.f){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->colorMode(m,h,s,b,a); }
inline void rectMode(int m) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->rectMode(m); }
inline void ellipseMode(int m) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->ellipseMode(m); }
inline void imageMode(int m) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->imageMode(m); }
inline void blendMode(int m) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->blendMode(m); }
inline void clear() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->clear(); }
inline void size(int w,int h) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->size(w,h); }
inline void size(int w,int h,int r) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->size(w,h,r); }
inline void fullScreen() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->fullScreen(); }
inline void noLoop() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noLoop(); }
inline void loop() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->loop(); }
inline void redraw() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->redraw(); }
inline void frameRate(int fps) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->frameRate(fps); }
inline void cursor() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->cursor(); }
inline void noCursor() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noCursor(); }
inline void lights() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->lights(); }
inline void noLights() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noLights(); }
inline void ambientLight(float r,float g,float b) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->ambientLight(r,g,b); }
inline void directionalLight(float r,float g,float b,float nx,float ny,float nz){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->directionalLight(r,g,b,nx,ny,nz); }
inline void pointLight(float r,float g,float b,float x,float y,float z){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->pointLight(r,g,b,x,y,z); }
inline void normal(float nx,float ny,float nz) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->normal(nx,ny,nz); }
inline void box(float s) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->box(s); }
inline void box(float w,float h,float d) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->box(w,h,d); }
inline void sphere(float r) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->sphere(r); }
inline void sphereDetail(int res) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->sphereDetail(res); }
inline void camera() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->camera(); }
inline void camera(float ex,float ey,float ez,float cx,float cy,float cz,float ux,float uy,float uz){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->camera(ex,ey,ez,cx,cy,cz,ux,uy,uz); }
inline void perspective() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->perspective(); }
inline void ortho() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->ortho(); }
inline void text(const std::string& s,float x,float y) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->text(s,x,y); }
inline void text(int v,float x,float y) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->text(v,x,y); }
inline void text(float v,float x,float y) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->text(v,x,y); }
inline void textSize(float s) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->textSize(s); }
inline void textAlign(int a,int b=-1) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->textAlign(a,b); }
inline void textLeading(float l) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->textLeading(l); }
inline float textWidth(const std::string& s) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->textWidth(s) : 0; }
inline void loadPixels() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->loadPixels(); }
inline void updatePixels() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->updatePixels(); }
inline void save(const std::string& f="") { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->save(f); }
inline void saveFrame(const std::string& f="frame-####.png"){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->saveFrame(f); }
inline PImage* loadImage(const std::string& p) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->loadImage(p) : nullptr; }
inline PImage* createImage(int w,int h,int m=1) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->createImage(w,h,m) : nullptr; }
inline PGraphics* createGraphics(int w,int h) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->createGraphics(w,h) : nullptr; }
inline void image(PImage* img,float x,float y) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->image(img,x,y); }
inline void image(PImage* img,float x,float y,float w,float h){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->image(img,x,y,w,h); }
inline void filter(int m) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->filter(m); }
inline float random(float hi) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->random(hi) : 0; }
inline float random(float lo,float hi) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->random(lo,hi) : 0; }
inline float randomGaussian() { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->randomGaussian() : 0; }
inline void randomSeed(long s) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->randomSeed(s); }
inline float noise(float x) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->noise(x) : 0; }
inline float noise(float x,float y) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->noise(x,y) : 0; }
inline float noise(float x,float y,float z) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->noise(x,y,z) : 0; }
inline void noiseSeed(int s) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noiseSeed(s); }
inline void noiseDetail(int o,float f=0.5f) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noiseDetail(o,f); }
inline color lerpColor(color a,color b,float t) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->lerpColor(a,b,t) : a; }
inline float red(color c) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->red(c) : 0; }
inline float green(color c) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->green(c) : 0; }
inline float blue(color c) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->blue(c) : 0; }
inline float alpha(color c) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->alpha(c) : 0; }
inline float hue(color c) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->hue(c) : 0; }
inline float saturation(color c) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->saturation(c) : 0; }
inline float brightness(color c) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->brightness(c) : 0; }
inline color makeColor(float a,float b,float c,float d=255){ return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->makeColor(a,b,c,d) : colorVal(0,0,0,255); }
inline void stroke(float g,float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->stroke(g,a); }
inline void fill(float g,float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->fill(g,a); }
inline void tint(float g,float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->tint(g,a); }
inline void background(color c) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->background(c); }
inline void fill(color c) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->fill(c); }
inline void stroke(color c) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->stroke(c); }
inline void rect(float x,float y,float w,float h,float r){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->rect(x,y,w,h,r); }
inline void square(float x,float y,float s) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->square(x,y,s); }
inline void bezier(float x1,float y1,float cx1,float cy1,float cx2,float cy2,float x2,float y2){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->bezier(x1,y1,cx1,cy1,cx2,cy2,x2,y2); }
inline void curve(float x0,float y0,float x1,float y1,float x2,float y2,float x3,float y3){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->curve(x0,y0,x1,y1,x2,y2,x3,y3); }
inline void shearX(float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->shearX(a); }
inline void shearY(float a) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->shearY(a); }
inline void ambient(float r,float g,float b) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->ambient(r,g,b); }
inline void specular(float r,float g,float b) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->specular(r,g,b); }
inline void emissive(float r,float g,float b) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->emissive(r,g,b); }
inline void shininess(float s) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->shininess(s); }
inline void spotLight(float r,float g,float b,float x,float y,float z,float nx,float ny,float nz,float angle,float conc){ if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->spotLight(r,g,b,x,y,z,nx,ny,nz,angle,conc); }
inline void lightFalloff(float c,float l,float q) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->lightFalloff(c,l,q); }
inline void lightSpecular(float r,float g,float b) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->lightSpecular(r,g,b); }
inline void texture(PImage& img) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->texture(img); }
inline void textureMode(int m) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->textureMode(m); }
inline void textureWrap(int m) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->textureWrap(m); }
inline void clip(float x,float y,float w,float h) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->clip(x,y,w,h); }
inline void noClip() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->noClip(); }
inline void windowTitle(const std::string& t) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->windowTitle(t); }
inline PFont loadFont(const std::string& f) { static PFont d; return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->loadFont(f) : d; }
inline void textFont(const PFont& f) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->textFont(f); }
inline void textFont(const PFont& f,float s) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->textFont(f,s); }
inline void set(int x,int y,color c) { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->set(x,y,c); }
inline color get(int x,int y) { return ::Processing::PApplet::g_papplet ? ::Processing::PApplet::g_papplet->get(x,y) : color(); }
inline void exit_sketch() { if(::Processing::PApplet::g_papplet) ::Processing::PApplet::g_papplet->exit_sketch(); }
// These let user-defined classes use width/height/mouseX etc. as values.
// Sketch methods use inherited PApplet members directly (no macro expansion).
// Variable macros — defined here (after _PSketch) so user class bodies
// can use width/height/mouseX/mouseY as if they were variables.
// These are NOT active in Processing.cpp or Processing.h.
// IMPORTANT: These macros conflict with struct member access like img->width.
// Use parentheses to disambiguate: img->height works fine since -> suppresses
// macro expansion for the RIGHT side of ->
// Actually in C, "img->height" — the "height" token after -> IS macro-expanded.
// Workaround: use (img)->height or cast. Or just don't define these here.
//
// For now we define them since most sketches need width/height as globals.
// PImage members can be accessed via the struct directly: (*img).height
// or by temporarily undefining: #undef height ...