Blame view

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