What exactly are you using to draw your graph when using Free Pascal? Straight LCL, BGRAGraphics, AggPas, fcl-image? Are you continuously drawing and refreshing the display, or do you first paint in memory, then blit the image to the screen?
My first test was to draw rounded rectangles directly on TCanvas from a TScrollBox - in this stage I manage 10,000. As soon as I add text it drops to 800ich. This is not exact measurements it is more a indication of the point where I feel the editor get sticky and less nice to work with. I did set DoubleBuffered, but realized that did little + flicking is not my issue here. The screen is close to flicker free.
Without some source code, it is hard to tell if you used the right method. Have you seen this page?
I added BGRABitmap now, but the performance I get with antialiasing on is that it start getting sticky at 100-200ich symbols. I am testing with rounded rects without text as you can see below. I really like the quality of the BGRABitmap, but I am a bit concerned over my performance at the time being.
I will attempt an implementation based on BGRABitmap and see what I end up with. The real diagram will render and symbols are usually spread out so the behaviour will be nice at 1:1 zoom, but the problem is as the user zoom on large diagrams.
I have included my performance test below - This is just a brute force test to get a feeling about performance limitatioons and the path forward, but please feel free to suggest.
procedure TFlowChart.Paint;
var
img:TBGRABitMap;
x,zx :Integer;
line: TBGRAPixel=(blue: 255; green: 0; red: 0; alpha: 255);
back: TBGRAPixel=(blue: 255; green: 255; red: 0; alpha: 255);
begin
Img := TBGRABitmap.Create(ClientWidth, ClientHeight, BGRAWhite);
// draw grid
x:=-1;
while x < 2000 do
begin
x:=x+gridSize;
zx:=x;//Round(x*zoom);
img.DrawHorizLine(0,zx,2000,BGRABlack);
img.DrawVertLine(zx,0,2000,BGRABlack);
end;
// draw n symbols brute force
for x:=1 to 200 do
begin
Img.RoundRectAntialias(x,y,x+100,x+50,20,20,line,1,back);
end;
Img.Draw(Canvas, 0, 0, True);
Img.Free;
end;
Also thanks for all the feedback and help. It is very nice for a newbie like myself to see that the community is stretching out to help.