mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 20:59:12 +02:00
TAChart: Block all extent notifications in mini-map mode
git-svn-id: trunk@29940 -
This commit is contained in:
parent
42d6eb9431
commit
dcc462fe9b
@ -153,12 +153,16 @@ type
|
|||||||
{ TBroadcaster }
|
{ TBroadcaster }
|
||||||
|
|
||||||
TBroadcaster = class(TFPList)
|
TBroadcaster = class(TFPList)
|
||||||
|
private
|
||||||
|
FLocked: Boolean;
|
||||||
public
|
public
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
public
|
public
|
||||||
procedure Broadcast(ASender: TObject);
|
procedure Broadcast(ASender: TObject);
|
||||||
procedure Subscribe(AListener: TListener);
|
procedure Subscribe(AListener: TListener);
|
||||||
procedure Unsubscribe(AListener: TListener);
|
procedure Unsubscribe(AListener: TListener);
|
||||||
|
public
|
||||||
|
property Locked: Boolean read FLocked write FLocked;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TDrawDataItem }
|
{ TDrawDataItem }
|
||||||
@ -712,6 +716,7 @@ procedure TBroadcaster.Broadcast(ASender: TObject);
|
|||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
if Locked then exit;
|
||||||
for i := 0 to Count - 1 do
|
for i := 0 to Count - 1 do
|
||||||
TListener(Items[i]).Notify(ASender);
|
TListener(Items[i]).Notify(ASender);
|
||||||
end;
|
end;
|
||||||
|
@ -978,6 +978,7 @@ begin
|
|||||||
oldLogicalExtent := FLogicalExtent;
|
oldLogicalExtent := FLogicalExtent;
|
||||||
oldPrevLogicalExtent := FPrevLogicalExtent;
|
oldPrevLogicalExtent := FPrevLogicalExtent;
|
||||||
oldIsZoomed := FIsZoomed;
|
oldIsZoomed := FIsZoomed;
|
||||||
|
ExtentBroadcaster.Locked := true;
|
||||||
try
|
try
|
||||||
FIsZoomed := false;
|
FIsZoomed := false;
|
||||||
PaintOnCanvas(ACanvas, ARect);
|
PaintOnCanvas(ACanvas, ARect);
|
||||||
@ -988,6 +989,7 @@ begin
|
|||||||
FLogicalExtent := oldLogicalExtent;
|
FLogicalExtent := oldLogicalExtent;
|
||||||
FPrevLogicalExtent := oldPrevLogicalExtent;
|
FPrevLogicalExtent := oldPrevLogicalExtent;
|
||||||
FIsZoomed := oldIsZoomed;
|
FIsZoomed := oldIsZoomed;
|
||||||
|
ExtentBroadcaster.Locked := false;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -95,7 +95,6 @@ type
|
|||||||
FOldCursor: TCursor;
|
FOldCursor: TCursor;
|
||||||
FPrevPoint: TDoublePoint;
|
FPrevPoint: TDoublePoint;
|
||||||
FScale: TDoublePoint;
|
FScale: TDoublePoint;
|
||||||
FUpdateLocked: Boolean;
|
|
||||||
procedure ChartExtentChanged(ASender: TObject);
|
procedure ChartExtentChanged(ASender: TObject);
|
||||||
private
|
private
|
||||||
FAllowDragNavigation: Boolean;
|
FAllowDragNavigation: Boolean;
|
||||||
@ -248,8 +247,7 @@ end;
|
|||||||
procedure TChartNavPanel.ChartExtentChanged(ASender: TObject);
|
procedure TChartNavPanel.ChartExtentChanged(ASender: TObject);
|
||||||
begin
|
begin
|
||||||
Unused(ASender);
|
Unused(ASender);
|
||||||
if not FUpdateLocked then
|
Invalidate;
|
||||||
Invalidate;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TChartNavPanel.Create(AOwner: TComponent);
|
constructor TChartNavPanel.Create(AOwner: TComponent);
|
||||||
@ -321,7 +319,7 @@ end;
|
|||||||
|
|
||||||
procedure TChartNavPanel.Paint;
|
procedure TChartNavPanel.Paint;
|
||||||
|
|
||||||
function DrawRect(ARect: TDoubleRect): TRect;
|
function GraphRect(ARect: TDoubleRect): TRect;
|
||||||
begin
|
begin
|
||||||
with ARect do begin
|
with ARect do begin
|
||||||
a := a * FScale + FOffset;
|
a := a * FScale + FOffset;
|
||||||
@ -329,13 +327,13 @@ procedure TChartNavPanel.Paint;
|
|||||||
Result := Rect(
|
Result := Rect(
|
||||||
Round(a.X), Height - Round(a.Y), Round(b.X), Height - Round(b.Y));
|
Round(a.X), Height - Round(a.Y), Round(b.X), Height - Round(b.Y));
|
||||||
end;
|
end;
|
||||||
Canvas.Rectangle(Result);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
var
|
||||||
fe, le, ext: TDoubleRect;
|
fe, le, ext: TDoubleRect;
|
||||||
sz: TDoublePoint;
|
sz: TDoublePoint;
|
||||||
oldAxisVisible: Boolean;
|
oldAxisVisible: Boolean;
|
||||||
|
feRect: TRect;
|
||||||
begin
|
begin
|
||||||
if Chart = nil then exit;
|
if Chart = nil then exit;
|
||||||
fe := Chart.GetFullExtent;
|
fe := Chart.GetFullExtent;
|
||||||
@ -359,16 +357,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
FOffset -= ext.a * FScale;
|
FOffset -= ext.a * FScale;
|
||||||
|
|
||||||
|
feRect := GraphRect(fe);
|
||||||
if MiniMap then begin
|
if MiniMap then begin
|
||||||
FUpdateLocked := true;
|
|
||||||
oldAxisVisible := Chart.AxisVisible;
|
oldAxisVisible := Chart.AxisVisible;
|
||||||
Chart.AxisVisible := false;
|
Chart.AxisVisible := false;
|
||||||
try
|
Chart.PaintOnAuxCanvas(Canvas, feRect);
|
||||||
Chart.PaintOnAuxCanvas(Canvas, Rect(0, 0, Width, Height));
|
Chart.AxisVisible := oldAxisVisible;
|
||||||
Chart.AxisVisible := oldAxisVisible;
|
|
||||||
finally
|
|
||||||
FUpdateLocked := false;
|
|
||||||
end;
|
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
Canvas.Brush.Color := Chart.BackColor;
|
Canvas.Brush.Color := Chart.BackColor;
|
||||||
@ -377,9 +371,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
Canvas.Brush.Style := bsClear;
|
Canvas.Brush.Style := bsClear;
|
||||||
Canvas.Pen := FullExtentPen;
|
Canvas.Pen := FullExtentPen;
|
||||||
DrawRect(fe);
|
Canvas.Rectangle(feRect);
|
||||||
Canvas.Pen := LogicalExtentPen;
|
Canvas.Pen := LogicalExtentPen;
|
||||||
FLogicalExtentRect := DrawRect(le);
|
FLogicalExtentRect := GraphRect(le);
|
||||||
|
Canvas.Rectangle(FLogicalExtentRect);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TChartNavPanel.SetChart(AValue: TChart);
|
procedure TChartNavPanel.SetChart(AValue: TChart);
|
||||||
|
Loading…
Reference in New Issue
Block a user