move code from DefaultDockImage to new LCLinf method DrawDefaultDockImage and add Erase parameter (reason: not all widgetset supports on screen drawing and pen ROPs like XOR)

git-svn-id: trunk@13607 -
This commit is contained in:
paul 2008-01-03 14:19:54 +00:00
parent 82db25ed28
commit 1c8516a77f
4 changed files with 45 additions and 72 deletions

View File

@ -60,7 +60,7 @@ type
TDockPerformer = class(TDragDockComon)
private
FDockObject: TDragDockObject;
procedure DefaultDockImage(ADrawRect: TRect);
procedure DefaultDockImage(ADrawRect: TRect; Erase: Boolean);
protected
function Dragging(AControl: TControl): boolean; override;
procedure DragStarted(APosition: TPoint); override;
@ -304,7 +304,7 @@ begin
FDragImageList := FDockObject.GetDragImages;
if FDragImageList <> nil then
FDragImageList.BeginDrag(0, APosition.X, APosition.Y);
DefaultDockImage(FDockObject.DockRect);
DefaultDockImage(FDockObject.DockRect, False);
FDockObject.EraseDockRect := FDockObject.DockRect;
end;
@ -468,8 +468,8 @@ begin
if not CompareMem(@DockRect, @EraseDockRect, SizeOf(TRect)) then
begin
if EraseDockRect.Left <> Maxint then
DefaultDockImage(FDockObject.EraseDockRect);
DefaultDockImage(FDockObject.DockRect);
DefaultDockImage(FDockObject.EraseDockRect, True);
DefaultDockImage(FDockObject.DockRect, False);
EraseDockRect := DockRect;
end;
end;
@ -489,7 +489,7 @@ begin
FDockObject := nil;
SetCaptureControl(nil);
DefaultDockImage(ADockObjectCopy.EraseDockRect);
DefaultDockImage(ADockObjectCopy.EraseDockRect, True);
ADockObjectCopy.Floating := ADockObjectCopy.DragTarget = nil;
Accepted := ADockObjectCopy.DragTarget <> nil;
@ -545,32 +545,9 @@ begin
end;
procedure TDockPerformer.DefaultDockImage(ADrawRect: TRect);
const
PenSize=4;
var
ACanvas: TCanvas;
DC: HDC;
procedure TDockPerformer.DefaultDockImage(ADrawRect: TRect; Erase: Boolean);
begin
DC := GetDC(0);
ACanvas:= TCanvas.Create;
try
ACanvas.Handle:= DC;
ACanvas.Pen.Mode := pmXOR;
ACanvas.Pen.Color := clWhite;
ACanvas.Pen.Width := PenSize;
with ADrawRect do
begin
ACanvas.MoveTo(Left+PenSize, Top+PenSize);
ACanvas.LineTo(Right-PenSize,Top+PenSize);
ACanvas.LineTo(Right-PenSize, Bottom-PenSize);
ACanvas.LineTo(Left+PenSize,Bottom-PenSize);
ACanvas.LineTo(Left+PenSize, Top+PenSize);
end;
finally
ACanvas.Free;
ReleaseDC(0, DC);
end;
WidgetSet.DrawDefaultDockImage(ADrawRect, Erase);
end;
{ TDragManagerDefault }

View File

@ -97,16 +97,6 @@ begin
Result := false;
end;
{$ifdef OldRawImageProcs}
function TWidgetSet.CreateBitmapFromRawImage(const RawImage: TRawImage;
var Bitmap, MaskBitmap: HBitmap; AlwaysCreateMask: boolean): boolean;
begin
Bitmap:=0;
MaskBitmap:=0;
Result := false;
end;
{$endif}
//todo: remove ?
function TWidgetSet.CreateEmptyRegion: hRGN;
begin
@ -150,6 +140,38 @@ procedure TWidgetSet.DrawArrow(Arrow: TComponent; Canvas: TPersistent);
begin
end;
procedure TWidgetSet.DrawDefaultDockImage(ARect: TRect; Erase: Boolean);
const
PenSize=4;
var
DC: HDC;
OldPen, NewPen: HPen;
OldRop: Integer;
LogPen: TLogPen;
begin
LogPen.lopnColor := $00FFFFFF;
LogPen.lopnWidth := Point(PenSize, 0);
LogPen.lopnStyle := PS_SOLID;
DC := GetDC(0);
try
NewPen := CreatePenIndirect(LogPen);
OldPen := SelectObject(DC, NewPen);
OldRop := SetROP2(DC, R2_XORPEN);
with ARect do
begin
MoveToEx(DC, Left+PenSize, Top+PenSize, nil);
LineTo(DC, Right-PenSize,Top+PenSize);
LineTo(DC, Right-PenSize, Bottom-PenSize);
LineTo(DC, Left+PenSize,Bottom-PenSize);
LineTo(DC, Left+PenSize, Top+PenSize);
end;
finally
SetROP2(DC, OldRop);
DeleteObject(SelectObject(DC, OldPen));
ReleaseDC(0, DC);
end;
end;
function TWidgetSet.ExtUTF8Out(DC: HDC; X, Y: Integer; Options: Longint;
Rect: PRect; Str: PChar; Count: Longint; Dx: PInteger): Boolean;
begin
@ -296,14 +318,6 @@ begin
AddKey;
end;
{$ifdef OldRawImageProcs}
function TWidgetSet.GetBitmapRawImageDescription(Bitmap: HBITMAP;
Desc: PRawImageDescription): boolean;
begin
Result:=false;
end;
{$endif}
function TWidgetSet.GetCaretRespondToFocus(handle: HWND;
var ShowHideOnFocus: boolean): Boolean;
begin
@ -326,14 +340,6 @@ begin
Result:=true;
end;
{$ifdef OldRawImageProcs}
function TWidgetSet.GetDeviceRawImageDescription(DC: HDC;
Desc: PRawImageDescription): boolean;
begin
Result := false;
end;
{$endif}
function TWidgetSet.GetDeviceSize(DC: HDC; var p: TPoint): boolean;
begin
p.X := 0;
@ -361,22 +367,6 @@ begin
else Result := nil;
end;
{$ifdef OldRawImageProcs}
function TWidgetSet.GetRawImageFromDevice(SrcDC: HDC;
const SrcRect: TRect; var NewRawImage: TRawImage): boolean;
begin
Result:=false;
end;
{$endif}
{$ifdef OldRawImageProcs}
function TWidgetSet.GetRawImageFromBitmap(SrcBitmap, SrcMaskBitmap: HBITMAP;
const SrcRect: TRect; var NewRawImage: TRawImage): boolean;
begin
Result:=false;
end;
{$endif}
// TODO: remove
function TWidgetSet.GetScrollBarSize(Handle: HWND;
SBStyle: Integer): integer;

View File

@ -149,6 +149,11 @@ begin
WidgetSet.DrawArrow(Arrow, Canvas);
end;
procedure DrawDefaultDockImage(ARect: TRect; Erase: Boolean);
begin
WidgetSet.DrawDefaultDockImage(ARect, Erase);
end;
function ExtUTF8Out(DC: HDC; X, Y: Integer; Options: Longint; Rect: PRect;
Str: PChar; Count: Longint; Dx: PInteger): Boolean;
begin

View File

@ -66,6 +66,7 @@ function CreateStandardCursor(ACursor: SmallInt): hCursor; {$IFDEF IF_BASE_MEMBE
function DCClipRegionValid(DC: HDC): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
procedure DeallocateHWnd(Wnd: HWND); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
procedure DrawArrow(Arrow: TComponent; Canvas: TPersistent); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
procedure DrawDefaultDockImage(ARect: TRect; Erase: Boolean); {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function ExtUTF8Out(DC: HDC; X, Y: Integer; Options: Longint; Rect: PRect; Str: PChar; Count: Longint; Dx: PInteger): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}