diff --git a/README.md b/README.md index f680719..1cadfc9 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ public protocol Configuration { var menuItemTextColor: NSColor { get } var menuItemHoverTextColor: NSColor { get } var menuItemHoverCornerRadius: CGFloat { get } + var menuItemHoverEdgeInsets: NSEdgeInsets { get } var menuItemCheckmarkColor: NSColor { get } var menuItemHoverCheckmarkColor: NSColor { get } var menuItemCheckmarkHeight: CGFloat { get } diff --git a/Sources/Menu/Control.swift b/Sources/Menu/Control.swift index ae8c0ac..ec8ef1f 100644 --- a/Sources/Menu/Control.swift +++ b/Sources/Menu/Control.swift @@ -30,7 +30,8 @@ class Control: NSControl { override func layout() { super.layout() - hoverLayer.path = CGPath(roundedRect: bounds, cornerWidth: configuration.menuItemHoverCornerRadius, cornerHeight: configuration.menuItemHoverCornerRadius, transform: nil) + let newRect = bounds.inset(by: configuration.menuItemHoverEdgeInsets) + hoverLayer.path = CGPath(roundedRect: newRect, cornerWidth: configuration.menuItemHoverCornerRadius, cornerHeight: configuration.menuItemHoverCornerRadius, transform: nil) if let trackingArea = trackingArea, trackingAreas.contains(trackingArea) { removeTrackingArea(trackingArea) diff --git a/Sources/Menu/Extensions.swift b/Sources/Menu/Extensions.swift index 69e6550..2aba706 100644 --- a/Sources/Menu/Extensions.swift +++ b/Sources/Menu/Extensions.swift @@ -190,3 +190,14 @@ extension CGFloat { /// 48 points static let grid6: CGFloat = 48.0 } + +extension NSRect { + func inset(by insets: NSEdgeInsets) -> NSRect { + var newRect = self + newRect.origin.x += insets.left + newRect.size.width -= insets.left + insets.right + newRect.origin.y += insets.top + newRect.size.height -= insets.top + insets.bottom + return newRect + } +} diff --git a/Sources/Menu/MenuConfiguration.swift b/Sources/Menu/MenuConfiguration.swift index d627b95..be1116c 100644 --- a/Sources/Menu/MenuConfiguration.swift +++ b/Sources/Menu/MenuConfiguration.swift @@ -71,6 +71,7 @@ public protocol Configuration { var menuItemTextColor: NSColor { get } var menuItemHoverTextColor: NSColor { get } var menuItemHoverCornerRadius: CGFloat { get } + var menuItemHoverEdgeInsets: NSEdgeInsets { get } var menuItemCheckmarkColor: NSColor { get } var menuItemHoverCheckmarkColor: NSColor { get } var menuItemCheckmarkHeight: CGFloat { get } @@ -173,6 +174,10 @@ open class MenuConfiguration: Configuration { return .white } + open var menuItemHoverEdgeInsets: NSEdgeInsets { + return NSEdgeInsets.zero + } + open var menuItemHoverCornerRadius: CGFloat { return 0.0 }