Skip to content

Commit 4b82aa2

Browse files
committed
Fix window resizing (stale scene) + impl Image support in WinUIBackend
1 parent f8bfe27 commit 4b82aa2

File tree

3 files changed

+31
-17
lines changed

3 files changed

+31
-17
lines changed

Examples/Sources/WindowingExample/WindowingApp.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ struct WindowingApp: App {
4242
}
4343
}
4444
.defaultSize(width: 200, height: 200)
45-
.windowResizability(.contentSize)
45+
.windowResizability(.contentMinSize)
4646

4747
WindowGroup("Tertiary window") {
4848
#hotReloadable {
@@ -51,6 +51,6 @@ struct WindowingApp: App {
5151
}
5252
}
5353
.defaultSize(width: 200, height: 200)
54-
.windowResizability(.contentSize)
54+
.windowResizability(.contentMinSize)
5555
}
5656
}

Sources/SwiftCrossUI/Scenes/WindowGroupNode.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public final class WindowGroupNode<Content: View>: SceneGraphNode {
4949
return
5050
}
5151
_ = self.update(
52-
scene,
52+
self.scene,
5353
proposedWindowSize: newSize,
5454
backend: backend,
5555
environment: parentEnvironment
@@ -108,7 +108,7 @@ public final class WindowGroupNode<Content: View>: SceneGraphNode {
108108
// scene's body. I have a vague feeling that it wouldn't work in all cases?
109109
// But I don't have the time to come up with a counterexample right now.
110110
_ = self.update(
111-
scene,
111+
self.scene,
112112
proposedWindowSize: backend.size(ofWindow: window),
113113
backend: backend,
114114
environment: environment

Sources/WinUIBackend/WinUIBackend.swift

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -585,20 +585,34 @@ public struct WinUIBackend: AppBackend {
585585
(textField as! TextBox).text
586586
}
587587

588-
// public func createImageView(filePath: String) -> Widget {
589-
// let image = Image()
590-
// let bitMapImage = BitmapImage()
591-
// bitMapImage.uriSource = Uri(filePath)
592-
// image.source = bitMapImage
593-
// image.minHeight = 5
594-
// return image
595-
// }
588+
public func createImageView() -> Widget {
589+
WinUI.Image()
590+
}
591+
592+
public func updateImageView(
593+
_ imageView: Widget,
594+
rgbaData: [UInt8],
595+
width: Int,
596+
height: Int,
597+
targetWidth: Int,
598+
targetHeight: Int,
599+
dataHasChanged: Bool
600+
) {
601+
let imageView = imageView as! WinUI.Image
602+
let bitmap = WriteableBitmap(Int32(width), Int32(height))
603+
let buffer = try! bitmap.pixelBuffer.buffer!
604+
memcpy(buffer, rgbaData, min(Int(bitmap.pixelBuffer.length), rgbaData.count))
605+
606+
// Convert RGBA to BGRA in-place.
607+
for i in 0..<(width * height) {
608+
let offset = i * 4
609+
let tmp = buffer[offset]
610+
buffer[offset] = buffer[offset + 2]
611+
buffer[offset + 2] = tmp
612+
}
596613

597-
// public func updateImageView(_ imageView: Widget, filePath: String) {
598-
// let bitMapImage = BitmapImage()
599-
// bitMapImage.uriSource = Uri(filePath)
600-
// (imageView as! WinUI.Image).source = bitMapImage
601-
// }
614+
imageView.source = bitmap
615+
}
602616

603617
// public func createOneOfContainer() -> Widget {
604618
// let frame = Frame()

0 commit comments

Comments
 (0)