TAChart: Block all extent notifications in mini-map mode

git-svn-id: trunk@29940 -
This commit is contained in:
ask 2011-03-20 18:30:46 +00:00
parent 42d6eb9431
commit dcc462fe9b
3 changed files with 16 additions and 14 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);