anchor.diff:      Exit;  //==>
     end;
   
  -  if FImage = nil then
  -  begin
  -    // we must only do this once, because it's very slow
  +  if (FImage = nil) or FRecalcWheel then
  +  begin
  +    // we must only do this when needed, because it's very slow
  +    if FImage <> nil then
  +      FImage.Free;
       FImage := TfpgImage.Create;
       FImage.AllocateImage(32, DrawWidth, DrawHeight);
       FImage.UpdateImage;
  
positive.code:     FWhiteAreaPercent: longint; // 0 to 50 percent of circle radius that is pure white
      FOnChange: TNotifyEvent;
      FImage: TfpgImage; // cached colorwheel image
      procedure   HSFromPoint(X, Y: longint; out H: longint; out S: double);
      procedure   DrawCursor;
      procedure   SetMarginWidth(NewWidth: longint);
      procedure   SetCursorSize(NewSize: longint);
      procedure   SetValueBar(AValueBar: TfpgValueBar);
      procedure   SetWhiteAreaPercent(WhiteAreaPercent: longint);
      procedure   Notification(AComponent: TComponent; Operation: TOperation); override;
      function    DrawWidth: longint;
      function    DrawHeight: longint;
  
negative.code: 
    FWhiteAreaPercent := WhiteAreaPercent;
    Invalidate;
  end;
  
  procedure TfpgColorWheel.SetBackgroundColor(const AValue: TfpgColor);
  begin
    FRecalcWheel := True;
    inherited SetBackgroundColor(AValue);
  end;
  
  procedure TfpgColorWheel.Notification(AComponent: TComponent; Operation: TOperation);
  