123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- {
- 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;
- }
- { Helper func }
- function InitLayersLibrary : boolean;
- 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.
|