js-draw
Version:
Draw pictures using a pen, touchscreen, or mouse! JS-draw is a drawing library for JavaScript and TypeScript.
45 lines (44 loc) • 1.43 kB
JavaScript
const makeSnapToGridAutocorrect = (sourceFactory) => {
return (startPoint, viewport) => {
return new SnapToGridAutocompleteBuilder(sourceFactory, startPoint, viewport);
};
};
export default makeSnapToGridAutocorrect;
class SnapToGridAutocompleteBuilder {
constructor(sourceFactory, startPoint, viewport) {
this.sourceFactory = sourceFactory;
this.startPoint = startPoint;
this.viewport = viewport;
this.builder = sourceFactory(startPoint, viewport);
this.points = [startPoint];
}
getBBox() {
return this.builder.getBBox();
}
build() {
return this.builder.build();
}
preview(renderer) {
this.builder.preview(renderer);
}
addPoint(point) {
this.points.push(point);
this.builder.addPoint(point);
}
async autocorrectShape() {
const snapToGrid = (point) => {
return {
...point,
pos: this.viewport.snapToGrid(point.pos),
};
};
// Use screen points so that snapped shapes rotate with the screen.
const startPoint = snapToGrid(this.startPoint);
const builder = this.sourceFactory(startPoint, this.viewport);
const points = this.points.map((point) => snapToGrid(point));
for (const point of points) {
builder.addPoint(point);
}
return builder.build();
}
}