@@ -755,6 +755,9 @@ function textCore(p5, fn) {
755
755
*
756
756
* For example, if the text contains multiple lines due to wrapping or explicit line breaks, textWidth()
757
757
* will return the width of the longest line.
758
+ *
759
+ * **Note:** In p5.js 2.0+, leading and trailing spaces are ignored.
760
+ * `textWidth(" Hello ")` returns the same width as `textWidth("Hello")`.
758
761
*
759
762
* @method textWidth
760
763
* @for p5
@@ -821,6 +824,48 @@ function textCore(p5, fn) {
821
824
* <div>
822
825
* <code>
823
826
* function setup() {
827
+ * createCanvas(200, 160);
828
+ * background(235);
829
+ * noLoop();
830
+ *
831
+ * textSize(18);
832
+ * textAlign(LEFT, TOP);
833
+ *
834
+ * const x = 12, h = 24;
835
+ * const s1 = 'Hello';
836
+ * const s2 = 'Hello '; // 2 trailing spaces
837
+ * const s3 = 'Hello '; // many trailing spaces
838
+ *
839
+ * // draw text
840
+ * fill(0);
841
+ * text(s1, x, 12);
842
+ * text(s2, x, 56);
843
+ * text(s3, x, 100);
844
+ *
845
+ * // measure and draw tight boxes (all same width)
846
+ * noFill(); stroke(255, 0, 0);
847
+ * const w1 = textWidth(s1);
848
+ * const w2 = textWidth(s2);
849
+ * const w3 = textWidth(s3);
850
+ * rect(x, 10, w1, h);
851
+ * rect(x, 54, w2, h);
852
+ * rect(x, 98, w3, h);
853
+ *
854
+ * // small captions show the actual strings (spaces as ·)
855
+ * textSize(10); noStroke(); fill(30);
856
+ * text('"' + s1.replace(/ /g, '·') + '" w=' + w1.toFixed(1), x, 10 + h + 2);
857
+ * text('"' + s2.replace(/ /g, '·') + '" w=' + w2.toFixed(1), x, 54 + h + 2);
858
+ * text('"' + s3.replace(/ /g, '·') + '" w=' + w3.toFixed(1), x, 98 + h + 2);
859
+ *
860
+ * describe('Three lines: Hello with 0, 2, and many trailing spaces. Red boxes use textWidth and are identical. Captions show spaces as dots.');
861
+ * }
862
+ * </code>
863
+ * </div>
864
+ *
865
+ * @example
866
+ * <div>
867
+ * <code>
868
+ * function setup() {
824
869
* createCanvas(100, 100);
825
870
*
826
871
* background(200);
0 commit comments