49 lines
1.7 KiB
Plaintext
49 lines
1.7 KiB
Plaintext
# -*- coding: utf-8 -*- #
|
|
|
|
MODE PIXEL = STRUCT(#SHORT# BITS red,green,blue);
|
|
MODE POINT = STRUCT(INT x,y);
|
|
|
|
MODE IMAGE = [0,0]PIXEL; # instance attributes #
|
|
|
|
MODE CLASSIMAGE = STRUCT ( # class attributes #
|
|
PIXEL black, red, green, blue, white,
|
|
PROC (REF IMAGE)REF IMAGE init,
|
|
PROC (REF IMAGE, PIXEL)VOID fill,
|
|
PROC (REF IMAGE)VOID print,
|
|
# virtual: #
|
|
REF PROC (REF IMAGE, POINT, POINT, PIXEL)VOID line,
|
|
REF PROC (REF IMAGE, POINT, INT, PIXEL)VOID circle,
|
|
REF PROC (REF IMAGE, POINT, POINT, POINT, POINT, PIXEL, UNION(INT, VOID))VOID cubic bezier
|
|
);
|
|
|
|
CLASSIMAGE class image = (
|
|
# black = # (#SHORTEN# 16r00, #SHORTEN# 16r00, #SHORTEN# 16r00),
|
|
# red = # (#SHORTEN# 16rff, #SHORTEN# 16r00, #SHORTEN# 16r00),
|
|
# green = # (#SHORTEN# 16r00, #SHORTEN# 16rff, #SHORTEN# 16r00),
|
|
# blue = # (#SHORTEN# 16r00, #SHORTEN# 16r00, #SHORTEN# 16rff),
|
|
# white = # (#SHORTEN# 16rff, #SHORTEN# 16rff, #SHORTEN# 16rff),
|
|
# PROC init = # (REF IMAGE self)REF IMAGE:
|
|
BEGIN
|
|
(fill OF class image)(self, black OF class image);
|
|
self
|
|
END,
|
|
|
|
# PROC fill = # (REF IMAGE self, PIXEL color)VOID:
|
|
FOR x FROM 1 LWB self TO 1 UPB self DO
|
|
FOR y FROM 2 LWB self TO 2 UPB self DO
|
|
self[x,y] := color
|
|
OD
|
|
OD,
|
|
# PROC print = # (REF IMAGE self)VOID:
|
|
printf(($n(UPB self)(3(16r2d))l$, self)),
|
|
# virtual: #
|
|
# REF PROC line = # LOC PROC (REF IMAGE, POINT, POINT, PIXEL)VOID,
|
|
# REF PROC circle = # LOC PROC (REF IMAGE, POINT, INT, PIXEL)VOID,
|
|
# REF PROC cubic bezier = # LOC PROC (REF IMAGE, POINT, POINT, POINT, POINT, PIXEL, UNION(INT, VOID))VOID
|
|
);
|
|
|
|
OP CLASSOF = (IMAGE image)CLASSIMAGE: class image;
|
|
OP INIT = (REF IMAGE image)REF IMAGE: (init OF (CLASSOF image))(image);
|
|
|
|
SKIP
|