File: wsreferences.pp

package info (click to toggle)
lazarus 4.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 275,760 kB
  • sloc: pascal: 2,341,904; xml: 509,420; makefile: 348,726; cpp: 93,608; sh: 3,387; java: 609; perl: 297; sql: 222; ansic: 137
file content (137 lines) | stat: -rw-r--r-- 3,710 bytes parent folder | download | duplicates (4)
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.