MODULE ObxBitmap;
(**
project = "BlackBox"
organization = "www.oberon.ch"
contributors = "Oberon microsystems"
version = "System/Rsrc/About"
copyright = "System/Rsrc/About"
license = "Docu/BB-License"
changes = ""
issues = ""
**)
IMPORT SYSTEM, WinApi, Views, HostPorts;
TYPE
View = POINTER TO RECORD (Views.View)
bmp: WinApi.HBITMAP; (* handle of bitmap *)
w, h: INTEGER (* size of bitmap *)
END;
PROCEDURE (v: View) Restore (f: Views.Frame; l, t, r, b: INTEGER);
VAR dc, bdc: WinApi.HDC; x, y, res: INTEGER;
BEGIN
dc := f.rider(HostPorts.Rider).port.dc; (* get actual dc *)
x := f.gx DIV f.unit; (* get origin of view in dc *)
y := f.gy DIV f.unit;
bdc := WinApi.CreateCompatibleDC(dc); (* create dc for bitmap *)
res := WinApi.SelectObject(bdc, v.bmp);
res := WinApi.BitBlt(dc, x, y, v.w, v.h, bdc, 0, 0, WinApi.SRCCOPY); (* copy bitmap to screen *)
res := WinApi.DeleteDC(bdc)
END Restore;
PROCEDURE Deposit*;
VAR v: View; pat: ARRAY 32 OF INTEGER;
BEGIN
NEW(v);
pat[0] := 000000000H; pat[1] := 0DCDDDD5DH; pat[2] := 0BABBBB3BH; pat[3] := 076777777H;
pat[4] := 0EEEEEE6EH; pat[5] := 0DCDDDD5DH; pat[6] := 0BABBBB3BH; pat[7] := 076777777H;
pat[8] := 0EEEEEE6EH; pat[9] := 0DCDDDD5DH; pat[10] := 0BABBBB3BH; pat[11] := 076777777H;
pat[12] := 0EEEEEE6EH; pat[13] := 0DCDDDD5DH; pat[14] := 0BABBBB3BH; pat[15] := 076777777H;
pat[16] := 0EEEEEE6EH; pat[17] := 0DCDDDD5DH; pat[18] := 0BABBBB3BH; pat[19] := 076777777H;
pat[20] := 0EEEEEE6EH; pat[21] := 0DCDDDD5DH; pat[22] := 0BABBBB3BH; pat[23] := 076777777H;
pat[24] := 0EEEEEE6EH; pat[25] := 0DCDDDD5DH; pat[26] := 0BABBBB3BH; pat[27] := 076777777H;
pat[28] := 0EEEEEE6EH; pat[29] := 0DCDDDD5DH; pat[30] := 0BABBBB3BH; pat[31] := 000000000H;
v.bmp := WinApi.CreateBitmap(32, 32, 1, 1, SYSTEM.ADR(pat));
v.w := 32; v.h := 32;
Views.Deposit(v)
END Deposit;
END ObxBitmap.