Statistics
| Branch: | Tag: | Revision:

root / URectList.pas

History | View | Annotate | Download (2.3 kB)

1 7:88cd8a3d49a8 aksdb
(*
2 7:88cd8a3d49a8 aksdb
 * CDDL HEADER START
3 7:88cd8a3d49a8 aksdb
 *
4 7:88cd8a3d49a8 aksdb
 * The contents of this file are subject to the terms of the
5 7:88cd8a3d49a8 aksdb
 * Common Development and Distribution License, Version 1.0 only
6 7:88cd8a3d49a8 aksdb
 * (the "License").  You may not use this file except in compliance
7 7:88cd8a3d49a8 aksdb
 * with the License.
8 7:88cd8a3d49a8 aksdb
 *
9 7:88cd8a3d49a8 aksdb
 * You can obtain a copy of the license at
10 7:88cd8a3d49a8 aksdb
 * http://www.opensource.org/licenses/cddl1.php.
11 7:88cd8a3d49a8 aksdb
 * See the License for the specific language governing permissions
12 7:88cd8a3d49a8 aksdb
 * and limitations under the License.
13 7:88cd8a3d49a8 aksdb
 *
14 7:88cd8a3d49a8 aksdb
 * When distributing Covered Code, include this CDDL HEADER in each
15 7:88cd8a3d49a8 aksdb
 * file and include the License file at
16 7:88cd8a3d49a8 aksdb
 * http://www.opensource.org/licenses/cddl1.php.  If applicable,
17 7:88cd8a3d49a8 aksdb
 * add the following below this CDDL HEADER, with the fields enclosed
18 7:88cd8a3d49a8 aksdb
 * by brackets "[]" replaced with your own identifying * information:
19 7:88cd8a3d49a8 aksdb
 *      Portions Copyright [yyyy] [name of copyright owner]
20 7:88cd8a3d49a8 aksdb
 *
21 7:88cd8a3d49a8 aksdb
 * CDDL HEADER END
22 7:88cd8a3d49a8 aksdb
 *
23 7:88cd8a3d49a8 aksdb
 *
24 7:88cd8a3d49a8 aksdb
 *      Portions Copyright 2008 Andreas Schneider
25 7:88cd8a3d49a8 aksdb
 *)
26 7:88cd8a3d49a8 aksdb
unit URectList;
27 7:88cd8a3d49a8 aksdb
28 7:88cd8a3d49a8 aksdb
{$mode objfpc}{$H+}
29 7:88cd8a3d49a8 aksdb
30 7:88cd8a3d49a8 aksdb
interface
31 7:88cd8a3d49a8 aksdb
32 7:88cd8a3d49a8 aksdb
uses
33 7:88cd8a3d49a8 aksdb
  SysUtils,Classes;
34 7:88cd8a3d49a8 aksdb
35 7:88cd8a3d49a8 aksdb
type
36 7:88cd8a3d49a8 aksdb
  TRectList = class(TList)
37 7:88cd8a3d49a8 aksdb
  protected
38 7:88cd8a3d49a8 aksdb
    function GetRect(AIndex: Integer): TRect;
39 7:88cd8a3d49a8 aksdb
    procedure SetRect(AIndex: Integer; ARect: TRect);
40 7:88cd8a3d49a8 aksdb
  public
41 7:88cd8a3d49a8 aksdb
    function Add(ALeft, ATop, ARight, ABottom: Integer): Integer;
42 7:88cd8a3d49a8 aksdb
    procedure Clear; override;
43 7:88cd8a3d49a8 aksdb
    procedure Delete(AIndex: Integer); reintroduce;
44 7:88cd8a3d49a8 aksdb
    property Rects[Index: Integer]: TRect read GetRect write SetRect;
45 7:88cd8a3d49a8 aksdb
  end;
46 7:88cd8a3d49a8 aksdb
  PRect = ^TRect;
47 7:88cd8a3d49a8 aksdb
48 7:88cd8a3d49a8 aksdb
implementation
49 7:88cd8a3d49a8 aksdb
50 7:88cd8a3d49a8 aksdb
{ TRectList }
51 7:88cd8a3d49a8 aksdb
52 7:88cd8a3d49a8 aksdb
function TRectList.GetRect(AIndex: Integer): TRect;
53 7:88cd8a3d49a8 aksdb
begin
54 7:88cd8a3d49a8 aksdb
  Result := PRect(Items[AIndex])^;
55 7:88cd8a3d49a8 aksdb
end;
56 7:88cd8a3d49a8 aksdb
57 7:88cd8a3d49a8 aksdb
procedure TRectList.SetRect(AIndex: Integer; ARect: TRect);
58 7:88cd8a3d49a8 aksdb
var
59 7:88cd8a3d49a8 aksdb
  internalRect: PRect;
60 7:88cd8a3d49a8 aksdb
begin
61 7:88cd8a3d49a8 aksdb
  internalRect := Items[AIndex];
62 7:88cd8a3d49a8 aksdb
  System.Move(ARect, internalRect^, SizeOf(TRect));
63 7:88cd8a3d49a8 aksdb
end;
64 7:88cd8a3d49a8 aksdb
65 7:88cd8a3d49a8 aksdb
function TRectList.Add(ALeft, ATop, ARight, ABottom: Integer): Integer;
66 7:88cd8a3d49a8 aksdb
var
67 7:88cd8a3d49a8 aksdb
  internalRect: PRect;
68 7:88cd8a3d49a8 aksdb
begin
69 7:88cd8a3d49a8 aksdb
  new(internalRect);
70 7:88cd8a3d49a8 aksdb
  internalRect^.Left := ALeft;
71 7:88cd8a3d49a8 aksdb
  internalRect^.Top := ATop;
72 7:88cd8a3d49a8 aksdb
  internalRect^.Right := ARight;
73 7:88cd8a3d49a8 aksdb
  internalRect^.Bottom := ABottom;
74 7:88cd8a3d49a8 aksdb
  Result := inherited Add(internalRect);
75 7:88cd8a3d49a8 aksdb
end;
76 7:88cd8a3d49a8 aksdb
77 7:88cd8a3d49a8 aksdb
procedure TRectList.Clear;
78 7:88cd8a3d49a8 aksdb
var
79 7:88cd8a3d49a8 aksdb
  i: Integer;
80 7:88cd8a3d49a8 aksdb
  internalRect: PRect;
81 7:88cd8a3d49a8 aksdb
begin
82 7:88cd8a3d49a8 aksdb
  for i := 0 to Count - 1 do
83 7:88cd8a3d49a8 aksdb
  begin
84 7:88cd8a3d49a8 aksdb
    internalRect := Items[i];
85 7:88cd8a3d49a8 aksdb
    dispose(internalRect);
86 7:88cd8a3d49a8 aksdb
  end;
87 7:88cd8a3d49a8 aksdb
  inherited;
88 7:88cd8a3d49a8 aksdb
end;
89 7:88cd8a3d49a8 aksdb
90 7:88cd8a3d49a8 aksdb
procedure TRectList.Delete(AIndex: Integer);
91 7:88cd8a3d49a8 aksdb
var
92 7:88cd8a3d49a8 aksdb
  internalRect: PRect;
93 7:88cd8a3d49a8 aksdb
begin
94 7:88cd8a3d49a8 aksdb
  internalRect := Items[AIndex];
95 7:88cd8a3d49a8 aksdb
  dispose(internalRect);
96 7:88cd8a3d49a8 aksdb
  inherited Delete(AIndex);
97 7:88cd8a3d49a8 aksdb
end;
98 7:88cd8a3d49a8 aksdb
99 7:88cd8a3d49a8 aksdb
end.