anchor.diff:    private
       FWidget: TfpgWidget;
       FCanvas: TfpgCanvas;
  -    FFont: TfpgFont;
  +    FFontCache: TFPList;
       function    GetCurrentFont: TfpgFont;
       procedure   SetDefaultFont(const AValue: TfpgFont);
     protected
  
positive.code:   FWidget := AWidget;
    FDefaultFont := fpgGetFont(DefaultTopicFont);
    FCanvas.Font := FDefaultFont;
    FFont := nil;
  end;
  
  destructor TCanvasFontManager.Destroy;
  begin
    FCanvas.Font := fpgApplication.DefaultFont;
    FDefaultFont.Free;
    FFont.Free;
    inherited Destroy;
  end;
  
  
negative.code: // Set the current font for the canvas to match the given
  // spec, creating or re-using fonts as needed.
  procedure TCanvasFontManager.SetFont(const AFontDesc: TfpgString);
  const
    MAX_FONT_CACHE = 10;
  var
    i: Integer;
    Tmp: TfpgFont;
  begin
    if FCanvas.Font.FontDesc = AFontDesc then
      Exit; // nothing to do so exit
  