mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-07-19 13:45:58 +02:00
LazReport, previous step for proper drawing in designer: isolating selection and object draws
git-svn-id: trunk@40540 -
This commit is contained in:
parent
afb022bcb4
commit
17eb1a44d9
@ -172,8 +172,17 @@ type
|
||||
procedure DClick(Sender: TObject);
|
||||
procedure MoveResize(Kx,Ky:Integer; UseFrames,AResize: boolean);
|
||||
|
||||
// focusrect
|
||||
procedure NPDrawFocusRect;
|
||||
procedure NPEraseFocusRect;
|
||||
// objects
|
||||
procedure NPDrawLayerObjects(Rgn: HRGN; Start:Integer=10000);
|
||||
procedure NPRedrawViewCheckBand(t: TfrView);
|
||||
// selection
|
||||
procedure NPPaintSelection; // this is the only function that works during Paint
|
||||
procedure NPDrawSelection;
|
||||
procedure NPEraseSelection;
|
||||
|
||||
protected
|
||||
procedure Paint; override;
|
||||
procedure WMEraseBkgnd(var {%H-}Message: TLMEraseBkgnd); message LM_ERASEBKGND;
|
||||
@ -1151,7 +1160,7 @@ begin
|
||||
SelectClipRgn(Canvas.Handle, 0);
|
||||
|
||||
if not Down then
|
||||
DrawPage(dmSelection);
|
||||
NPPaintSelection;
|
||||
|
||||
{$IFDEF DebugLR}
|
||||
DebugLnExit('TfrDesignerPage.Draw DONE');
|
||||
@ -1286,7 +1295,7 @@ begin
|
||||
NPEraseFocusRect;
|
||||
|
||||
RFlag := False;
|
||||
DrawPage(dmSelection);
|
||||
NPEraseSelection;
|
||||
Down := True;
|
||||
DontChange := False;
|
||||
if Button = mbLeft then
|
||||
@ -1419,7 +1428,7 @@ begin
|
||||
|
||||
if Button = mbRight then
|
||||
begin
|
||||
DrawPage(dmSelection);
|
||||
NPDrawSelection;
|
||||
Down := False;
|
||||
GetCursorPos(p{%H-});
|
||||
//FDesigner.Popup1Popup(nil);
|
||||
@ -1640,19 +1649,8 @@ begin
|
||||
end;
|
||||
|
||||
SelNum := 1;
|
||||
if t.Typ = gtBand then
|
||||
begin
|
||||
{$IFDEF DebugLR}
|
||||
DebugLn('A new band was inserted');
|
||||
{$ENDIF}
|
||||
Draw(10000, t.GetClipRgn(rtExtended))
|
||||
end
|
||||
else
|
||||
begin
|
||||
t.Draw(Canvas);
|
||||
DrawSelection(t);
|
||||
end;
|
||||
|
||||
NPRedrawViewCheckBand(t);
|
||||
|
||||
with FDesigner do
|
||||
begin
|
||||
SelectionChanged;
|
||||
@ -1703,8 +1701,7 @@ begin
|
||||
t.FrameWidth := LastLineWidth;
|
||||
t.FrameColor := LastFrameColor;
|
||||
SelNum := 1;
|
||||
t.Draw(Canvas);
|
||||
DrawSelection(t);
|
||||
NPRedrawViewCheckBand(t);
|
||||
FDesigner.SelectionChanged;
|
||||
FDesigner.AddUndoAction(acInsert);
|
||||
{$IFDEF DebugLR}
|
||||
@ -1737,7 +1734,7 @@ begin
|
||||
end;
|
||||
GetMultipleSelected;
|
||||
FDesigner.SelectionChanged;
|
||||
DrawPage(dmSelection);
|
||||
NPDrawSelection;
|
||||
{$IFDEF DebugLR}
|
||||
DebugLnExit('TfrDesignerPage.MUp DONE: objects contained in frame');
|
||||
{$ENDIF}
|
||||
@ -1758,7 +1755,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
GetMultipleSelected;
|
||||
Draw(TopSelected, ClipRgn);
|
||||
NPDrawLayerObjects(ClipRgn, TopSelected);
|
||||
{$IFDEF DebugLR}
|
||||
DebugLnExit('TfrDesignerPage.MUp DONE: Splitting');
|
||||
{$ENDIF}
|
||||
@ -1768,7 +1765,7 @@ begin
|
||||
//resizing several objects
|
||||
if Moved and MRFlag and (Cursor <> crDefault) then
|
||||
begin
|
||||
Draw(TopSelected, ClipRgn);
|
||||
NPDrawLayerObjects(ClipRgn, TopSelected);
|
||||
{$IFDEF DebugLR}
|
||||
DebugLnExit('TfrDesignerPage.MUp DONE: resizing several objects');
|
||||
{$ENDIF}
|
||||
@ -1778,7 +1775,7 @@ begin
|
||||
//redrawing all moved or resized objects
|
||||
if not Moved then
|
||||
begin
|
||||
DrawPage(dmSelection);
|
||||
NPDrawSelection;
|
||||
{$IFDEF DebugLR}
|
||||
DebugLn('redrawing all moved or resized objects');
|
||||
{$ENDIF}
|
||||
@ -1789,7 +1786,7 @@ begin
|
||||
if SelNum > 1 then
|
||||
begin
|
||||
//JRA DebugLn('HERE, ClipRgn', Dbgs(ClipRgn));
|
||||
Draw(TopSelected, ClipRgn);
|
||||
NPDrawLayerObjects(ClipRgn, TopSelected);
|
||||
GetMultipleSelected;
|
||||
FDesigner.ShowPosition;
|
||||
end
|
||||
@ -1799,7 +1796,7 @@ begin
|
||||
NormalizeCoord(t);
|
||||
if Cursor <> crDefault then
|
||||
t.Resized;
|
||||
Draw(TopSelected, ClipRgn);
|
||||
NPDrawLayerObjects(ClipRgn, TopSelected);
|
||||
FDesigner.ShowPosition;
|
||||
end;
|
||||
end;
|
||||
@ -2104,8 +2101,8 @@ begin
|
||||
DrawPage(dmShape)
|
||||
else
|
||||
begin
|
||||
Draw(10000, hr);
|
||||
Draw(10000, hr1);
|
||||
NPDrawLayerObjects(hr);
|
||||
NPDrawLayerObjects(hr1);
|
||||
end;
|
||||
|
||||
Inc(LastX, kx);
|
||||
@ -2265,7 +2262,7 @@ begin
|
||||
Hr2:=t.GetClipRgn(rtExtended);
|
||||
CombineRgn(hr1, hr, hr2, RGN_OR);
|
||||
DeleteObject(Hr2);
|
||||
Draw(10000, hr1);
|
||||
NPDrawLayerObjects(hr1);
|
||||
DeleteObject(Hr);
|
||||
{$IFDEF DebugLR}
|
||||
DebugLn('MDown resizing 2');
|
||||
@ -2341,7 +2338,8 @@ begin
|
||||
begin
|
||||
CombineRgn(hr, hr, hr1, RGN_OR);
|
||||
DeleteObject(hr1);
|
||||
Draw(10000, hr);
|
||||
|
||||
NPDrawLayerObjects(hr);
|
||||
end;
|
||||
{$IFDEF LCLQt}Invalidate;{$endif}
|
||||
{$IFDEF LCLCarbon}Invalidate;{$endif}
|
||||
@ -2357,6 +2355,44 @@ begin
|
||||
DrawFocusRect(OldRect);
|
||||
end;
|
||||
|
||||
procedure TfrDesignerPage.NPDrawLayerObjects(Rgn: HRGN; Start:Integer=10000);
|
||||
begin
|
||||
// here one just have to invalidate Rgn and objects will be drawn normally
|
||||
// NOTE: this case, one needs to delete Rgn
|
||||
Draw(Start, Rgn);
|
||||
end;
|
||||
|
||||
procedure TfrDesignerPage.NPDrawSelection;
|
||||
begin
|
||||
DrawPage(dmSelection);
|
||||
end;
|
||||
|
||||
procedure TfrDesignerPage.NPPaintSelection;
|
||||
begin
|
||||
DrawPage(dmSelection);
|
||||
end;
|
||||
|
||||
procedure TfrDesignerPage.NPEraseSelection;
|
||||
begin
|
||||
DrawPage(dmSelection);
|
||||
end;
|
||||
|
||||
procedure TfrDesignerPage.NPRedrawViewCheckBand(t: TfrView);
|
||||
begin
|
||||
if t.Typ = gtBand then
|
||||
begin
|
||||
{$IFDEF DebugLR}
|
||||
DebugLn('A new band was inserted');
|
||||
{$ENDIF}
|
||||
Draw(10000, t.GetClipRgn(rtExtended))
|
||||
end
|
||||
else
|
||||
begin
|
||||
t.Draw(Canvas);
|
||||
DrawSelection(t);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrDesignerPage.CMMouseLeave(var Message: TLMessage);
|
||||
begin
|
||||
if (Mode = mdInsert) and not Down then
|
||||
@ -3272,7 +3308,7 @@ end;
|
||||
|
||||
procedure TfrDesignerForm.RedrawPage;
|
||||
begin
|
||||
PageView.Draw(10000, 0);
|
||||
PageView.NPDrawLayerObjects(0);
|
||||
end;
|
||||
|
||||
procedure TfrDesignerForm.OnModify(sender: TObject);
|
||||
@ -3439,11 +3475,11 @@ begin
|
||||
t := TfrView(Objects[TopSelected]);
|
||||
if not (ssAlt in Shift) then
|
||||
begin
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPEraseSelection;
|
||||
Unselect;
|
||||
SelNum := 1;
|
||||
t1.Selected := True;
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPDrawSelection;
|
||||
end
|
||||
else
|
||||
begin
|
||||
@ -3468,7 +3504,7 @@ end;
|
||||
procedure TfrDesignerForm.MoveObjects(dx, dy: Integer; aResize: Boolean);
|
||||
begin
|
||||
AddUndoAction(acEdit);
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPEraseSelection;
|
||||
PageView.MoveResize(Dx,Dy, false, aResize);
|
||||
ShowPosition;
|
||||
PageView.GetMultipleSelected;
|
||||
@ -3490,7 +3526,7 @@ var
|
||||
begin
|
||||
AddUndoAction(acDelete);
|
||||
GetRegion; // JRA 3
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPEraseSelection;
|
||||
for i := Objects.Count - 1 downto 0 do
|
||||
begin
|
||||
t := TfrView(Objects[i]);
|
||||
@ -3883,10 +3919,10 @@ begin
|
||||
View := TfrView(TMenuItem(Sender).Tag);
|
||||
if Objects.IndexOf(View)>=0 then
|
||||
begin
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPEraseSelection;
|
||||
SelectSameClass(View);
|
||||
PageView.GetMultipleSelected;
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPDrawSelection;
|
||||
SelectionChanged;
|
||||
end;
|
||||
end;
|
||||
@ -3960,7 +3996,7 @@ begin
|
||||
AddUndoAction(acEdit);
|
||||
|
||||
if WithRedraw then begin
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPEraseSelection;
|
||||
GetRegion;
|
||||
end;
|
||||
|
||||
@ -3971,7 +4007,7 @@ begin
|
||||
end;
|
||||
|
||||
if WithRedraw then
|
||||
PageView.Draw(TopSelected, ClipRgn);
|
||||
PageView.NPDrawLayerObjects(ClipRgn, TopSelected);
|
||||
end;
|
||||
|
||||
// data=0 remove all borders
|
||||
@ -4239,7 +4275,7 @@ begin
|
||||
if Busy then
|
||||
Exit;
|
||||
AddUndoAction(acEdit);
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPEraseSelection;
|
||||
GetRegion;
|
||||
b:=(Sender as TControl).Tag;
|
||||
|
||||
@ -4377,7 +4413,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
PageView.Draw(TopSelected, ClipRgn);
|
||||
PageView.NPDrawLayerObjects(ClipRgn, TopSelected);
|
||||
|
||||
ActiveControl := nil;
|
||||
if b in [20, 21] then
|
||||
@ -4768,8 +4804,8 @@ begin
|
||||
View := TfrView(Objects[TopSelected]);
|
||||
if ShowEditor = mrOk then
|
||||
begin
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.Draw(TopSelected, View.GetClipRgn(rtExtended));
|
||||
PageView.NPDrawSelection;
|
||||
PageView.NPDrawLayerObjects(View.GetClipRgn(rtExtended), TopSelected);
|
||||
end;
|
||||
end;
|
||||
ActiveControl := nil;
|
||||
@ -4794,16 +4830,16 @@ begin
|
||||
if ShowModal = mrOk then
|
||||
begin
|
||||
AddUndoAction(acEdit);
|
||||
PageView.DrawPage(dmSelection);
|
||||
(t as TfrPictureView).Picture.Assign(Image1.Picture);
|
||||
PageView.Draw(TopSelected, t.GetClipRgn(rtExtended));
|
||||
PageView.NPDrawSelection;
|
||||
PageView.NPDrawLayerObjects(t.GetClipRgn(rtExtended), TopSelected);
|
||||
end;
|
||||
end;
|
||||
frGEditorForm.Free;
|
||||
end
|
||||
else if t.Typ = gtBand then
|
||||
begin
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPEraseSelection;
|
||||
bt := (t as TfrBandView).BandType;
|
||||
if bt in [btMasterData, btDetailData, btSubDetailData] then
|
||||
begin
|
||||
@ -4825,7 +4861,7 @@ begin
|
||||
end
|
||||
else
|
||||
PageView.DFlag := False;
|
||||
PageView.Draw(TopSelected, t.GetClipRgn(rtExtended));
|
||||
PageView.NPDrawLayerObjects(t.GetClipRgn(rtExtended), TopSelected);
|
||||
end
|
||||
else if t.Typ = gtSubReport then
|
||||
CurPage := (t as TfrSubReportView).SubPage
|
||||
@ -4836,9 +4872,9 @@ begin
|
||||
begin
|
||||
if frAddIns[i].EditorForm <> nil then
|
||||
begin
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPEraseSelection;
|
||||
frAddIns[i].EditorForm.ShowEditor(t);
|
||||
PageView.Draw(TopSelected, t.GetClipRgn(rtExtended));
|
||||
PageView.NPDrawLayerObjects(t.GetClipRgn(rtExtended), TopSelected);
|
||||
end
|
||||
else
|
||||
ShowMemoEditor;
|
||||
@ -5088,8 +5124,8 @@ end;
|
||||
|
||||
procedure TfrDesignerForm.AfterChange;
|
||||
begin
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.Draw(TopSelected, 0);
|
||||
PageView.NPDrawSelection;
|
||||
PageView.NPDrawLayerObjects(0, TopSelected);
|
||||
ObjInspRefresh;
|
||||
end;
|
||||
|
||||
@ -5241,10 +5277,10 @@ end;
|
||||
|
||||
procedure TfrDesignerForm.SelAllBClick(Sender: TObject); // select all
|
||||
begin
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPEraseSelection;
|
||||
SelectAll;
|
||||
PageView.GetMultipleSelected;
|
||||
PageView.DrawPage(dmSelection);
|
||||
PageView.NPDrawSelection;
|
||||
SelectionChanged;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user