Skip to content

Commit b8b3912

Browse files
committed
added winUI backend support
1 parent 77794a0 commit b8b3912

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

Sources/WinUIBackend/WinUIBackend.swift

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
18181860
class SwiftIInitializeWithWindow: WindowsFoundation.IUnknown {
18191861
override class var IID: WindowsFoundation.IID {
18201862
WindowsFoundation.IID(

0 commit comments

Comments
 (0)