1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
{ $Id$}
{
*****************************************************************************
* wsreferences.pp *
* --------------- *
* *
* *
*****************************************************************************
*****************************************************************************
This file is part of the Lazarus Component Library (LCL)
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
}
unit WSReferences;
{$mode objfpc}{$H+}
{$I lcl_defines.inc}
interface
//uses
// Types;
type
// use TLCLHandle instead of THandle since THandle = longint under 64bit linux
TLCLHandle = PtrUInt;
PLCLHandle = ^TLCLHandle;
{ TWSReference }
{
Abstract (temporary) base object for all references to WS classes.
This reference replaces the functionality of a Handle.
An object is choosen to disallow assignments of different types of handles
}
PWSReference = ^TWSReference;
TWSReference = object
private
function GetAllocated: Boolean; inline;
protected
FRef: record
case Byte of
0: (Ptr: Pointer);
1: (Handle: TLCLHandle);
end;
public
// NOTE: These _Methods are temporary and for widgetset use only.
// They can be removed anytime, without notice
procedure _Clear;
procedure _Init(APtr: Pointer);
procedure _Init(AHandle: TLCLHandle);
property _Handle: TLCLHandle read FRef.Handle;
//----
property Allocated: Boolean read GetAllocated;
property Ptr: Pointer read FRef.Ptr;
end;
// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
//
// All properties with _ are temporary and for lcl use only.
// They can be removed anytime, without notice
//
// (don't complain that I didn't warn you)
TWSCustomImageListReference = object(TWSReference)
public
property Handle: TLCLHandle read FRef.Handle;
end;
TWSGDIObjReference = object(TWSReference)
end;
TWSBitmapReference = object(TWSGDIObjReference)
property Handle: TLCLHandle read FRef.Handle;
end;
TWSBrushReference = object(TWSGDIObjReference)
property _lclHandle: TLCLHandle write FRef.Handle;
property Handle: TLCLHandle read FRef.Handle;
end;
TWSPenReference = object(TWSGDIObjReference)
property _lclHandle: TLCLHandle write FRef.Handle;
property Handle: TLCLHandle read FRef.Handle;
end;
TWSFontReference = object(TWSGDIObjReference)
property _lclHandle: TLCLHandle write FRef.Handle;
property Handle: TLCLHandle read FRef.Handle;
end;
TWSRegionReference = object(TWSGDIObjReference)
property _lclHandle: TLCLHandle write FRef.Handle;
property Handle: TLCLHandle read FRef.Handle;
end;
TWSDeviceContextReference = object(TWSReference)
property Handle: TLCLHandle read FRef.Handle;
end;
TWSIconReference = object(TWSReference)
property Handle: TLCLHandle read FRef.Handle;
end;
implementation
{ TWSReference }
procedure TWSReference._Clear;
begin
FRef.Ptr := nil;
end;
procedure TWSReference._Init(APtr: Pointer);
begin
FRef.Ptr := APtr;
end;
procedure TWSReference._Init(AHandle: TLCLHandle);
begin
FRef.Handle := AHandle;
end;
function TWSReference.GetAllocated: Boolean;
begin
Result := FRef.Ptr <> nil;
end;
end.
|