1 unit ATTabs_Picture;
2 
3 {$ifdef fpc}
4 {$mode objfpc}{$H+}
5 {$endif}
6 
7 interface
8 
9 uses
10   Classes, SysUtils,
11   {$ifndef fpc}
12   PngImage,
13   {$endif}
14   Graphics;
15 
16 type
17   TPngPic =
18     {$ifdef fpc}
19     TPortableNetworkGraphic;
20     {$else}
21     TPngImage;
22     {$endif}
23 
24 type
25   { TATTabsPicture }
26 
27   TATTabsPicture = class
28   private
29     FPic: TPngPic;
30     FFileName: string;
31     FWidth: integer;
32     FHeight: integer;
33   public
34     constructor Create;
35     destructor Destroy; override;
36     procedure LoadFromFile(const AFileName: string);
37     procedure LoadFromPicture(APic: TPngPic);
38     property Width: integer read FWidth;
39     property Height: integer read FHeight;
40     procedure Draw(C: TCanvas; X, Y: integer);
41     procedure DrawSized(C: TCanvas; X, Y, AWidth: integer);
42   end;
43 
44 implementation
45 
46 { TATTabsPicture }
47 
48 constructor TATTabsPicture.Create;
49 begin
50   FPic:= TPngPic.Create;
51 end;
52 
53 destructor TATTabsPicture.Destroy;
54 begin
55   FreeAndNil(FPic);
56   inherited;
57 end;
58 
59 procedure TATTabsPicture.LoadFromFile(const AFileName: string);
60 begin
61   if not FileExists(AFileName) then exit;
62   FFileName:= AFileName;
63   FPic.LoadFromFile(AFileName);
64   FPic.Transparent:= true;
65   FWidth:= FPic.Width;
66   FHeight:= FPic.Height;
67 end;
68 
69 procedure TATTabsPicture.LoadFromPicture(APic: TPngPic);
70 begin
71   FFileName:= '';
72   FPic.Assign(APic);
73   FPic.Transparent:= true;
74   FWidth:= FPic.Width;
75   FHeight:= FPic.Height;
76 end;
77 
78 procedure TATTabsPicture.Draw(C: TCanvas; X, Y: integer);
79 begin
80   C.Draw(X, Y, FPic);
81 end;
82 
83 procedure TATTabsPicture.DrawSized(C: TCanvas; X, Y, AWidth: integer);
84 var
85   NDiv, NMod, i: integer;
86 begin
87   NDiv:= AWidth div FWidth;
88   NMod:= AWidth mod FWidth;
89 
90   for i:= 0 to NDiv-1 do
91     C.Draw(X+i*FWidth, Y, FPic);
92 
93   if NMod>0 then
94     C.StretchDraw(
95       Rect(X+NDiv*FWidth, Y, X+AWidth, Y+FHeight),
96       FPic);
97 end;
98 
99 end.
100 
101