Browse Source

porting

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7276 8c9fc860-2736-0410-a75d-ab315db34111
eth.metacore 8 năm trước cách đây
mục cha
commit
a058f63f27
3 tập tin đã thay đổi với 72 bổ sung62 xóa
  1. 42 32
      source/AGfx.Mod
  2. 4 4
      source/AGfxBuffer.Mod
  3. 26 26
      source/AGfxRaster.Mod

+ 42 - 32
source/AGfx.Mod

@@ -201,47 +201,75 @@ MODULE Gfx; (** portable *)	(* eos  *)
 	(** graphics state **)
 	(** graphics state **)
 			PROCEDURE SetStrokeColor* (color: Color);
 			PROCEDURE SetStrokeColor* (color: Color);
 			BEGIN
 			BEGIN
+				ASSERT(~(InPath IN SELF.mode), 100);
 				SELF.strokeCol := color
 				SELF.strokeCol := color
 			END SetStrokeColor;
 			END SetStrokeColor;
 
 
 			PROCEDURE SetStrokePattern* (pat: Pattern);
 			PROCEDURE SetStrokePattern* (pat: Pattern);
 			BEGIN
 			BEGIN
+				ASSERT(~(InPath IN SELF.mode), 100);
 				SELF.strokePat := pat
 				SELF.strokePat := pat
 			END SetStrokePattern;
 			END SetStrokePattern;
 
 
 			PROCEDURE SetFillColor* (color: Color);
 			PROCEDURE SetFillColor* (color: Color);
 			BEGIN
 			BEGIN
+				ASSERT(~(InPath IN SELF.mode), 100);
 				SELF.fillCol := color
 				SELF.fillCol := color
 			END SetFillColor;
 			END SetFillColor;
 
 
 			PROCEDURE SetFillPattern* (pat: Pattern);
 			PROCEDURE SetFillPattern* (pat: Pattern);
 			BEGIN
 			BEGIN
+				ASSERT(~(InPath IN SELF.mode), 100);
 				SELF.fillPat := pat
 				SELF.fillPat := pat
 			END SetFillPattern;
 			END SetFillPattern;
 
 
 			PROCEDURE SetLineWidth* (width: REAL);
 			PROCEDURE SetLineWidth* (width: REAL);
 			BEGIN
 			BEGIN
+				ASSERT(~(InPath IN SELF.mode), 100);
+				ASSERT(width >= 0.0, 101);
 				SELF.lineWidth := width
 				SELF.lineWidth := width
 			END SetLineWidth;
 			END SetLineWidth;
 
 
 			PROCEDURE SetDashPattern* (VAR on, off: ARRAY OF REAL; len: LONGINT; phase: REAL);
 			PROCEDURE SetDashPattern* (VAR on, off: ARRAY OF REAL; len: LONGINT; phase: REAL);
 			BEGIN
 			BEGIN
-				SetDashArray(SELF, on, off, len);
+				ASSERT(~(InPath IN SELF.mode), 100);
+				ASSERT((len <= LEN(on)) & (len <= LEN(off)), 101);
+				SELF.SetDashArray(on, off, len);
 				SELF.dashPhase := phase
 				SELF.dashPhase := phase
 			END SetDashPattern;
 			END SetDashPattern;
 
 
+			(** copy values from parameter, and calculate dash period **)
+			PROCEDURE SetDashArray* (VAR on, off: ARRAY OF REAL; len: LONGINT);
+			BEGIN
+				SELF.dashPatLen := len;
+				SELF.dashPeriod := 0;
+				IF len > 0 THEN
+					REPEAT
+						DEC(len);
+						SELF.dashPatOn[len] := on[len]; SELF.dashPatOff[len] := off[len];
+						SELF.dashPeriod := SELF.dashPeriod + on[len] + off[len]
+					UNTIL len = 0
+				END;
+				ASSERT((SELF.dashPatLen = 0) OR (SELF.dashPeriod # 0), 120)
+			END SetDashArray;
+			
 			PROCEDURE SetCapStyle* (style: CapStyle);
 			PROCEDURE SetCapStyle* (style: CapStyle);
 			BEGIN
 			BEGIN
+				ASSERT(~(InPath IN SELF.mode), 100);
+				ASSERT((NoCap <= style) & (style <= RoundCap), 101);
 				SELF.capStyle := style
 				SELF.capStyle := style
 			END SetCapStyle;
 			END SetCapStyle;
 
 
 			PROCEDURE SetJoinStyle* (style: JoinStyle);
 			PROCEDURE SetJoinStyle* (style: JoinStyle);
 			BEGIN
 			BEGIN
+				ASSERT(~(InPath IN SELF.mode), 100);
+				ASSERT((NoJoin <= style) & (style <= RoundJoin), 101);
 				SELF.joinStyle := style
 				SELF.joinStyle := style
 			END SetJoinStyle;
 			END SetJoinStyle;
 
 
 			PROCEDURE SetStyleLimit* (limit: REAL);
 			PROCEDURE SetStyleLimit* (limit: REAL);
 			BEGIN
 			BEGIN
+				ASSERT(~(InPath IN SELF.mode), 100);
 				SELF.styleLimit := limit
 				SELF.styleLimit := limit
 			END SetStyleLimit;
 			END SetStyleLimit;
 
 
@@ -252,9 +280,19 @@ MODULE Gfx; (** portable *)	(* eos  *)
 
 
 			PROCEDURE SetFont* (font: GfxFonts.Font);
 			PROCEDURE SetFont* (font: GfxFonts.Font);
 			BEGIN
 			BEGIN
+				ASSERT(font # NIL, 100);
 				SELF.font := font
 				SELF.font := font
 			END SetFont;
 			END SetFont;
 
 
+			(** set current font using name and size **)
+			PROCEDURE SetFontName* (fontname: ARRAY OF CHAR; size: INTEGER);
+				VAR font: GfxFonts.Font;
+			BEGIN
+				font := GfxFonts.OpenSize(fontname, size);
+				IF font = NIL THEN font := GfxFonts.Default END;
+				SELF.SetFont(font)
+			END SetFontName;
+			
 			PROCEDURE GetStringWidth* (VAR str: ARRAY OF CHAR; VAR dx, dy: REAL); (*GetStringWidth*)
 			PROCEDURE GetStringWidth* (VAR str: ARRAY OF CHAR; VAR dx, dy: REAL); (*GetStringWidth*)
 			BEGIN
 			BEGIN
 				GfxFonts.GetStringWidth(SELF.font, str, dx, dy)
 				GfxFonts.GetStringWidth(SELF.font, str, dx, dy)
@@ -482,9 +520,7 @@ MODULE Gfx; (** portable *)	(* eos  *)
 	(** rotate coordinate system at specified point **)
 	(** rotate coordinate system at specified point **)
 	PROCEDURE RotateAt* (ctxt: Context; sin, cos, x, y: REAL);
 	PROCEDURE RotateAt* (ctxt: Context; sin, cos, x, y: REAL);
 	BEGIN
 	BEGIN
-		ctxt.Translate(x, y);
-		ctxt.Rotate(sin, cos);
-		ctxt.Translate(-x, -y)
+		ctxt.RotateAt(sin, cos, x, y);
 	END RotateAt;
 	END RotateAt;
 
 
 	(** concat transformation matrix to CTM **)
 	(** concat transformation matrix to CTM **)
@@ -526,82 +562,60 @@ MODULE Gfx; (** portable *)	(* eos  *)
 	(** set stroke color **)
 	(** set stroke color **)
 	PROCEDURE SetStrokeColor* (ctxt: Context; color: Color);
 	PROCEDURE SetStrokeColor* (ctxt: Context; color: Color);
 	BEGIN
 	BEGIN
-		ASSERT(~(InPath IN ctxt.mode), 100);
 		ctxt.SetStrokeColor(color)
 		ctxt.SetStrokeColor(color)
 	END SetStrokeColor;
 	END SetStrokeColor;
 
 
 	(** set stroke pattern (NIL = solid) **)
 	(** set stroke pattern (NIL = solid) **)
 	PROCEDURE SetStrokePattern* (ctxt: Context; pat: Pattern);
 	PROCEDURE SetStrokePattern* (ctxt: Context; pat: Pattern);
 	BEGIN
 	BEGIN
-		ASSERT(~(InPath IN ctxt.mode), 100);
 		ctxt.SetStrokePattern(pat)
 		ctxt.SetStrokePattern(pat)
 	END SetStrokePattern;
 	END SetStrokePattern;
 
 
 	(** set fill color **)
 	(** set fill color **)
 	PROCEDURE SetFillColor* (ctxt: Context; color: Color);
 	PROCEDURE SetFillColor* (ctxt: Context; color: Color);
 	BEGIN
 	BEGIN
-		ASSERT(~(InPath IN ctxt.mode), 100);
 		ctxt.SetFillColor(color)
 		ctxt.SetFillColor(color)
 	END SetFillColor;
 	END SetFillColor;
 
 
 	(** set fill pattern (NIL = solid) **)
 	(** set fill pattern (NIL = solid) **)
 	PROCEDURE SetFillPattern* (ctxt: Context; pat: Pattern);
 	PROCEDURE SetFillPattern* (ctxt: Context; pat: Pattern);
 	BEGIN
 	BEGIN
-		ASSERT(~(InPath IN ctxt.mode), 100);
 		ctxt.SetFillPattern(pat)
 		ctxt.SetFillPattern(pat)
 	END SetFillPattern;
 	END SetFillPattern;
 
 
 	(** set line width **)
 	(** set line width **)
 	PROCEDURE SetLineWidth* (ctxt: Context; width: REAL);
 	PROCEDURE SetLineWidth* (ctxt: Context; width: REAL);
 	BEGIN
 	BEGIN
-		ASSERT(~(InPath IN ctxt.mode), 100);
-		ASSERT(width >= 0.0, 101);
 		ctxt.SetLineWidth(width)
 		ctxt.SetLineWidth(width)
 	END SetLineWidth;
 	END SetLineWidth;
 
 
 	(** set dash pattern **)
 	(** set dash pattern **)
 	PROCEDURE SetDashPattern* (ctxt: Context; VAR on, off: ARRAY OF REAL; len: LONGINT; phase: REAL);
 	PROCEDURE SetDashPattern* (ctxt: Context; VAR on, off: ARRAY OF REAL; len: LONGINT; phase: REAL);
 	BEGIN
 	BEGIN
-		ASSERT(~(InPath IN ctxt.mode), 100);
-		ASSERT((len <= LEN(on)) & (len <= LEN(off)), 101);
 		ctxt.SetDashPattern(on, off, len, phase)
 		ctxt.SetDashPattern(on, off, len, phase)
 	END SetDashPattern;
 	END SetDashPattern;
 
 
 	(** copy values from parameter, and calculate dash period **)
 	(** copy values from parameter, and calculate dash period **)
 	PROCEDURE SetDashArray* (ctxt: Context; VAR on, off: ARRAY OF REAL; len: LONGINT);
 	PROCEDURE SetDashArray* (ctxt: Context; VAR on, off: ARRAY OF REAL; len: LONGINT);
 	BEGIN
 	BEGIN
-		ctxt.dashPatLen := len;
-		ctxt.dashPeriod := 0;
-		IF len > 0 THEN
-			REPEAT
-				DEC(len);
-				ctxt.dashPatOn[len] := on[len]; ctxt.dashPatOff[len] := off[len];
-				ctxt.dashPeriod := ctxt.dashPeriod + on[len] + off[len]
-			UNTIL len = 0
-		END;
-		ASSERT((ctxt.dashPatLen = 0) OR (ctxt.dashPeriod # 0), 120)
+		ctxt.SetDashArray(on, off, len);
 	END SetDashArray;
 	END SetDashArray;
 
 
 	(** set line cap style **)
 	(** set line cap style **)
 	PROCEDURE SetCapStyle* (ctxt: Context; style: CapStyle);
 	PROCEDURE SetCapStyle* (ctxt: Context; style: CapStyle);
 	BEGIN
 	BEGIN
-		ASSERT(~(InPath IN ctxt.mode), 100);
-		ASSERT((NoCap <= style) & (style <= RoundCap), 101);
 		ctxt.SetCapStyle(style)
 		ctxt.SetCapStyle(style)
 	END SetCapStyle;
 	END SetCapStyle;
 
 
 	(** set line join style **)
 	(** set line join style **)
 	PROCEDURE SetJoinStyle* (ctxt: Context; style: JoinStyle);
 	PROCEDURE SetJoinStyle* (ctxt: Context; style: JoinStyle);
 	BEGIN
 	BEGIN
-		ASSERT(~(InPath IN ctxt.mode), 100);
-		ASSERT((NoJoin <= style) & (style <= RoundJoin), 101);
 		ctxt.SetJoinStyle(style)
 		ctxt.SetJoinStyle(style)
 	END SetJoinStyle;
 	END SetJoinStyle;
 
 
 	(** set style border factor **)
 	(** set style border factor **)
 	PROCEDURE SetStyleLimit* (ctxt: Context; limit: REAL);
 	PROCEDURE SetStyleLimit* (ctxt: Context; limit: REAL);
 	BEGIN
 	BEGIN
-		ASSERT(~(InPath IN ctxt.mode), 100);
 		ctxt.SetStyleLimit(limit)
 		ctxt.SetStyleLimit(limit)
 	END SetStyleLimit;
 	END SetStyleLimit;
 
 
@@ -614,17 +628,13 @@ MODULE Gfx; (** portable *)	(* eos  *)
 	(** set current font **)
 	(** set current font **)
 	PROCEDURE SetFont* (ctxt: Context; font: GfxFonts.Font);
 	PROCEDURE SetFont* (ctxt: Context; font: GfxFonts.Font);
 	BEGIN
 	BEGIN
-		ASSERT(font # NIL, 100);
 		ctxt.SetFont(font)
 		ctxt.SetFont(font)
 	END SetFont;
 	END SetFont;
 
 
 	(** set current font using name and size **)
 	(** set current font using name and size **)
 	PROCEDURE SetFontName* (ctxt: Context; fontname: ARRAY OF CHAR; size: INTEGER);
 	PROCEDURE SetFontName* (ctxt: Context; fontname: ARRAY OF CHAR; size: INTEGER);
-		VAR font: GfxFonts.Font;
 	BEGIN
 	BEGIN
-		font := GfxFonts.OpenSize(fontname, size);
-		IF font = NIL THEN font := GfxFonts.Default END;
-		ctxt.SetFont(font)
+		ctxt.SetFontName(fontname, size);
 	END SetFontName;
 	END SetFontName;
 
 
 	(** calculate distance that current point would move if given string were rendered **)
 	(** calculate distance that current point would move if given string were rendered **)

+ 4 - 4
source/AGfxBuffer.Mod

@@ -93,7 +93,7 @@ MODULE GfxBuffer; (** portable *)	(* eos  *)
 				Images.SetRGBA(SELF.pix, col.r, col.g, col.b, col.a)
 				Images.SetRGBA(SELF.pix, col.r, col.g, col.b, col.a)
 			END SetColPat;
 			END SetColPat;
 
 
-			PROCEDURE PaintDot* (x, y: LONGINT);
+			PROCEDURE FillDot* (x, y: LONGINT);
 				VAR px, py: LONGINT; mode: Images.Mode;
 				VAR px, py: LONGINT; mode: Images.Mode;
 			BEGIN
 			BEGIN
 				IF (SELF.clipState = GfxRaster.In) OR
 				IF (SELF.clipState = GfxRaster.In) OR
@@ -109,9 +109,9 @@ MODULE GfxBuffer; (** portable *)	(* eos  *)
 						Images.Copy(SELF.pat.img, SELF.img, px, py, px+1, py+1, SHORT(x), SHORT(y), mode)
 						Images.Copy(SELF.pat.img, SELF.img, px, py, px+1, py+1, SHORT(x), SHORT(y), mode)
 					END
 					END
 				END
 				END
-			END PaintDot;
+			END FillDot;
 
 
-			PROCEDURE PaintRect* (llx, lly, urx, ury: LONGINT);
+			PROCEDURE FillRect* (llx, lly, urx, ury: LONGINT);
 				VAR data: RegData; mode: Images.Mode;
 				VAR data: RegData; mode: Images.Mode;
 			BEGIN
 			BEGIN
 				IF (SELF.clipState # GfxRaster.Out) & (llx < urx) & (lly < ury) THEN
 				IF (SELF.clipState # GfxRaster.Out) & (llx < urx) & (lly < ury) THEN
@@ -131,7 +131,7 @@ MODULE GfxBuffer; (** portable *)	(* eos  *)
 						SELF.clipReg.Enumerate(SHORT(llx), SHORT(lly), SHORT(urx), SHORT(ury), Tile, data)
 						SELF.clipReg.Enumerate(SHORT(llx), SHORT(lly), SHORT(urx), SHORT(ury), Tile, data)
 					END
 					END
 				END
 				END
-			END PaintRect;
+			END FillRect;
 
 
 			(*--- Exported Interface ---*)
 			(*--- Exported Interface ---*)
 
 

+ 26 - 26
source/AGfxRaster.Mod

@@ -90,11 +90,11 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 				SELF.col := col; SELF.pat := pat
 				SELF.col := col; SELF.pat := pat
 			END SetColPat;
 			END SetColPat;
 
 
-			PROCEDURE{ABSTRACT} PaintDot* (x, y: LONGINT);	(** current dot procedure **)
-			END PaintDot;
+			PROCEDURE{ABSTRACT} FillDot* (x, y: LONGINT);	(** current dot procedure **)
+			END FillDot;
 
 
-			PROCEDURE{ABSTRACT} PaintRect* (lx, ly, rx, uy: LONGINT);	(** current rect procedure **)
-			END PaintRect;
+			PROCEDURE{ABSTRACT} FillRect* (lx, ly, rx, uy: LONGINT);	(** current rect procedure **)
+			END FillRect;
 
 
 			(** clipping **)
 			(** clipping **)
 			PROCEDURE ResetClip* ();
 			PROCEDURE ResetClip* ();
@@ -462,7 +462,7 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 							ELSE SELF.clipState := InOut
 							ELSE SELF.clipState := InOut
 							END;
 							END;
 							SELF.SetColPat(SELF.fillCol, SELF.fillPat);
 							SELF.SetColPat(SELF.fillCol, SELF.fillPat);
-							SELF.PaintRect(llx, lly, urx, ury)
+							SELF.FillRect(llx, lly, urx, ury)
 						END
 						END
 					ELSIF Gfx.Stroke IN SELF.mode THEN
 					ELSIF Gfx.Stroke IN SELF.mode THEN
 						IF (SELF.dashPatLen > 0) OR (SELF.devWidth > 0.75) THEN
 						IF (SELF.dashPatLen > 0) OR (SELF.devWidth > 0.75) THEN
@@ -476,8 +476,8 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 								IF SELF.clipReg.RectInside(llx, lly, urx, ury) THEN SELF.clipState := In
 								IF SELF.clipReg.RectInside(llx, lly, urx, ury) THEN SELF.clipState := In
 								ELSE SELF.clipState := InOut
 								ELSE SELF.clipState := InOut
 								END;
 								END;
-								SELF.PaintRect(llx, lly, urx, lly+1); SELF.PaintRect(urx, lly, urx+1, ury+1);
-								SELF.PaintRect(llx, ury, urx, ury+1); SELF.PaintRect(llx, lly+1, llx+1, ury)
+								SELF.FillRect(llx, lly, urx, lly+1); SELF.FillRect(urx, lly, urx+1, ury+1);
+								SELF.FillRect(llx, ury, urx, ury+1); SELF.FillRect(llx, lly+1, llx+1, ury)
 							END
 							END
 						END
 						END
 					END
 					END
@@ -564,7 +564,7 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 				SELF.u := u; SELF.v := v;
 				SELF.u := u; SELF.v := v;
 				SELF.px := ENTIER(u); SELF.py := ENTIER(v);
 				SELF.px := ENTIER(u); SELF.py := ENTIER(v);
 				SELF.InitClipState(SHORT(SELF.px), SHORT(SELF.py));
 				SELF.InitClipState(SHORT(SELF.px), SHORT(SELF.py));
-				SELF.PaintDot(SELF.px, SELF.py)
+				SELF.FillDot(SELF.px, SELF.py)
 			END HairLineEnter;
 			END HairLineEnter;
 
 
 			PROCEDURE HairLineTo (u, v: REAL);
 			PROCEDURE HairLineTo (u, v: REAL);
@@ -573,13 +573,13 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 				px := ENTIER(u); py := ENTIER(v);
 				px := ENTIER(u); py := ENTIER(v);
 				SELF.UpdateClipState(SHORT(px), SHORT(py));
 				SELF.UpdateClipState(SHORT(px), SHORT(py));
 				IF px = SELF.px THEN	(* horizontal line *)
 				IF px = SELF.px THEN	(* horizontal line *)
-					IF py > SELF.py THEN SELF.PaintRect(px, SELF.py + 1, px + 1, py + 1)
-					ELSIF py < SELF.py THEN SELF.PaintRect(px, py, px + 1, SELF.py)
+					IF py > SELF.py THEN SELF.FillRect(px, SELF.py + 1, px + 1, py + 1)
+					ELSIF py < SELF.py THEN SELF.FillRect(px, py, px + 1, SELF.py)
 					END;
 					END;
 					SELF.py := py
 					SELF.py := py
 				ELSIF py = SELF.py THEN	(* vertical line *)
 				ELSIF py = SELF.py THEN	(* vertical line *)
-					IF px > SELF.px THEN SELF.PaintRect(SELF.px + 1, py, px + 1, py + 1)
-					ELSE SELF.PaintRect(px, py, SELF.px, py + 1)
+					IF px > SELF.px THEN SELF.FillRect(SELF.px + 1, py, px + 1, py + 1)
+					ELSE SELF.FillRect(px, py, SELF.px, py + 1)
 					END;
 					END;
 					SELF.px := px
 					SELF.px := px
 				ELSE
 				ELSE
@@ -601,7 +601,7 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 								INC(SELF.py, ystep); e := e - du
 								INC(SELF.py, ystep); e := e - du
 							END;
 							END;
 							INC(SELF.px, xstep); e := e + dv;
 							INC(SELF.px, xstep); e := e + dv;
-							SELF.PaintDot(SELF.px, SELF.py);
+							SELF.FillDot(SELF.px, SELF.py);
 							DEC(steps)
 							DEC(steps)
 						END
 						END
 					ELSE	(* y-dominant case *)
 					ELSE	(* y-dominant case *)
@@ -612,7 +612,7 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 								INC(SELF.px, xstep); e := e - dv
 								INC(SELF.px, xstep); e := e - dv
 							END;
 							END;
 							INC(SELF.py, ystep); e := e + du;
 							INC(SELF.py, ystep); e := e + du;
-							SELF.PaintDot(SELF.px, SELF.py);
+							SELF.FillDot(SELF.px, SELF.py);
 							DEC(steps)
 							DEC(steps)
 						END
 						END
 					END
 					END
@@ -629,17 +629,17 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 					ELSE SELF.clipState := InOut
 					ELSE SELF.clipState := InOut
 					END;
 					END;
 					x := 0; y := r; d := 1-r; de := 3; dse := -2*r + 5;
 					x := 0; y := r; d := 1-r; de := 3; dse := -2*r + 5;
-					SELF.PaintDot(mx, my + y); SELF.PaintDot(mx, my - y); SELF.PaintDot(mx + y, my); SELF.PaintDot(mx - y, my);
+					SELF.FillDot(mx, my + y); SELF.FillDot(mx, my - y); SELF.FillDot(mx + y, my); SELF.FillDot(mx - y, my);
 					WHILE y > x DO
 					WHILE y > x DO
 						IF d < 0 THEN
 						IF d < 0 THEN
 							INC(d, de); INC(de, 2); INC(dse, 2); INC(x)
 							INC(d, de); INC(de, 2); INC(dse, 2); INC(x)
 						ELSE
 						ELSE
 							INC(d, dse); INC(de, 2); INC(dse, 4); INC(x); DEC(y)
 							INC(d, dse); INC(de, 2); INC(dse, 4); INC(x); DEC(y)
 						END;
 						END;
-						SELF.PaintDot(mx + x, my + y); SELF.PaintDot(mx + y, my + x);
-						SELF.PaintDot(mx + x, my - y); SELF.PaintDot(mx - y, my + x);
-						SELF.PaintDot(mx - x, my - y); SELF.PaintDot(mx - y, my - x);
-						SELF.PaintDot(mx - x, my + y); SELF.PaintDot(mx + y, my - x)
+						SELF.FillDot(mx + x, my + y); SELF.FillDot(mx + y, my + x);
+						SELF.FillDot(mx + x, my - y); SELF.FillDot(mx - y, my + x);
+						SELF.FillDot(mx - x, my - y); SELF.FillDot(mx - y, my - x);
+						SELF.FillDot(mx - x, my + y); SELF.FillDot(mx + y, my - x)
 					END
 					END
 				END
 				END
 			END HairCircle;
 			END HairCircle;
@@ -658,8 +658,8 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 					dy := -4*aa; dx := -db * (x-1);
 					dy := -4*aa; dx := -db * (x-1);
 					d := bb * (4*x - 1);
 					d := bb * (4*x - 1);
 					WHILE db * x < da * y DO
 					WHILE db * x < da * y DO
-						SELF.PaintDot(mx + x, my + y); SELF.PaintDot(mx + x, my - y);
-						SELF.PaintDot(mx - x, my + y); SELF.PaintDot(mx - x, my - y);
+						SELF.FillDot(mx + x, my + y); SELF.FillDot(mx + x, my - y);
+						SELF.FillDot(mx - x, my + y); SELF.FillDot(mx - x, my - y);
 						INC(d, dy); INC(dy, da); INC(y);
 						INC(d, dy); INC(dy, da); INC(y);
 						IF d < 0 THEN
 						IF d < 0 THEN
 							INC(d, dx); INC(dx, db); DEC(x)
 							INC(d, dx); INC(dx, db); DEC(x)
@@ -668,8 +668,8 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 					dx := 4 * bb * (2*x - 1); dy := da * (y+1);
 					dx := 4 * bb * (2*x - 1); dy := da * (y+1);
 					d := d - bb * (4*x - 1) - aa * (4*y + 1);
 					d := d - bb * (4*x - 1) - aa * (4*y + 1);
 					WHILE x >= 0 DO
 					WHILE x >= 0 DO
-						SELF.PaintDot(mx + x, my + y); SELF.PaintDot(mx + x, my - y);
-						SELF.PaintDot(mx - x, my + y); SELF.PaintDot(mx - x, my - y);
+						SELF.FillDot(mx + x, my + y); SELF.FillDot(mx + x, my - y);
+						SELF.FillDot(mx - x, my + y); SELF.FillDot(mx - x, my - y);
 						INC(d, dx); INC(dx, db); DEC(x);
 						INC(d, dx); INC(dx, db); DEC(x);
 						IF d >= 0 THEN
 						IF d >= 0 THEN
 							INC(d, dy); INC(dy, da); INC(y)
 							INC(d, dy); INC(dy, da); INC(y)
@@ -886,7 +886,7 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 					right := ENTIER(lu + 0.5); left := right - ENTIER(2*SELF.devWidth + 0.5);
 					right := ENTIER(lu + 0.5); left := right - ENTIER(2*SELF.devWidth + 0.5);
 					bot := ENTIER(v1 + 0.5); top := ENTIER(v0 + 0.5)
 					bot := ENTIER(v1 + 0.5); top := ENTIER(v0 + 0.5)
 				END;
 				END;
-				SELF.PaintRect(SHORT(left), SHORT(bot), SHORT(right), SHORT(top))
+				SELF.FillRect(SHORT(left), SHORT(bot), SHORT(right), SHORT(top))
 			END ThickVerticalLine;
 			END ThickVerticalLine;
 
 
 			PROCEDURE ThickHorizontalLine (rv, u0, u1: REAL);
 			PROCEDURE ThickHorizontalLine (rv, u0, u1: REAL);
@@ -899,7 +899,7 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 					left := ENTIER(u1 + 0.5); right := ENTIER(u0 + 0.5);
 					left := ENTIER(u1 + 0.5); right := ENTIER(u0 + 0.5);
 					top := ENTIER(rv + 0.5); bot := top - ENTIER(2*SELF.devWidth + 0.5)
 					top := ENTIER(rv + 0.5); bot := top - ENTIER(2*SELF.devWidth + 0.5)
 				END;
 				END;
-				SELF.PaintRect(SHORT(left), SHORT(bot), SHORT(right), SHORT(top))
+				SELF.FillRect(SHORT(left), SHORT(bot), SHORT(right), SHORT(top))
 			END ThickHorizontalLine;
 			END ThickHorizontalLine;
 
 
 			PROCEDURE ThickLine (su, sv, eu, ev, du, dv: REAL);
 			PROCEDURE ThickLine (su, sv, eu, ev, du, dv: REAL);
@@ -1263,7 +1263,7 @@ MODULE GfxRaster; (** portable *)	(* eos  *)
 		VAR rc: Context;
 		VAR rc: Context;
 	BEGIN
 	BEGIN
 		rc := data(RegData).context;
 		rc := data(RegData).context;
-		rc.PaintRect(lx, ly, rx, uy)
+		rc.FillRect(lx, ly, rx, uy)
 	END EnumRegion;
 	END EnumRegion;
 
 
 	PROCEDURE AddPathElem (VAR data: GfxPaths.EnumData);
 	PROCEDURE AddPathElem (VAR data: GfxPaths.EnumData);