AMPopTip icon indicating copy to clipboard operation
AMPopTip copied to clipboard

Top border gets cut-out

Open gchiacchio opened this issue 4 years ago • 1 comments

Describe the bug By setting a border and showing with .up direction will render half of of the top border

To Reproduce My settings

        popTip = PopTip()
        popTip.shouldDismissOnTap = false
        popTip.shouldDismissOnTapOutside = false
        popTip.shouldDismissOnSwipeOutside = false
        popTip.bubbleOffset = 0
        popTip.edgeInsets = UIEdgeInsets(
            top: 0,
            left: 8,
            bottom: 0,
            right: 8)
        popTip.bubbleColor = .white
        popTip.borderColor = .textGrey750
        popTip.borderWidth = 2
        popTip.cornerRadius = 12
        popTip.arrowRadius = 2

calling it later with .up will cut-out half of the top border.

Expected behavior Top border should be properly rendered

Screenshots image

I've tracked the issue down to this piece of code in PopTip+Draw.swift (lines 83-88):

      // 7: Top left arc
      path.addArc(withCenter: CGPoint(x: baloonFrame.minX + radius + borderWidth, y: baloonFrame.minY + radius), radius:radius, startAngle: CGFloat.pi, endAngle: CGFloat.pi * 1.5, clockwise: true)
      // 8: Top line
      path.addLine(to: CGPoint(x: baloonFrame.width - radius, y: baloonFrame.minY))
      // 9: Top right arc
      path.addArc(withCenter: CGPoint(x: baloonFrame.width - radius, y: baloonFrame.minY + radius), radius:radius, startAngle: CGFloat.pi * 1.5, endAngle: 0, clockwise:true)

Looks like is not accounting for the borderWidth. The stroke will be applied right in the edge of the path, so half inside of the balloon, half outside. That way, the path should account for the outer part of the border stroke. From UIBezierPath.fill() docs

The painted region includes the pixels right up to, but not including, the path line itself. For paths with large line widths, this can result in overlap between the fill region and the stroked path (which is itself centered on the path line).

gchiacchio avatar Aug 17 '21 19:08 gchiacchio

Hey @gchiacchio Thanks for the detailed report, I'll look into it as soon as I can

andreamazz avatar Aug 27 '21 07:08 andreamazz