Как-то спрашивали насчёт Views для вывода Cairo. Вот, нашёл у себя в закромах. Но не помню источника.
## Код:
```
MODULE CairoViews;

   IMPORT Properties, Models, Views, HostPorts, HostWindows;
   
   TYPE
      Context = POINTER TO RECORD (Models.Context)
         (*ctx: CairoApi.cairo_t;*)
         w, h: INTEGER;
         base: Views.View
      END;

      View*  = POINTER TO RECORD (Views.View)
         w, h: INTEGER
      END;
   
   (* Context *)

   PROCEDURE (c: Context) GetSize (OUT w, h: INTEGER);
   BEGIN
      w := c.w; h := c.h
   END GetSize;

   PROCEDURE (c: Context) Normalize (): BOOLEAN;
   BEGIN
      RETURN c.base.context.Normalize()
   END Normalize;

   PROCEDURE (c: Context) Consider (VAR p: Models.Proposal);
   BEGIN
      c.base.context.Consider(p)
   END Consider;

   PROCEDURE (c: Context) ThisModel (): Models.Model;
   BEGIN
      RETURN NIL
   END ThisModel;
   
   PROCEDURE (v: View) Restore* (f: Views.Frame; l, t, r, b: INTEGER);
      VAR c: Models.Context; rd: HostPorts.Rider; res, w, h: INTEGER;
   BEGIN
      c := v.context; c.GetSize(w, h);
      (*
      dc := f.rider(HostPorts.Rider).port.homedc;
      IF WinApi.WindowFromDC(dc) = 0 THEN dc := WinApi.GetDC(HostWindows.main) END;
      IF v.model.ref = 0 THEN Evaluate(v, dc) END;
      IF Views.IsPrinterFrame(f) THEN (* need to make a print copy of the existing bitmap *)
         bdc1 := WinApi.CreateCompatibleDC(dc);
         res := WinApi.SelectObject(bdc1, v.model.ref);
         pdc := f.rider(HostPorts.Rider).port.dc;
         bdc := WinApi.CreateCompatibleDC(pdc);
         memBM := WinApi.CreateCompatibleBitmap(pdc, v.w, v.h);
         res := WinApi.SelectObject(bdc, memBM);
         res := WinApi.BitBlt(bdc, 0, 0, v.w, v.h, bdc1, 0, 0, 00CC0020H);   (* copy *)
         res := WinApi.DeleteDC(bdc1)
      ELSE
         bdc := WinApi.CreateCompatibleDC(dc);
         res := WinApi.SelectObject(bdc, v.model.ref)
      END;
      f.rider(HostPorts.Rider).DrawBitmap(bdc, v.w, v.h, f.gx, f.gy, w, h);
      res := WinApi.DeleteDC(bdc)
      *)
   END Restore;
   
   PROCEDURE (v: View) HandlePropMsg- (VAR msg: Properties.Message);
   BEGIN
      WITH msg: Properties.SizePref DO
         IF (msg.w > Views.undefined) & (msg.h > Views.undefined) THEN
            Properties.ProportionalConstraint(v.w, v.h, msg.fixedW, msg.fixedH, msg.w, msg.h)
         ELSE
            IF (v.w > 0) & (v.h > 0) THEN   (* default sizes *)
               msg.w := v.w * HostWindows.unit; msg.h := v.h * HostWindows.unit
            END
         END
      ELSE
      END
   END HandlePropMsg;
   
END CairoViews.
```
