Skip to content

Top border gets cut-out #220

Description

@gchiacchio

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions