@@ -1377,6 +1377,42 @@ public final class WinUIBackend: AppBackend {
13771377 tapGestureTarget. height = tapGestureTarget. child!. height
13781378 }
13791379
1380+ public func createHoverTarget( wrapping child: Widget ) -> Widget {
1381+ let hoverTarget = HoverGestureTarget ( )
1382+ addChild ( child, to: hoverTarget)
1383+ hoverTarget. child = child
1384+
1385+ // Ensure the hover target covers the full area of the child.
1386+ // Use a transparent background so the visual appearance doesn't change but
1387+ // the hit-testing covers the whole region.
1388+ let brush = SolidColorBrush ( )
1389+ brush. color = UWP . Color ( a: 0 , r: 0 , g: 0 , b: 0 )
1390+ hoverTarget. background = brush
1391+
1392+ hoverTarget. pointerEntered. addHandler { [ weak hoverTarget] _, _ in
1393+ guard let hoverTarget else { return }
1394+ hoverTarget. enterHandler ? ( )
1395+ }
1396+ hoverTarget. pointerExited. addHandler { [ weak hoverTarget] _, _ in
1397+ guard let hoverTarget else { return }
1398+ hoverTarget. exitHandler ? ( )
1399+ }
1400+ return hoverTarget
1401+ }
1402+
1403+ public func updateHoverTarget(
1404+ _ hoverTarget: Widget ,
1405+ environment: EnvironmentValues ,
1406+ action: @escaping ( Bool ) -> Void
1407+ ) {
1408+ let hoverTarget = hoverTarget as! HoverGestureTarget
1409+ hoverTarget. enterHandler = environment. isEnabled ? { action ( true ) } : { }
1410+ hoverTarget. exitHandler = environment. isEnabled ? { action ( false ) } : { }
1411+
1412+ hoverTarget. width = hoverTarget. child!. width
1413+ hoverTarget. height = hoverTarget. child!. height
1414+ }
1415+
13801416 public func createProgressSpinner( ) -> Widget {
13811417 let spinner = ProgressRing ( )
13821418 spinner. isIndeterminate = true
@@ -1815,6 +1851,12 @@ final class TapGestureTarget: WinUI.Canvas {
18151851 var child : WinUI . FrameworkElement ?
18161852}
18171853
1854+ final class HoverGestureTarget : WinUI . Canvas {
1855+ var enterHandler : ( ( ) -> Void ) ?
1856+ var exitHandler : ( ( ) -> Void ) ?
1857+ var child : WinUI . FrameworkElement ?
1858+ }
1859+
18181860class SwiftIInitializeWithWindow : WindowsFoundation . IUnknown {
18191861 override class var IID : WindowsFoundation . IID {
18201862 WindowsFoundation . IID (
0 commit comments