VectorTextWidth()

Syntax

Result.d = VectorTextWidth(Text$ [, Flags])
Description
Measures the width of the given text in the current vector drawing font.

Parameters

Text$ The text (single-line) to measure.
Flags (optional) Can be a combination of the following values:
  #PB_VectorText_Default: Return the logical bounding box of the text
  #PB_VectorText_Visible: Return the visible bounding box of the text
  #PB_VectorText_Offset : Return the offset of the bounding box from the current position rather than the width

Return value

Returns the text width in units of the vector drawing output.

Remarks

The dimensions of drawn text can be defined in terms of two bounding boxes:

The "logical bounding box" of a character or text defines the space that the cursor must move to properly draw text next to each other. However, the actual drawn characters may extend beyond that box (for example in case of cursive or serif fonts). When determining where to draw text, the logical bounding box is the interesting one.

The "visible bounding box" of a character or text defines the area in which the text is actually drawn. This area is usually larger than the logical bounding box. The visible dimensions of the text can be retrieved by specifying the #PB_VectorText_Visible flag. The visible dimensions of the text can be at an offset to the logical ones. This offset can be calculated by specifying the #PB_VectorText_Offset flag.

The following example shows a sample text with the logical bounding box in blue, the visible bounding box in red and the location of the baseline in green. The origin at which the text is drawn is the upper left corner of the logical bounding box (blue).

Example

  If OpenWindow(0, 0, 0, 500, 250, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CanvasGadget(0, 0, 0, 500, 250)
    LoadFont(0, "Monotype Corsiva", 20, #PB_Font_Italic)
    
    If StartVectorDrawing(CanvasVectorOutput(0))
    
      VectorFont(FontID(0), 125)
      Text$ = "Sample"
      
      ; draw text
      MovePathCursor(25, 25)
      DrawVectorText(Text$)
      
      ; draw logical bounding box
      AddPathBox(25, 25, VectorTextWidth(Text$), VectorTextHeight(Text$))
      VectorSourceColor(RGBA(0, 0, 255, 255))
      DashPath(2, 10)

      ; draw visible bounding box
      AddPathBox(25 + VectorTextWidth(Text$, #PB_VectorText_Visible|#PB_VectorText_Offset), 
                 25 + VectorTextHeight(Text$, #PB_VectorText_Visible|#PB_VectorText_Offset), 
                 VectorTextWidth(Text$, #PB_VectorText_Visible), 
                 VectorTextHeight(Text$, #PB_VectorText_Visible))
      VectorSourceColor(RGBA(255, 0, 0, 255))
      DashPath(2, 10)        
      
      ; draw baseline
      MovePathCursor(25, 25 + VectorTextHeight(Text$, #PB_VectorText_Baseline))
      AddPathLine(VectorTextWidth(Text$), 0, #PB_Path_Relative)
      VectorSourceColor(RGBA(0, 255, 0, 255))
      DashPath(2, 10)                    

      StopVectorDrawing()
    EndIf
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf

See Also

VectorTextHeight(), DrawVectorText(), DrawVectorParagraph(), VectorParagraphHeight(), VectorFont()

Supported OS

All

<- VectorTextHeight() - VectorDrawing Index - VectorUnit() ->