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; 
 | 
} 
 |