-
Notifications
You must be signed in to change notification settings - Fork 117
Add a cross-import overlay with AppKit to allow attaching NSImage
s.
#869
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@swift-ci test |
This PR adds on to the Core Graphics cross-import overlay added in #827 to allow attaching instances of `NSImage` to a test. `NSImage` is a more complicated animal because it is not `Sendable`, but we don't want to make a (potentially very expensive) deep copy of its data until absolutely necessary. So we check inside the image to see if its contained representations are known to be safely copyable (i.e. copies made with `NSCopying` do not share any mutable state with their originals.) If it looks safe to make a copy of the image by calling `copy()`, we do so; otherwise, we try to make a deep copy of the image. Due to how Swift implements polymorphism in protocol requirements, and because we don't really know what they're doing, subclasses of `NSImage` just get a call to `copy()` instead of deep introspection. `UIImage` support will be implemented in a separate PR. > [!NOTE] > Attachments remain an experimental feature.
5b3df04
to
122e117
Compare
@swift-ci test |
@swift-ci test Linux |
@swift-ci test |
1 similar comment
@swift-ci test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know it's already merged but I had just a couple small comments that are relevant now but weren't when the PR was first posted. Hopefully we can do a fix-up PR or incorporate them into some follow-up work.
Sources/Overlays/_Testing_AppKit/Attachments/NSImage+AttachableAsCGImage.swift
Show resolved
Hide resolved
The PR (#869) that just added the AppKit overlay for `NSImage` was a bit stale. This PR corrects a couple of bugs that snuck in due to its age and the resulting bit rot.
The PR (#869) that just added the AppKit overlay for `NSImage` was a bit stale. This PR corrects a couple of bugs that snuck in due to its age and the resulting bit rot. ### Checklist: - [x] Code and documentation should follow the style of the [Style Guide](https://github.com/apple/swift-testing/blob/main/Documentation/StyleGuide.md). - [x] If public symbols are renamed or modified, DocC references should be updated.
This PR adds on to the Core Graphics cross-import overlay added in #827 to allow attaching instances of
NSImage
to a test.NSImage
is a more complicated animal because it is notSendable
, but we don't want to make a (potentially very expensive) deep copy of its data until absolutely necessary. So we check inside the image to see if its contained representations are known to be safely copyable (i.e. copies made withNSCopying
do not share any mutable state with their originals.) If it looks safe to make a copy of the image by callingcopy()
, we do so; otherwise, we try to make a deep copy of the image.Due to how Swift implements polymorphism in protocol requirements, and because we don't really know what they're doing, subclasses of
NSImage
just get a call tocopy()
instead of deep introspection.UIImage
support will be implemented in a separate PR.Note
Image attachments remain an experimental feature.
Checklist: