Przeglądaj źródła

【2025】【PDFView】Markup注释圆角问题

dinglingui 2 miesięcy temu
rodzic
commit
2c51b51554

+ 67 - 2
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFMarkupAnnotation+PDFListView.swift

@@ -233,15 +233,80 @@ class CPDFAnnotationMarkupExtraIvars: NSObject {
             if(isHover) {
                 var length = [CGFloat](repeating: 5, count: 2)
                 KMContextSetLineDash(context, 0, length, 2)
-                KMContextStrokeRectWithWidth(context, KMRectInset(NSRectToCGRect(rect), lineWidth, lineWidth), lineWidth)
+                let dirtyRect = KMRectInset(NSRectToCGRect(rect), lineWidth, lineWidth)
+                let cornerRadius = min(abs(dirtyRect.size.width)/2.0, abs(dirtyRect.size.height)/6.0); // 设置圆角半径
+                
+                // 移动到起始点
+                context.move(to: CGPoint(x: dirtyRect.minX + cornerRadius, y: dirtyRect.minY))
+                
+                // 添加直线
+                context.addLine(to: CGPoint(x: dirtyRect.maxX - cornerRadius, y: dirtyRect.minY))
+                
+                // 添加右上角圆弧
+                context.addArc(tangent1End: CGPoint(x: dirtyRect.maxX, y: dirtyRect.minY), tangent2End: CGPoint(x: dirtyRect.maxX, y: dirtyRect.minY + cornerRadius), radius: cornerRadius)
+                
+                // 添加右边直线
+                context.addLine(to: CGPoint(x: dirtyRect.maxX, y: dirtyRect.maxY - cornerRadius))
+                
+                // 添加右下角圆弧
+                context.addArc(tangent1End: CGPoint(x: dirtyRect.maxX, y: dirtyRect.maxY), tangent2End: CGPoint(x: dirtyRect.maxX - cornerRadius, y: dirtyRect.maxY), radius: cornerRadius)
+                
+                // 添加底边直线
+                context.addLine(to: CGPoint(x: dirtyRect.minX + cornerRadius, y: dirtyRect.maxY))
+                
+                // 添加左下角圆弧
+                context.addArc(tangent1End: CGPoint(x: dirtyRect.minX, y: dirtyRect.maxY), tangent2End: CGPoint(x: dirtyRect.minX, y: dirtyRect.maxY - cornerRadius), radius: cornerRadius)
+                
+                // 添加左边直线
+                context.addLine(to: CGPoint(x: dirtyRect.minX, y: dirtyRect.minY + cornerRadius))
+                
+                // 添加左上角圆弧
+                context.addArc(tangent1End: CGPoint(x: dirtyRect.minX, y: dirtyRect.minY), tangent2End: CGPoint(x: dirtyRect.minX + cornerRadius, y: dirtyRect.minY), radius: cornerRadius)
+                
+                // 关闭路径
+                context.closePath()
+                context.strokePath()
             } else {
-                KMContextStrokeRect(context, KMRectInset(NSRectToCGRect(rect), lineWidth, lineWidth))
+                let dirtyRect = KMRectInset(NSRectToCGRect(rect), lineWidth, lineWidth)
+                let cornerRadius = min(abs(dirtyRect.size.width)/2.0, abs(dirtyRect.size.height)/6.0); // 设置圆角半径
+                
+                // 移动到起始点
+                context.move(to: CGPoint(x: dirtyRect.minX + cornerRadius, y: dirtyRect.minY))
+                
+                // 添加直线
+                context.addLine(to: CGPoint(x: dirtyRect.maxX - cornerRadius, y: dirtyRect.minY))
+                
+                // 添加右上角圆弧
+                context.addArc(tangent1End: CGPoint(x: dirtyRect.maxX, y: dirtyRect.minY), tangent2End: CGPoint(x: dirtyRect.maxX, y: dirtyRect.minY + cornerRadius), radius: cornerRadius)
+                
+                // 添加右边直线
+                context.addLine(to: CGPoint(x: dirtyRect.maxX, y: dirtyRect.maxY - cornerRadius))
+                
+                // 添加右下角圆弧
+                context.addArc(tangent1End: CGPoint(x: dirtyRect.maxX, y: dirtyRect.maxY), tangent2End: CGPoint(x: dirtyRect.maxX - cornerRadius, y: dirtyRect.maxY), radius: cornerRadius)
+                
+                // 添加底边直线
+                context.addLine(to: CGPoint(x: dirtyRect.minX + cornerRadius, y: dirtyRect.maxY))
+                
+                // 添加左下角圆弧
+                context.addArc(tangent1End: CGPoint(x: dirtyRect.minX, y: dirtyRect.maxY), tangent2End: CGPoint(x: dirtyRect.minX, y: dirtyRect.maxY - cornerRadius), radius: cornerRadius)
+                
+                // 添加左边直线
+                context.addLine(to: CGPoint(x: dirtyRect.minX, y: dirtyRect.minY + cornerRadius))
+                
+                // 添加左上角圆弧
+                context.addArc(tangent1End: CGPoint(x: dirtyRect.minX, y: dirtyRect.minY), tangent2End: CGPoint(x: dirtyRect.minX + cornerRadius, y: dirtyRect.minY), radius: cornerRadius)
+                
+                // 关闭路径
+                context.closePath()
+                context.strokePath()
             }
             
         }
         KMContextRestoreGState(context)
     }
     
+    
     override func hitTest(_ point: NSPoint) -> Bool {
         if super.hitTest(point) == false {
             return false