def draw
      raise StandardError, 'draw not permitted in nested RVG objects' if @nested

      @canvas ||= new_canvas # allow drawing over existing canvas
      gc = Utility::GraphicContext.new
      add_outermost_primitives(gc)
      pp(self) if ENV['debug_rvg']
      print_gc(gc) if ENV['debug_prim']
      gc.draw(@canvas)
      @canvas
    end
def draw
      raise StandardError, 'draw not permitted in nested RVG objects' if @nested

      @canvas ||= new_canvas # allow drawing over existing canvas
      gc = Utility::GraphicContext.new
      add_outermost_primitives(gc)
      pp(self) if ENV['debug_rvg']
      print_gc(gc) if ENV['debug_prim']
      gc.draw(@canvas)
      @canvas
    end
Draw a +width+ x +height+ image. The image is specified by calling
 one or more drawing methods on the RVG object.
 You can group the drawing method calls in the optional associated block.
 The +x+ and +y+ arguments have no meaning for the outermost RVG object.
 On nested RVG objects [+x+, +y+] is the coordinate of the upper-left
 corner in the containing canvas on which the nested RVG object is placed.

 Drawing occurs on a +canvas+ created by the #draw method. By default the
 canvas is transparent. You can specify a different canvas with the
 #background_fill= or #background_image= methods.

 RVG objects are _containers_. That is, styles and transforms defined
 on the object are used by contained objects such as shapes, text, and
 groups unless overridden by an inner container or the object itself.
 Construct a canvas or reuse an existing canvas.
 Execute drawing commands. Return the canvas.