You've already forked lazarus-ccr
LazMapViewer: Lock list of gps items during painting.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8006 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -125,8 +125,6 @@ type
|
|||||||
procedure _Delete(Idx: Integer; var DelLst: TGPSObjList);
|
procedure _Delete(Idx: Integer; var DelLst: TGPSObjList);
|
||||||
procedure FreePending;
|
procedure FreePending;
|
||||||
procedure DecRef;
|
procedure DecRef;
|
||||||
procedure Lock;
|
|
||||||
procedure UnLock;
|
|
||||||
procedure CallModified(lst: TGPSObjList; Adding: boolean);
|
procedure CallModified(lst: TGPSObjList; Adding: boolean);
|
||||||
// property Items: TGPSObjList read FItems;
|
// property Items: TGPSObjList read FItems;
|
||||||
procedure IdsToObj(const Ids: TIdArray; out objs: TGPSObjArray; AIdOwner: integer);
|
procedure IdsToObj(const Ids: TIdArray; out objs: TGPSObjArray; AIdOwner: integer);
|
||||||
@ -146,6 +144,9 @@ type
|
|||||||
procedure BeginUpdate;
|
procedure BeginUpdate;
|
||||||
procedure EndUpdate;
|
procedure EndUpdate;
|
||||||
|
|
||||||
|
procedure Lock;
|
||||||
|
procedure UnLock;
|
||||||
|
|
||||||
property Count: integer read GetCount;
|
property Count: integer read GetCount;
|
||||||
property Items[AIndex: Integer]: TGpsObj read GetItem; default;
|
property Items[AIndex: Integer]: TGpsObj read GetItem; default;
|
||||||
property OnModified: TModifiedEvent read FOnModified write FOnModified;
|
property OnModified: TModifiedEvent read FOnModified write FOnModified;
|
||||||
|
@ -617,40 +617,46 @@ var
|
|||||||
extent: TSize;
|
extent: TSize;
|
||||||
s: String;
|
s: String;
|
||||||
begin
|
begin
|
||||||
if Assigned(FOnDrawGpsPoint) then begin
|
GPSItems.Lock;
|
||||||
FOnDrawGpsPoint(Self, DrawingEngine, aPOI);
|
try
|
||||||
exit;
|
if Assigned(FOnDrawGpsPoint) then begin
|
||||||
end;
|
FOnDrawGpsPoint(Self, DrawingEngine, aPOI);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
Pt := Engine.LonLatToScreen(aPOI.RealPoint);
|
Pt := Engine.LonLatToScreen(aPOI.RealPoint);
|
||||||
PtColor := clRed;
|
PtColor := clRed;
|
||||||
if aPOI.ExtraData <> nil then
|
if aPOI.ExtraData <> nil then
|
||||||
begin
|
begin
|
||||||
if aPOI.ExtraData.inheritsFrom(TDrawingExtraData) then
|
if aPOI.ExtraData.inheritsFrom(TDrawingExtraData) then
|
||||||
PtColor := TDrawingExtraData(aPOI.ExtraData).Color;
|
PtColor := TDrawingExtraData(aPOI.ExtraData).Color;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Draw point marker
|
// Draw point marker
|
||||||
if Assigned(FPOIImage) and not (FPOIImage.Empty) then
|
if Assigned(FPOIImage) and not (FPOIImage.Empty) then
|
||||||
DrawingEngine.DrawBitmap(Pt.X - FPOIImage.Width div 2, Pt.Y - FPOIImage.Height, FPOIImage, true)
|
DrawingEngine.DrawBitmap(Pt.X - FPOIImage.Width div 2, Pt.Y - FPOIImage.Height, FPOIImage, true)
|
||||||
else begin
|
else begin
|
||||||
DrawingEngine.PenColor := ptColor;
|
DrawingEngine.PenColor := ptColor;
|
||||||
DrawingEngine.Line(Pt.X, Pt.Y - 5, Pt.X, Pt.Y + 5);
|
DrawingEngine.Line(Pt.X, Pt.Y - 5, Pt.X, Pt.Y + 5);
|
||||||
DrawingEngine.Line(Pt.X - 5, Pt.Y, Pt.X + 5, Pt.Y);
|
DrawingEngine.Line(Pt.X - 5, Pt.Y, Pt.X + 5, Pt.Y);
|
||||||
Pt.Y := Pt.Y + 5;
|
Pt.Y := Pt.Y + 5;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Draw point text
|
// Draw point text
|
||||||
s := aPOI.Name;
|
s := aPOI.Name;
|
||||||
if FPOITextBgColor = clNone then
|
if FPOITextBgColor = clNone then
|
||||||
DrawingEngine.BrushStyle := bsClear
|
DrawingEngine.BrushStyle := bsClear
|
||||||
else begin
|
else begin
|
||||||
DrawingEngine.BrushStyle := bsSolid;
|
DrawingEngine.BrushStyle := bsSolid;
|
||||||
DrawingEngine.BrushColor := FPOITextBgColor;
|
DrawingEngine.BrushColor := FPOITextBgColor;
|
||||||
s := ' ' + s + ' ';
|
s := ' ' + s + ' ';
|
||||||
|
end;
|
||||||
|
extent := DrawingEngine.TextExtent(s);
|
||||||
|
DrawingEngine.Textout(Pt.X - extent.CX div 2, Pt.Y + 5, s);
|
||||||
|
|
||||||
|
finally
|
||||||
|
GPSItems.Unlock;
|
||||||
end;
|
end;
|
||||||
extent := DrawingEngine.TextExtent(s);
|
|
||||||
DrawingEngine.Textout(Pt.X - extent.CX div 2, Pt.Y + 5, s);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMapView.CallAsyncInvalidate;
|
procedure TMapView.CallAsyncInvalidate;
|
||||||
|
Reference in New Issue
Block a user