drawcontext/src/Stroker.m3


 Copyright (c) 2000 California Institute of Technology 
 All rights reserved. See the file COPYRIGHT for a full description. 
 $Id: Stroker.m3.html,v 1.3 2010-04-29 17:18:11 wagner Exp $ 

MODULE Stroker;
IMPORT DrawContext;
IMPORT Point;
IMPORT Rect;
IMPORT Line;
IMPORT LineStyle;

REVEAL
  T = Public BRANDED OBJECT
    dc: DrawContext.T;
    ls: LineStyle.T;
    pen: Point.T;
  OVERRIDES
    init := Init;
    moveTo := MoveTo;
    lineTo := LineTo;
    frameRect := FrameRect;
  END;

PROCEDURE Init(self: T; dc: DrawContext.T; ls := LineStyle.Default): T =
  BEGIN
    self.dc := dc;
    self.ls := ls;
    self.pen := Point.Origin;
    RETURN self;
  END Init;

PROCEDURE MoveTo(self: T; p: Point.T) =
  BEGIN
    self.pen := p;
  END MoveTo;

PROCEDURE LineTo(self: T; p: Point.T) =
  BEGIN
    self.dc.line(Line.T{self.pen, p, self.ls});
    self.moveTo(p);
  END LineTo;

PROCEDURE FrameRect(self: T; r: Rect.T) =
  BEGIN
    self.moveTo(Rect.NorthWest(r));
    self.lineTo(Rect.NorthEast(r));
    self.lineTo(Rect.SouthEast(r));
    self.lineTo(Rect.SouthWest(r));
    self.lineTo(Rect.NorthWest(r));
  END FrameRect;

BEGIN
END Stroker.