|
@@ -0,0 +1,235 @@
|
|
|
|
+{
|
|
|
|
+ $Id$
|
|
|
|
+ This file is part of the Free Pascal run time library.
|
|
|
|
+ Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu>
|
|
|
|
+
|
|
|
|
+ layers.library interface unit for MorphOS/PowerPC
|
|
|
|
+
|
|
|
|
+ Based on work of Nils Sjoholm member of the Amiga RTL
|
|
|
|
+ development team.
|
|
|
|
+
|
|
|
|
+ MorphOS port was done on a free Pegasos II/G4 machine
|
|
|
|
+ provided by Genesi S.a.r.l. <www.genesi.lu>
|
|
|
|
+
|
|
|
|
+ See the file COPYING.FPC, included in this distribution,
|
|
|
|
+ for details about the copyright.
|
|
|
|
+
|
|
|
|
+ This program is distributed in the hope that it will be useful,
|
|
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
+
|
|
|
|
+ **********************************************************************}
|
|
|
|
+
|
|
|
|
+{$PACKRECORDS 2}
|
|
|
|
+unit layers;
|
|
|
|
+
|
|
|
|
+interface
|
|
|
|
+
|
|
|
|
+uses exec, graphics, utility;
|
|
|
|
+
|
|
|
|
+const
|
|
|
|
+ LAYERSIMPLE = 1;
|
|
|
|
+ LAYERSMART = 2;
|
|
|
|
+ LAYERSUPER = 4;
|
|
|
|
+ LAYERUPDATING = $10;
|
|
|
|
+ LAYERBACKDROP = $40;
|
|
|
|
+ LAYERREFRESH = $80;
|
|
|
|
+ LAYER_CLIPRECTS_LOST = $100; { during BeginUpdate }
|
|
|
|
+ { or during layerop }
|
|
|
|
+ { this happens if out of memory }
|
|
|
|
+ LMN_REGION = -1;
|
|
|
|
+
|
|
|
|
+type
|
|
|
|
+ pLayer_Info = ^tLayer_Info;
|
|
|
|
+ tLayer_Info = packed record
|
|
|
|
+ top_layer : pLayer;
|
|
|
|
+ check_lp : pLayer; { !! Private !! }
|
|
|
|
+ obs : pClipRect;
|
|
|
|
+ FreeClipRects : pClipRect; { !! Private !! }
|
|
|
|
+ PrivateReserve1, { !! Private !! }
|
|
|
|
+ PrivateReserve2 : Longint; { !! Private !! }
|
|
|
|
+ Lock : tSignalSemaphore; { !! Private !! }
|
|
|
|
+ gs_Head : tMinList; { !! Private !! }
|
|
|
|
+ PrivateReserve3 : smallint; { !! Private !! }
|
|
|
|
+ PrivateReserve4 : Pointer; { !! Private !! }
|
|
|
|
+ Flags : WORD;
|
|
|
|
+ fatten_count : Shortint; { !! Private !! }
|
|
|
|
+ LockLayersCount : Shortint; { !! Private !! }
|
|
|
|
+ PrivateReserve5 : smallint; { !! Private !! }
|
|
|
|
+ BlankHook, { !! Private !! }
|
|
|
|
+ LayerInfo_extra : Pointer; { !! Private !! }
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+const
|
|
|
|
+ NEWLAYERINFO_CALLED = 1;
|
|
|
|
+
|
|
|
|
+{
|
|
|
|
+ * LAYERS_NOBACKFILL is the value needed to get no backfill hook
|
|
|
|
+ * LAYERS_BACKFILL is the value needed to get the default backfill hook
|
|
|
|
+ }
|
|
|
|
+ LAYERS_NOBACKFILL = 1;
|
|
|
|
+ LAYERS_BACKFILL = 0;
|
|
|
|
+
|
|
|
|
+ LAYERSNAME : PChar = 'layers.library';
|
|
|
|
+
|
|
|
|
+var
|
|
|
|
+ LayersBase : PLibrary;
|
|
|
|
+
|
|
|
|
+procedure InitLayers(li : pLayer_Info location 'a0');
|
|
|
|
+SysCall LayersBase 030;
|
|
|
|
+
|
|
|
|
+function CreateUpfrontLayer(li : pLayer_Info location 'a0'; bm : pBitMap location 'a1'; x0 : LongInt location 'd0'; y0 : LongInt location 'd1'; x1 : LongInt location 'd2'; y1 : LongInt location 'd3'; flags : LongInt location 'd4'; bm2 : pBitMap location 'a2') : pLayer;
|
|
|
|
+SysCall LayersBase 036;
|
|
|
|
+
|
|
|
|
+function CreateBehindLayer(li : pLayer_Info location 'a0'; bm : pBitMap location 'a1'; x0 : LongInt location 'd0'; y0 : LongInt location 'd1'; x1 : LongInt location 'd2'; y1 : LongInt location 'd3'; flags : LongInt location 'd4'; bm2 : pBitMap location 'a2') : pLayer;
|
|
|
|
+SysCall LayersBase 042;
|
|
|
|
+
|
|
|
|
+function UpfrontLayer(dummy : LongInt location 'a0'; layer : pLayer location 'a1') : LongInt;
|
|
|
|
+SysCall LayersBase 048;
|
|
|
|
+
|
|
|
|
+function BehindLayer(dummy : LongInt location 'a0'; layer : pLayer location 'a1') : LongInt;
|
|
|
|
+SysCall LayersBase 054;
|
|
|
|
+
|
|
|
|
+function MoveLayer(dummy : LongInt location 'a0'; layer : pLayer location 'a1'; dx : LongInt location 'd0'; dy : LongInt location 'd1') : LongInt;
|
|
|
|
+SysCall LayersBase 060;
|
|
|
|
+
|
|
|
|
+function SizeLayer(dummy : LongInt location 'a0'; layer : pLayer location 'a1'; dx : LongInt location 'd0'; dy : LongInt location 'd1') : LongInt;
|
|
|
|
+SysCall LayersBase 066;
|
|
|
|
+
|
|
|
|
+procedure ScrollLayer(dummy : LongInt location 'a0'; layer : pLayer location 'a1'; dx : LongInt location 'd0'; dy : LongInt location 'd1');
|
|
|
|
+SysCall LayersBase 072;
|
|
|
|
+
|
|
|
|
+function BeginUpdate(l : pLayer location 'a0') : LongInt;
|
|
|
|
+SysCall LayersBase 078;
|
|
|
|
+
|
|
|
|
+procedure EndUpdate(layer : pLayer location 'a0'; flag : CARDINAL location 'd0');
|
|
|
|
+SysCall LayersBase 084;
|
|
|
|
+
|
|
|
|
+function DeleteLayer(dummy : LongInt location 'a0'; layer : pLayer location 'a1') : LongInt;
|
|
|
|
+SysCall LayersBase 090;
|
|
|
|
+
|
|
|
|
+procedure LockLayer(dummy : LongInt location 'a0'; layer : pLayer location 'a1');
|
|
|
|
+SysCall LayersBase 096;
|
|
|
|
+
|
|
|
|
+procedure UnlockLayer(layer : pLayer location 'a0');
|
|
|
|
+SysCall LayersBase 102;
|
|
|
|
+
|
|
|
|
+procedure LockLayers(li : pLayer_Info location 'a0');
|
|
|
|
+SysCall LayersBase 108;
|
|
|
|
+
|
|
|
|
+procedure UnlockLayers(li : pLayer_Info location 'a0');
|
|
|
|
+SysCall LayersBase 114;
|
|
|
|
+
|
|
|
|
+procedure LockLayerInfo(li : pLayer_Info location 'a0');
|
|
|
|
+SysCall LayersBase 120;
|
|
|
|
+
|
|
|
|
+procedure SwapBitsRastPortClipRect(rp : pRastPort location 'a0'; cr : pClipRect location 'a1');
|
|
|
|
+SysCall LayersBase 126;
|
|
|
|
+
|
|
|
|
+function WhichLayer(li : pLayer_Info location 'a0'; x : LongInt location 'd0'; y : LongInt location 'd1') : pLayer;
|
|
|
|
+SysCall LayersBase 132;
|
|
|
|
+
|
|
|
|
+procedure UnlockLayerInfo(li : pLayer_Info location 'a0');
|
|
|
|
+SysCall LayersBase 138;
|
|
|
|
+
|
|
|
|
+function NewLayerInfo : pLayer_Info;
|
|
|
|
+SysCall LayersBase 144;
|
|
|
|
+
|
|
|
|
+procedure DisposeLayerInfo(li : pLayer_Info location 'a0');
|
|
|
|
+SysCall LayersBase 150;
|
|
|
|
+
|
|
|
|
+function FattenLayerInfo(li : pLayer_Info location 'a0') : LongInt;
|
|
|
|
+SysCall LayersBase 156;
|
|
|
|
+
|
|
|
|
+procedure ThinLayerInfo(li : pLayer_Info location 'a0');
|
|
|
|
+SysCall LayersBase 162;
|
|
|
|
+
|
|
|
|
+function MoveLayerInFrontOf(layer_to_move : pLayer location 'a0'; other_layer : pLayer location 'a1') : LongInt;
|
|
|
|
+SysCall LayersBase 168;
|
|
|
|
+
|
|
|
|
+function InstallClipRegion(layer : pLayer location 'a0'; CONST region : pRegion location 'a1') : pRegion;
|
|
|
|
+SysCall LayersBase 174;
|
|
|
|
+
|
|
|
|
+function MoveSizeLayer(layer : pLayer location 'a0'; dx : LongInt location 'd0'; dy : LongInt location 'd1'; dw : LongInt location 'd2'; dh : LongInt location 'd3') : LongInt;
|
|
|
|
+SysCall LayersBase 180;
|
|
|
|
+
|
|
|
|
+function CreateUpfrontHookLayer(li : pLayer_Info location 'a0'; bm : pBitMap location 'a1'; x0 : LongInt location 'd0'; y0 : LongInt location 'd1'; x1 : LongInt location 'd2'; y1 : LongInt location 'd3'; flags : LongInt location 'd4'; hook : pHook location 'a3'; bm2 : pBitMap location 'a2') : pLayer;
|
|
|
|
+SysCall LayersBase 186;
|
|
|
|
+
|
|
|
|
+function CreateBehindHookLayer(li : pLayer_Info location 'a0'; bm : pBitMap location 'a1'; x0 : LongInt location 'd0'; y0 : LongInt location 'd1'; x1 : LongInt location 'd2'; y1 : LongInt location 'd3'; flags : LongInt location 'd4'; hook : pHook location 'a3'; bm2 : pBitMap location 'a2') : pLayer;
|
|
|
|
+SysCall LayersBase 192;
|
|
|
|
+
|
|
|
|
+function InstallLayerHook(layer : pLayer location 'a0'; hook : pHook location 'a1') : pHook;
|
|
|
|
+SysCall LayersBase 198;
|
|
|
|
+
|
|
|
|
+function InstallLayerInfoHook(li : pLayer_Info location 'a0'; CONST hook : pHook location 'a1') : pHook;
|
|
|
|
+SysCall LayersBase 204;
|
|
|
|
+
|
|
|
|
+procedure SortLayerCR(layer : pLayer location 'a0'; dx : LongInt location 'd0'; dy : LongInt location 'd1');
|
|
|
|
+SysCall LayersBase 210;
|
|
|
|
+
|
|
|
|
+procedure DoHookClipRects(hook : pHook location 'a0'; rport : pRastPort location 'a1'; CONST rect : pRectangle location 'a2');
|
|
|
|
+SysCall LayersBase 216;
|
|
|
|
+
|
|
|
|
+function InstallTransparentRegion(l : pLayer location 'a0'; r : pRegion location 'a1') : pRegion;
|
|
|
|
+SysCall LayersBase 222;
|
|
|
|
+
|
|
|
|
+function InstallTransparentRegionHook(l : pLayer location 'a0'; h : pHook location 'a1') : pHook;
|
|
|
|
+SysCall LayersBase 228;
|
|
|
|
+
|
|
|
|
+function CreateUpfrontLayerTagList(li : pLayer_Info location 'a0'; bm : pBitMap location 'a1'; x0 : LongInt location 'd0'; y0 : LongInt location 'd1'; x1 : LongInt location 'd2'; y1 : LongInt location 'd3'; flags : LongInt location 'd4'; taglist : pTagItem location 'a2') : pLayer;
|
|
|
|
+SysCall LayersBase 234;
|
|
|
|
+
|
|
|
|
+function CreateBehindLayerTagList(li : pLayer_Info location 'a0'; bm : pBitMap location 'a1'; x0 : LongInt location 'd0'; y0 : LongInt location 'd1'; x1 : LongInt location 'd2'; y1 : LongInt location 'd3'; flags : LongInt location 'd4'; taglist : pTagItem location 'a2') : pLayer;
|
|
|
|
+SysCall LayersBase 240;
|
|
|
|
+
|
|
|
|
+{
|
|
|
|
+ Functions and procedures with array of const go here
|
|
|
|
+}
|
|
|
|
+{
|
|
|
|
+function CreateUpfrontLayerTags(li : pLayer_Info; bm : pBitMap; x0 : LongInt; y0 : LongInt; x1 : LongInt; y1 : LongInt; flags : LongInt; const taglist : Array Of Const) : pLayer;
|
|
|
|
+function CreateBehindLayerTags(li : pLayer_Info; bm : pBitMap; x0 : LongInt; y0 : LongInt; x1 : LongInt; y1 : LongInt; flags : LongInt; const taglist : Array Of Const) : pLayer;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+implementation
|
|
|
|
+
|
|
|
|
+const
|
|
|
|
+ { Change VERSION and LIBVERSION to proper values }
|
|
|
|
+ VERSION : string[2] = '50';
|
|
|
|
+ LIBVERSION : longword = 50;
|
|
|
|
+
|
|
|
|
+var
|
|
|
|
+ layers_exit : Pointer;
|
|
|
|
+
|
|
|
|
+procedure CloseLayersLibrary;
|
|
|
|
+begin
|
|
|
|
+ ExitProc := layers_exit;
|
|
|
|
+ if LayersBase <> nil then begin
|
|
|
|
+ CloseLibrary(LayersBase);
|
|
|
|
+ LayersBase := nil;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function InitLayersLibrary : boolean;
|
|
|
|
+begin
|
|
|
|
+ LayersBase := nil;
|
|
|
|
+ LayersBase := OpenLibrary(LAYERSNAME,LIBVERSION);
|
|
|
|
+ if LayersBase <> nil then begin
|
|
|
|
+ layers_exit := ExitProc;
|
|
|
|
+ ExitProc := @CloseLayersLibrary;
|
|
|
|
+ InitLayersLibrary:=True;
|
|
|
|
+ end else begin
|
|
|
|
+ InitLayersLibrary:=False;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+end.
|
|
|
|
+
|
|
|
|
+{
|
|
|
|
+ $Log$
|
|
|
|
+ Revision 1.1 2004-12-07 18:55:49 karoly
|
|
|
|
+ * initial revision
|
|
|
|
+
|
|
|
|
+}
|