ui/src/vbt/Pixmap.m3


Copyright (C) 1994, Digital Equipment Corp.
 by Steve Glassman, Mark Manasse and Greg Nelson           
<*PRAGMA LL*>

MODULE Pixmap;

IMPORT Palette, PlttFrnds, ScrnPixmap, ScreenType, TrestleComm;

PROCEDURE FromBitmap (bits: Raw): T =
  BEGIN
    IF bits.depth # 1 THEN Crash() END;
    LOCK PlttFrnds.con DO
      IF PlttFrnds.con.pixmaps # NIL THEN
        FOR i := 0 TO PlttFrnds.con.nextPixmap - 1 DO
          TYPECASE PlttFrnds.con.pixmaps[i] OF
            NULL =>
          | Closure (cl) => IF cl.bits = bits THEN RETURN T{i} END
          ELSE
          END
        END
      END
    END;
    RETURN Palette.FromPixmapClosure(NEW(Closure, bits := bits))
  END FromBitmap;

TYPE Closure = Palette.PixmapClosure OBJECT
    bits: Raw;
  OVERRIDES
    apply := Apply
  END;

PROCEDURE Apply(cl: Closure; st: ScreenType.T): ScrnPixmap.T =
  BEGIN
    TRY
      RETURN st.pixmap.load(cl.bits)
    EXCEPT
      TrestleComm.Failure => RETURN Palette.ResolvePixmap(st, Solid)
    END
  END Apply;

EXCEPTION FatalError;

PROCEDURE Crash() =
  <*FATAL FatalError*>
  BEGIN
    RAISE FatalError
  END Crash;

BEGIN END Pixmap.