4.6  •  5.0  •  5.1  •  5.2  •  5.3  •  5.4  •  6.0  •  6.1  •  6.2  •  6.3  •  6.4  •  6.5

CanvasDrawText( canvas, text, x, y, font, fontSize, color, bold, italic, hAlign, vAlign, swapXY )

Draws text on a canvas.

  • «canvas» is a canvas obtained from calling the Canvas() function, or a canvas context obtained by calling the CanvasContext() function.
  • «text» is the text to draw.
  • «x», «y»: The location where the text will display.
  • «font»: (Optional) the textual TrueType font name, such as 'Arial', 'Comic Sans MS', 'Times New Roman'.
  • «fontSize»: (Optional) Font size in points. Defaults to 11.
  • «color»: (Optional) Either a textual color name or a color integer. See Color parameters for an enumeration of textual color names and a description of color integers. Defaults to 'Black'.
  • «bold», «italic»: (Optional) When true, the text is draw in bold or italic font respectively.
  • «hAlign»: (Optional) Horizontal alignment relative to «x», either 'Left', 'Center' or 'Right'. Default is 'Left'.
  • «vAlign»: (Optional) Vertical alignment relative to «y», either 'Top', 'Middle' or 'Bottom'. Default is 'Top'.
  • «measureOnly»: (Optional) When true, text is not drawn. Use this to measure the bounding box without actually drawing.
  • «swapXY»: (Optional) Swaps the «x» and «y» parameters, and also swaps the return values to return in the order height, width, y, x.
  • «wordWrapWidth» (Optional)

When drawn to a context where the coordinate frame as been scaled, the text (and the interpretation of «fontSize» is scaled as well. When the x- and y-axes are scaled differently, the text will be squashed or stretched. When one logical unit along x corresponds to two device pixels, then text will be twice as wide as it would be if rendered at the same «fontSize» without scaling.

Return value

New to Analytica 5.2

Returns the coordinates of the bounding box as four separate return values: width, height, left and top. To capture the full bounding box use, e.g.,

Local (w, h, left, top) := CanvasDrawText( canv, "Some text", 200, 300, hAlign:'Center' );


Local (w, h, left, top) := CanvasDrawText( canv, "Some text", 200, 300, hAlign:'Center', measureOnly:true );

The first example draws and measures, whereas the second example measures without drawing. If you only need to measure the width, you can use

Local w := CanvasDrawText( canv, "Some text", 200, 300, hAlign:'Center', measureOnly:true );

Note: Take note that the width and height are returned first. This is because in many cases, the extent is all you actually care about, so there is no need to capture the left and top coordinates.

The bounding box is in the canvas context coordinates, as demonstrated here:

Local canv := Canvas(100,70);
CanvasDrawEllipse(canv, 60-3, 40-3, 6,6, fillColor:'Red');
Local rot := CanvasContext(canv, rotAngle:-35, rotx:60, roty:40 );
Local (w,h,x,y) := CanvasDrawText(rot, "Rotated Text", 60,40,hAlign:'Center', vAlign:'Bottom');
CanvasDrawRectangle(rot, x,y,w,h );

CanvasDrawText measureRotated.png

See also


You are not allowed to post comments.