mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 07:36:19 +02:00
IDEIntf: fixed designer mediator grand child bounds
git-svn-id: trunk@21668 -
This commit is contained in:
parent
b6cf29d755
commit
9d47b22a8e
@ -2371,4 +2371,3 @@ msgstr "Laužyti tekstą"
|
|||||||
msgid "Yes"
|
msgid "Yes"
|
||||||
msgstr "Taip"
|
msgstr "Taip"
|
||||||
|
|
||||||
|
|
||||||
|
@ -616,10 +616,14 @@ procedure TSelectedControl.SetFormRelativeBounds(ALeft, ATop, AWidth,
|
|||||||
AHeight: integer);
|
AHeight: integer);
|
||||||
var
|
var
|
||||||
ParentOffset: TPoint;
|
ParentOffset: TPoint;
|
||||||
|
OldBounds: TRect;
|
||||||
begin
|
begin
|
||||||
if not FIsTComponent then exit;
|
if not FIsTComponent then exit;
|
||||||
if Owner.Mediator<>nil then begin
|
if Owner.Mediator<>nil then begin
|
||||||
|
Owner.Mediator.GetBounds(TComponent(FPersistent),OldBounds);
|
||||||
ParentOffset:=Owner.Mediator.GetComponentOriginOnForm(TComponent(FPersistent));
|
ParentOffset:=Owner.Mediator.GetComponentOriginOnForm(TComponent(FPersistent));
|
||||||
|
dec(ParentOffset.X,OldBounds.Left);
|
||||||
|
dec(ParentOffset.Y,OldBounds.Top);
|
||||||
Owner.Mediator.SetBounds(TComponent(FPersistent),
|
Owner.Mediator.SetBounds(TComponent(FPersistent),
|
||||||
Bounds(ALeft-ParentOffset.X,ATop-ParentOffset.Y,AWidth,AHeight));
|
Bounds(ALeft-ParentOffset.X,ATop-ParentOffset.Y,AWidth,AHeight));
|
||||||
end else begin
|
end else begin
|
||||||
@ -639,9 +643,8 @@ begin
|
|||||||
if Owner.Mediator<>nil then begin
|
if Owner.Mediator<>nil then begin
|
||||||
ALeftTop:=Owner.Mediator.GetComponentOriginOnForm(TComponent(FPersistent));
|
ALeftTop:=Owner.Mediator.GetComponentOriginOnForm(TComponent(FPersistent));
|
||||||
Owner.Mediator.GetBounds(TComponent(FPersistent),CurBounds);
|
Owner.Mediator.GetBounds(TComponent(FPersistent),CurBounds);
|
||||||
OffsetRect(CurBounds,ALeftTop.X,ALeftTop.Y);
|
ALeft:=ALeftTop.X;
|
||||||
ALeft:=CurBounds.Left;
|
ATop:=ALeftTop.Y;
|
||||||
ATop:=CurBounds.Top;
|
|
||||||
AWidth:=CurBounds.Right-CurBounds.Left;
|
AWidth:=CurBounds.Right-CurBounds.Left;
|
||||||
AHeight:=CurBounds.Bottom-CurBounds.Top;
|
AHeight:=CurBounds.Bottom-CurBounds.Top;
|
||||||
end else begin
|
end else begin
|
||||||
|
@ -415,21 +415,18 @@ var
|
|||||||
Parent: TComponent;
|
Parent: TComponent;
|
||||||
ClientArea: TRect;
|
ClientArea: TRect;
|
||||||
ScrollOffset: TPoint;
|
ScrollOffset: TPoint;
|
||||||
ParentBounds: TRect;
|
CurBounds: TRect;
|
||||||
NextParent: TComponent;
|
|
||||||
begin
|
begin
|
||||||
Result:=Point(0,0);
|
Result:=Point(0,0);
|
||||||
while AComponent<>nil do begin
|
while AComponent<>nil do begin
|
||||||
Parent:=AComponent.GetParentComponent;
|
Parent:=AComponent.GetParentComponent;
|
||||||
if Parent=nil then break;
|
if Parent=nil then break;
|
||||||
NextParent:=Parent.GetParentComponent;
|
GetBounds(AComponent,CurBounds);
|
||||||
if NextParent<>nil then
|
inc(Result.X,CurBounds.Left);
|
||||||
GetBounds(Parent,ParentBounds)
|
inc(Result.Y,CurBounds.Top);
|
||||||
else
|
|
||||||
ParentBounds:=Rect(0,0,0,0);
|
|
||||||
GetClientArea(Parent,ClientArea,ScrollOffset);
|
GetClientArea(Parent,ClientArea,ScrollOffset);
|
||||||
inc(Result.X,ParentBounds.Left+ClientArea.Left+ScrollOffset.X);
|
inc(Result.X,ClientArea.Left+ScrollOffset.X);
|
||||||
inc(Result.Y,ParentBounds.Top+ClientArea.Top+ScrollOffset.Y);
|
inc(Result.Y,ClientArea.Top+ScrollOffset.Y);
|
||||||
AComponent:=Parent;
|
AComponent:=Parent;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -471,14 +468,18 @@ var
|
|||||||
ChildBounds: TRect;
|
ChildBounds: TRect;
|
||||||
Found: Boolean;
|
Found: Boolean;
|
||||||
Childs: TFPList;
|
Childs: TFPList;
|
||||||
|
Offset: TPoint;
|
||||||
begin
|
begin
|
||||||
Result:=Root;
|
Result:=Root;
|
||||||
while Result<>nil do begin
|
while Result<>nil do begin
|
||||||
GetClientArea(Result,ClientArea,ScrollOffset);
|
GetClientArea(Result,ClientArea,ScrollOffset);
|
||||||
|
Offset:=GetComponentOriginOnForm(Result);
|
||||||
|
//DebugLn(['TDesignerMediator.ComponentAtPos Parent=',DbgSName(Result),' Offset=',dbgs(Offset)]);
|
||||||
|
OffsetRect(ClientArea,Offset.X,Offset.Y);
|
||||||
Childs:=TFPList.Create;
|
Childs:=TFPList.Create;
|
||||||
try
|
try
|
||||||
GetChilds(Result,Childs);
|
GetChilds(Result,Childs);
|
||||||
//DebugLn(['TDesignerMediator.ComponentAtPos Result=',DbgSName(Result),' ChildCount=',childs.Count,' ']);
|
//DebugLn(['TDesignerMediator.ComponentAtPos Result=',DbgSName(Result),' ChildCount=',childs.Count,' ClientArea=',dbgs(ClientArea)]);
|
||||||
Found:=false;
|
Found:=false;
|
||||||
// iterate backwards (z-order)
|
// iterate backwards (z-order)
|
||||||
for i:=Childs.Count-1 downto 0 do begin
|
for i:=Childs.Count-1 downto 0 do begin
|
||||||
@ -494,6 +495,7 @@ begin
|
|||||||
GetBounds(Child,ChildBounds);
|
GetBounds(Child,ChildBounds);
|
||||||
OffsetRect(ChildBounds,ClientArea.Left+ScrollOffset.X,
|
OffsetRect(ChildBounds,ClientArea.Left+ScrollOffset.X,
|
||||||
ClientArea.Top+ScrollOffset.Y);
|
ClientArea.Top+ScrollOffset.Y);
|
||||||
|
//DebugLn(['TDesignerMediator.ComponentAtPos ChildBounds=',dbgs(ChildBounds),' p=',dbgs(p)]);
|
||||||
if PtInRect(ChildBounds,p) then begin
|
if PtInRect(ChildBounds,p) then begin
|
||||||
Found:=true;
|
Found:=true;
|
||||||
Result:=Child;
|
Result:=Child;
|
||||||
|
Loading…
Reference in New Issue
Block a user