From b92338853eb3c62552f0a070ea69683f01a9fb45 Mon Sep 17 00:00:00 2001 From: blikblum Date: Sat, 12 Apr 2008 10:23:51 +0000 Subject: [PATCH] * Fix selection rectangle draw when header is visible git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@415 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../virtualtreeview-unstable/VirtualTrees.pas | 24 +++++++++++++++---- .../virtualtreeview-unstable/vtlogger.pas | 1 + 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/components/virtualtreeview-unstable/VirtualTrees.pas b/components/virtualtreeview-unstable/VirtualTrees.pas index 867e937b2..4595c2cb7 100644 --- a/components/virtualtreeview-unstable/VirtualTrees.pas +++ b/components/virtualtreeview-unstable/VirtualTrees.pas @@ -16568,6 +16568,9 @@ var MaxValue: Integer; begin + //lclheader + if hoVisible in FHeader.Options then + Dec(Y, FHeader.Height); if tsDrawSelecting in FStates then FLastSelRect := FNewSelRect; FNewSelRect.BottomRight := Point(X + FEffectiveOffsetX, Y - FOffsetY); @@ -20321,6 +20324,11 @@ begin FDrawSelShiftState := ShiftState; FNewSelRect := Rect(Message.XPos + FEffectiveOffsetX, Message.YPos - FOffsetY, Message.XPos + FEffectiveOffsetX, Message.YPos - FOffsetY); + //lclheader + if hoVisible in FHeader.Options then + OffsetRect(FNewSelRect, 0, -FHeader.Height); + Logger.Send([lcSelection],'FNewSelRect', FNewSelRect); + FLastSelRect := Rect(0, 0, 0, 0); if not IsCellHit then Exit; @@ -21171,7 +21179,11 @@ begin begin if CalculateSelectionRect(X, Y) then begin - InvalidateRect(Handle, @FNewSelRect, False); + //lclheader + R := FNewSelRect; + if hoVisible in FHeader.Options then + OffsetRect(R, 0, FHeader.Height); + InvalidateRect(Handle, @R, False); UpdateWindow(Handle); if (Abs(FNewSelRect.Right - FNewSelRect.Left) > DragManager.DragThreshold) or (Abs(FNewSelRect.Bottom - FNewSelRect.Top) > DragManager.DragThreshold) then @@ -21230,6 +21242,8 @@ begin begin UnionRect(R, OrderRect(FNewSelRect), OrderRect(FLastSelRect)); OffsetRect(R, -FEffectiveOffsetX, FOffsetY); + if hoVisible in FHeader.Options then + OffsetRect(R, 0, FHeader.Height); InvalidateRect(Handle, @R, False); end; UpdateWindow(Handle); @@ -21705,6 +21719,7 @@ var BackColorBackup: COLORREF; // used to restore forground and background colors when drawing a selection rectangle begin + Logger.Send([lcSelection], 'SelectionRect at PaintSelection', SelectionRect); if ((FDrawSelectionMode = smDottedRectangle) and not (tsUseThemes in FStates)) or not MMXAvailable then begin @@ -26601,10 +26616,10 @@ begin PaintInfo.Canvas := NodeBitmap.Canvas; NodeBitmap.Canvas.Lock; try - Logger.Send([lcPaintDetails],'FNewSelRect',FNewSelRect); + Logger.Send([lcPaintDetails],'FNewSelRect', FNewSelRect); // Prepare the current selection rectangle once. The corner points are absolute tree coordinates. SelectionRect := OrderRect(FNewSelRect); - Logger.Send([lcPaintDetails],'SelectionRect',SelectionRect); + Logger.Send([lcPaintDetails, lcSelection],'SelectionRect', SelectionRect); DrawSelectionRect := IsMouseSelecting and not IsRectEmpty(SelectionRect); Logger.Watch([lcPaintDetails],'DrawSelectionRect',DrawSelectionRect); // R represents an entire node (all columns), but is a bit unprecise when it comes to @@ -26644,6 +26659,7 @@ begin if DrawSelectionRect then OffsetRect(SelectionRect, 0, -BaseOffset); + Logger.Send([lcSelection], 'SelectionRect fixed by BaseOffset', SelectionRect); // The target rectangle holds the coordinates of the exact area to blit in target canvas coordinates. // It is usually smaller than an entire node and wanders while the paint loop advances. MaximumRight := Target.X + (Window.Right - Window.Left); @@ -26947,7 +26963,7 @@ begin PaintSelectionRectangle(PaintInfo.Canvas, Window.Left, SelectionRect, Rect(0, 0, NodeBitmap.Width, NodeBitmap.Height)); end; - Logger.SendBitmap([lcPaintBitmap],'NodeBitmap',NodeBitmap); + Logger.SendBitmap([lcPaintBitmap],'NodeBitmap ' + IntToStr(PaintInfo.Node^.Index), NodeBitmap); Logger.SendIf([lcPaintDetails, lcHeaderOffset],'TargetRect.Top < Target.Y '+ Logger.RectToStr(TargetRect) +' '+Logger.PointToStr(Target),TargetRect.Top < Target.Y); {$ifdef Gtk} diff --git a/components/virtualtreeview-unstable/vtlogger.pas b/components/virtualtreeview-unstable/vtlogger.pas index f0b8fb5cd..c72e850ef 100644 --- a/components/virtualtreeview-unstable/vtlogger.pas +++ b/components/virtualtreeview-unstable/vtlogger.pas @@ -35,6 +35,7 @@ const lcOle = 20; lcPanning = 21; lcHeaderOffset = 22; + lcSelection = 23; var Logger: TLCLLogger;