Initial commit
This commit is contained in:
commit
a6272848f9
379 changed files with 74829 additions and 0 deletions
246
build/dev/javascript/paint/paint.mjs
Normal file
246
build/dev/javascript/paint/paint.mjs
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
import * as $colour from "../gleam_community_colour/gleam_community/colour.mjs";
|
||||
import * as $result from "../gleam_stdlib/gleam/result.mjs";
|
||||
import { toList, makeError } from "./gleam.mjs";
|
||||
import { pi } from "./numbers_ffi.mjs";
|
||||
import * as $internal_implementation from "./paint/internal/types.mjs";
|
||||
|
||||
const FILEPATH = "src/paint.gleam";
|
||||
|
||||
/**
|
||||
* Create an angle expressed in radians
|
||||
*/
|
||||
export function angle_rad(radians) {
|
||||
return new $internal_implementation.Radians(radians);
|
||||
}
|
||||
|
||||
/**
|
||||
* A utility around [colour.from_rgb_hex_string](https://hexdocs.pm/gleam_community_colour/gleam_community/colour.html#from_rgb_hex_string)
|
||||
* (from `gleam_community/colour`) that **panics** on an invalid hex code.
|
||||
*/
|
||||
export function colour_hex(string) {
|
||||
return $result.lazy_unwrap(
|
||||
$colour.from_rgb_hex_string(string),
|
||||
() => {
|
||||
throw makeError(
|
||||
"panic",
|
||||
FILEPATH,
|
||||
"paint",
|
||||
47,
|
||||
"colour_hex",
|
||||
"Failed to parse hex code",
|
||||
{}
|
||||
)
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* A utility around [colour.from_rgb255](https://hexdocs.pm/gleam_community_colour/gleam_community/colour.html#from_rgb255)
|
||||
* (from `gleam_community/colour`) that **panics** if the values are outside of the allowed range.
|
||||
*/
|
||||
export function colour_rgb(red, green, blue) {
|
||||
return $result.lazy_unwrap(
|
||||
$colour.from_rgb255(red, green, blue),
|
||||
() => {
|
||||
throw makeError(
|
||||
"panic",
|
||||
FILEPATH,
|
||||
"paint",
|
||||
55,
|
||||
"colour_rgb",
|
||||
"The value was not inside of the valid range [0-255]",
|
||||
{}
|
||||
)
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* A blank picture
|
||||
*/
|
||||
export function blank() {
|
||||
return new $internal_implementation.Blank();
|
||||
}
|
||||
|
||||
/**
|
||||
* An arc with some radius going from some
|
||||
* starting angle to some other angle in clock-wise direction
|
||||
*/
|
||||
export function arc(radius, start, end) {
|
||||
return new $internal_implementation.Arc(radius, start, end);
|
||||
}
|
||||
|
||||
/**
|
||||
* A polygon consisting of a list of 2d points
|
||||
*/
|
||||
export function polygon(points) {
|
||||
return new $internal_implementation.Polygon(points, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Lines (same as a polygon but not a closed shape)
|
||||
*/
|
||||
export function lines(points) {
|
||||
return new $internal_implementation.Polygon(points, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* A rectangle with some given width and height
|
||||
*/
|
||||
export function rectangle(width, height) {
|
||||
return polygon(
|
||||
toList([[0.0, 0.0], [width, 0.0], [width, height], [0.0, height]]),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* A square
|
||||
*/
|
||||
export function square(length) {
|
||||
return rectangle(length, length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw an image such as a PNG, JPEG or an SVG. See the `canvas` back-end for more details on how to load images.
|
||||
*/
|
||||
export function image(image, width_px, height_px) {
|
||||
return new $internal_implementation.ImageRef(image, width_px, height_px);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set image scaling to be smooth (this is the default behaviour)
|
||||
*/
|
||||
export function image_scaling_smooth(picture) {
|
||||
return new $internal_implementation.ImageScalingBehaviour(
|
||||
picture,
|
||||
new $internal_implementation.ScalingSmooth(),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable smooth image scaling, suitable for pixel art.
|
||||
*/
|
||||
export function image_scaling_pixelated(picture) {
|
||||
return new $internal_implementation.ImageScalingBehaviour(
|
||||
picture,
|
||||
new $internal_implementation.ScalingPixelated(),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Text with some given font size
|
||||
*/
|
||||
export function text(text, font_size) {
|
||||
return new $internal_implementation.Text(
|
||||
text,
|
||||
new $internal_implementation.FontProperties(font_size, "sans-serif"),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a picture in horizontal and vertical direction
|
||||
*/
|
||||
export function translate_xy(picture, x, y) {
|
||||
return new $internal_implementation.Translate(picture, [x, y]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a picture in the horizontal direction
|
||||
*/
|
||||
export function translate_x(picture, x) {
|
||||
return translate_xy(picture, x, 0.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a picture in the vertical direction
|
||||
*/
|
||||
export function translate_y(picture, y) {
|
||||
return translate_xy(picture, 0.0, y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scale the picture in the horizontal direction
|
||||
*/
|
||||
export function scale_x(picture, factor) {
|
||||
return new $internal_implementation.Scale(picture, [factor, 1.0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scale the picture in the vertical direction
|
||||
*/
|
||||
export function scale_y(picture, factor) {
|
||||
return new $internal_implementation.Scale(picture, [1.0, factor]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scale the picture uniformly in horizontal and vertical direction
|
||||
*/
|
||||
export function scale_uniform(picture, factor) {
|
||||
return new $internal_implementation.Scale(picture, [factor, factor]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate the picture in a clock-wise direction
|
||||
*/
|
||||
export function rotate(picture, angle) {
|
||||
return new $internal_implementation.Rotate(picture, angle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill a picture with some given colour, see `Colour`.
|
||||
*/
|
||||
export function fill(picture, colour) {
|
||||
return new $internal_implementation.Fill(picture, colour);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a solid stroke with some given colour and width
|
||||
*/
|
||||
export function stroke(picture, colour, width) {
|
||||
return new $internal_implementation.Stroke(
|
||||
picture,
|
||||
new $internal_implementation.SolidStroke(colour, width),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the stroke of the given picture
|
||||
*/
|
||||
export function stroke_none(picture) {
|
||||
return new $internal_implementation.Stroke(
|
||||
picture,
|
||||
new $internal_implementation.NoStroke(),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Combine multiple pictures into one
|
||||
*/
|
||||
export function combine(pictures) {
|
||||
return new $internal_implementation.Combine(pictures);
|
||||
}
|
||||
|
||||
/**
|
||||
* Concatenate two pictures
|
||||
*/
|
||||
export function concat(picture, another_picture) {
|
||||
return combine(toList([picture, another_picture]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an angle expressed in degrees
|
||||
*/
|
||||
export function angle_deg(degrees) {
|
||||
return new $internal_implementation.Radians(((degrees * pi())) / 180.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* A circle with some given radius
|
||||
*/
|
||||
export function circle(radius) {
|
||||
return new $internal_implementation.Arc(
|
||||
radius,
|
||||
new $internal_implementation.Radians(0.0),
|
||||
new $internal_implementation.Radians(2.0 * pi()),
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue