UNPKG

2 kBJavaScriptView Raw
1var round = Math.round;
2export function subPixelOptimizeLine(outputShape, inputShape, style) {
3 if (!inputShape) {
4 return;
5 }
6 var x1 = inputShape.x1;
7 var x2 = inputShape.x2;
8 var y1 = inputShape.y1;
9 var y2 = inputShape.y2;
10 outputShape.x1 = x1;
11 outputShape.x2 = x2;
12 outputShape.y1 = y1;
13 outputShape.y2 = y2;
14 var lineWidth = style && style.lineWidth;
15 if (!lineWidth) {
16 return outputShape;
17 }
18 if (round(x1 * 2) === round(x2 * 2)) {
19 outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true);
20 }
21 if (round(y1 * 2) === round(y2 * 2)) {
22 outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true);
23 }
24 return outputShape;
25}
26export function subPixelOptimizeRect(outputShape, inputShape, style) {
27 if (!inputShape) {
28 return;
29 }
30 var originX = inputShape.x;
31 var originY = inputShape.y;
32 var originWidth = inputShape.width;
33 var originHeight = inputShape.height;
34 outputShape.x = originX;
35 outputShape.y = originY;
36 outputShape.width = originWidth;
37 outputShape.height = originHeight;
38 var lineWidth = style && style.lineWidth;
39 if (!lineWidth) {
40 return outputShape;
41 }
42 outputShape.x = subPixelOptimize(originX, lineWidth, true);
43 outputShape.y = subPixelOptimize(originY, lineWidth, true);
44 outputShape.width = Math.max(subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x, originWidth === 0 ? 0 : 1);
45 outputShape.height = Math.max(subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y, originHeight === 0 ? 0 : 1);
46 return outputShape;
47}
48export function subPixelOptimize(position, lineWidth, positiveOrNegative) {
49 if (!lineWidth) {
50 return position;
51 }
52 var doubledPosition = round(position * 2);
53 return (doubledPosition + round(lineWidth)) % 2 === 0
54 ? doubledPosition / 2
55 : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;
56}