mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-19 11:59:13 +02:00
lcl: don't trigger TBitmap.OnChange while adding it to the imagelist cache.
git-svn-id: trunk@16231 -
This commit is contained in:
parent
7a57600b98
commit
b955aded7a
@ -200,25 +200,33 @@ procedure TImageListCache.RegisterBitmap(AListener: IImageCacheListener; ABitmap
|
|||||||
var
|
var
|
||||||
i, AStart, OldLen: Integer;
|
i, AStart, OldLen: Integer;
|
||||||
Item: PImageCacheItem;
|
Item: PImageCacheItem;
|
||||||
|
OldOnChange: TNotifyEvent;
|
||||||
begin
|
begin
|
||||||
RegisterListener(AListener);
|
OldOnChange := ABitmap.OnChange;
|
||||||
Item := FItems.GetItemForListener(AListener);
|
ABitmap.OnChange := nil; // prevent further updates
|
||||||
if Item = nil then
|
|
||||||
begin
|
|
||||||
Item := FItems.GetNew;
|
|
||||||
Item^.FImageList := GetImageListFor(ABitmap.Width div ABitmapCount, ABitmap.Height);
|
|
||||||
Item^.FListener := AListener;
|
|
||||||
end;
|
|
||||||
|
|
||||||
AStart := Item^.FImageList.Add(ABitmap, nil);
|
try
|
||||||
AListener.CacheSetImageList(Item^.FImageList);
|
RegisterListener(AListener);
|
||||||
OldLen := Length(Item^.FImageIndexes);
|
Item := FItems.GetItemForListener(AListener);
|
||||||
SetLength(Item^.FImageIndexes, OldLen + Item^.FImageList.Count - AStart);
|
if Item = nil then
|
||||||
|
begin
|
||||||
for i := AStart to Item^.FImageList.Count - 1 do
|
Item := FItems.GetNew;
|
||||||
begin
|
Item^.FImageList := GetImageListFor(ABitmap.Width div ABitmapCount, ABitmap.Height);
|
||||||
Item^.FImageIndexes[OldLen + i - AStart] := i;
|
Item^.FListener := AListener;
|
||||||
AListener.CacheSetImageIndex(OldLen + i - AStart, i);
|
end;
|
||||||
|
|
||||||
|
AStart := Item^.FImageList.Add(ABitmap, nil);
|
||||||
|
AListener.CacheSetImageList(Item^.FImageList);
|
||||||
|
OldLen := Length(Item^.FImageIndexes);
|
||||||
|
SetLength(Item^.FImageIndexes, OldLen + Item^.FImageList.Count - AStart);
|
||||||
|
|
||||||
|
for i := AStart to Item^.FImageList.Count - 1 do
|
||||||
|
begin
|
||||||
|
Item^.FImageIndexes[OldLen + i - AStart] := i;
|
||||||
|
AListener.CacheSetImageIndex(OldLen + i - AStart, i);
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
ABitmap.OnChange := OldOnChange;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -339,3 +347,4 @@ end;
|
|||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user