فهرست منبع

fix zoom layout dependency

Johann ELSASS 5 سال پیش
والد
کامیت
cfb0443d8c
3فایلهای تغییر یافته به همراه9 افزوده شده و 6 حذف شده
  1. 2 2
      lazpaint/lazpaintmainform.pas
  2. 2 0
      lazpaint/umainformlayout.pas
  3. 5 4
      lazpaint/uzoom.pas

+ 2 - 2
lazpaint/lazpaintmainform.pas

@@ -872,7 +872,7 @@ procedure TFMain.FormCreate(Sender: TObject);
 begin
   FInitialized := false;
 
-  Zoom := TZoom.Create(Label_CurrentZoom,Edit_Zoom,FLayout);
+  Zoom := TZoom.Create(Label_CurrentZoom, Edit_Zoom);
   FLayout := TMainFormLayout.Create(self, Zoom);
   FLayout.OnPaintPicture:=@PictureOnPaint;
   FLayout.OnToolbarUpdate:=@PictureToolbarUpdate;
@@ -970,7 +970,6 @@ begin
     if ToolManager.OnFloodFillOptionChanged = @ManagerFloodFillOptionChanged then ToolManager.OnFloodFillOptionChanged := nil;
     if ToolManager.OnPerspectiveOptionChanged = @ManagerPerspectiveOptionChanged then ToolManager.OnPerspectiveOptionChanged := nil;
   end;
-  FreeAndNil(Zoom);
   FreeAndNil(FOnlineUpdater);
 
   FreeAndNil(FBrowseSelections);
@@ -988,6 +987,7 @@ begin
   FreeAndNil(FSaveSelection);
 
   FreeAndNil(FLayout);
+  FreeAndNil(Zoom);
 end;
 
 procedure TFMain.SetLazPaintInstance(const AValue: TLazPaintCustomInstance);

+ 2 - 0
lazpaint/umainformlayout.pas

@@ -177,6 +177,7 @@ begin
   FForm := AForm;
   FZoom := AZoom;
   FZoom.OnZoomChanged:=@ZoomChanged;
+  FZoom.Layout := self;
   FPanelToolBox := TPanel.Create(nil);
   FPanelToolBox.BevelInner := bvNone;
   FPanelToolBox.BevelOuter := bvNone;
@@ -225,6 +226,7 @@ end;
 
 destructor TMainFormLayout.Destroy;
 begin
+  FZoom.Layout := nil;
   FreeAndNil(FImageView);
   FreeAndNil(FPaintBox);
   FreeAndNil(FDockedControlsPanel);

+ 5 - 4
lazpaint/uzoom.pas

@@ -47,7 +47,7 @@ type
     procedure UpdateLabel;
     function RoundZoom(AValue: single): single;
   public
-    constructor Create(ALabelCurrentZoom: TLabel; AEditZoom: TEdit; ALayout: TCustomMainFormLayout);
+    constructor Create(ALabelCurrentZoom: TLabel; AEditZoom: TEdit);
     destructor Destroy; override;
     procedure ZoomOriginal;
     procedure ZoomFit(AImageWidth,AImageHeight: integer);
@@ -57,6 +57,7 @@ type
     procedure ClearPosition;
     procedure DoAction(const AName: string);
     function GetScaledArea(const AWorkArea: TRect; AImageWidth, AImageHeight: integer; var AViewOffset: TPoint): TRect;
+    property Layout: TCustomMainFormLayout read FLayout write FLayout;
     property EditingZoom: boolean read GetEditingZoom write SetEditingZoom;
     property Factor: single read GetZoomFactor write SetZoomFactor;
     property OnZoomChanged: TOnZoomChangedHandler read FOnZoomChangedHandler write FOnZoomChangedHandler;
@@ -193,11 +194,10 @@ begin
   if not (Key in['0'..'9',#8]) then Key := #0;
 end;
 
-constructor TZoom.Create(ALabelCurrentZoom: TLabel; AEditZoom: TEdit;
-  ALayout: TCustomMainFormLayout);
+constructor TZoom.Create(ALabelCurrentZoom: TLabel; AEditZoom: TEdit);
 begin
   inherited Create;
-  FLayout := ALayout;
+  FLayout := nil;
   FLabelCurrentZoom := ALabelCurrentZoom;
   FLabelCurrentZoom.OnClick := @LabelCurrentZoom_Click;
   FEditZoom := AEditZoom;
@@ -229,6 +229,7 @@ const pixelMargin = 0;
 var zx,zy: single;
   pictureArea: TRect;
 begin
+  if FLayout = nil then exit;
   pictureArea := FLayout.WorkArea;
   if (AImageWidth = 0) or (AImageHeight = 0) or (pictureArea.right-pictureArea.Left <= pixelMargin)
     or (pictureArea.Bottom-pictureArea.top <= pixelMargin) then exit;