fpvviewer: Now it fully redraws when dragging and syncs the control pos info with the spins

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2720 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2013-04-05 09:11:36 +00:00
parent 265fe232b5
commit 393a073c75
3 changed files with 40 additions and 6 deletions

View File

@@ -18,6 +18,8 @@ type
public
PosX, PosY: Integer;
Drawing: TBitmap;
RedrawCallback: TNotifyEvent;
PosChangedCallback: TNotifyEvent;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure EraseBackground(DC: HDC); override;
@@ -78,7 +80,7 @@ begin
Canvas.Brush.Color := clWhite;
Canvas.Brush.Style := bsSolid;
Canvas.FillRect(Self.ClientRect);
Canvas.Draw(PosX, PosY, Drawing);
Canvas.Draw(0, 0, Drawing); // (PosX, PosY,..
// inherited Paint;
end;
@@ -93,6 +95,8 @@ begin
else
Exit;
end;
if Assigned(PosChangedCallback) then PosChangedCallback(Self);
if Assigned(RedrawCallback) then RedrawCallback(Self);
Invalidate();
end;
@@ -119,6 +123,8 @@ begin
DragDropStarted := False;
PosX := PosX + (X - DragStartPos.X);
PosY := PosY + (Y - DragStartPos.Y);
if Assigned(PosChangedCallback) then PosChangedCallback(Self);
if Assigned(RedrawCallback) then RedrawCallback(Self);
Invalidate();
end;
end;
@@ -127,6 +133,7 @@ procedure TFPVVDrawer.Clear;
begin
PosX := 0;
PosY := 0;
if Assigned(PosChangedCallback) then PosChangedCallback(Self);
end;
end.

View File

@@ -14,7 +14,7 @@ object frmFPVViewer: TfrmFPVViewer
Height = 424
Top = 176
Width = 485
PageIndex = 1
PageIndex = 0
Align = alClient
Anchors = [akLeft, akBottom]
TabOrder = 0
@@ -158,6 +158,7 @@ object frmFPVViewer: TfrmFPVViewer
Increment = 100
MaxValue = 1000
MinValue = -1000
OnChange = spinAdjustYChange
TabOrder = 7
end
object spinAdjustX: TSpinEdit
@@ -168,6 +169,7 @@ object frmFPVViewer: TfrmFPVViewer
Increment = 50
MaxValue = 1000
MinValue = -1000
OnChange = spinAdjustXChange
TabOrder = 8
end
object Label3: TLabel

View File

@@ -47,12 +47,16 @@ type
procedure buttonRenderingTestClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure spinAdjustXChange(Sender: TObject);
procedure spinAdjustYChange(Sender: TObject);
procedure spinScaleChange(Sender: TObject);
private
procedure MyContourLineDrawingProc(z,x1,y1,x2,y2: Double);
function FPVDebugAddItemProc(AStr: string; AParent: Pointer): Pointer;
procedure HandleDrawerMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
procedure HandleDrawerPosChanged(Sender: TObject);
procedure HandleDrawerRedraw(Sender: TObject);
public
{ public declarations }
Drawer: TFPVVDrawer;
@@ -87,8 +91,6 @@ begin
notebook.PageIndex := 0;
Drawer.Clear;
Vec := TvVectorialDocument.Create;
try
// If we desire, force a encoding for the read operation
@@ -124,8 +126,8 @@ begin
Vec.GetPage(0).DrawBackground(Drawer.Drawing.Canvas);
Vec.GetPage(0).Render(
Drawer.Drawing.Canvas,
FPVVIEWER_SPACE_FOR_NEGATIVE_COORDS + spinAdjustX.Value,
Drawer.Drawing.Height - FPVVIEWER_SPACE_FOR_NEGATIVE_COORDS + spinAdjustY.Value,
FPVVIEWER_SPACE_FOR_NEGATIVE_COORDS + Drawer.PosX,
Drawer.Drawing.Height - FPVVIEWER_SPACE_FOR_NEGATIVE_COORDS + Drawer.PosY,
spinScale.Value,
-1 * spinScale.Value);
Drawer.Invalidate;
@@ -360,6 +362,8 @@ begin
Drawer.AnchorClient(5);
Drawer.TabStop := True;
Drawer.OnMouseWheel := @HandleDrawerMouseWheel;
Drawer.PosChangedCallback := @HandleDrawerPosChanged;
Drawer.RedrawCallback := @HandleDrawerRedraw;
end;
procedure TfrmFPVViewer.FormDestroy(Sender: TObject);
@@ -367,6 +371,16 @@ begin
Drawer.Free;
end;
procedure TfrmFPVViewer.spinAdjustXChange(Sender: TObject);
begin
Drawer.PosX := spinAdjustX.Value;
end;
procedure TfrmFPVViewer.spinAdjustYChange(Sender: TObject);
begin
Drawer.PosY := spinAdjustY.Value;
end;
procedure TfrmFPVViewer.spinScaleChange(Sender: TObject);
begin
if spinScale.Value <= 0.2 then spinScale.Increment := 0.01
@@ -405,5 +419,16 @@ begin
btnVisualize.Click();
end;
procedure TfrmFPVViewer.HandleDrawerPosChanged(Sender: TObject);
begin
spinAdjustX.Value := Drawer.PosX;
spinAdjustY.Value := Drawer.PosY;
end;
procedure TfrmFPVViewer.HandleDrawerRedraw(Sender: TObject);
begin
btnVisualizeClick(Sender);
end;
end.