1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;
use objc2_foundation::*;
#[cfg(feature = "objc2-metal")]
use objc2_metal::*;

use crate::*;

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct CAMetalDisplayLinkUpdate;

    unsafe impl ClassType for CAMetalDisplayLinkUpdate {
        type Super = NSObject;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSObjectProtocol for CAMetalDisplayLinkUpdate {}

extern_methods!(
    unsafe impl CAMetalDisplayLinkUpdate {
        #[cfg(all(feature = "CAMetalLayer", feature = "objc2-metal"))]
        #[method_id(@__retain_semantics Other drawable)]
        pub unsafe fn drawable(&self) -> Retained<ProtocolObject<dyn CAMetalDrawable>>;

        #[method(targetTimestamp)]
        pub unsafe fn targetTimestamp(&self) -> CFTimeInterval;

        #[method(targetPresentationTimestamp)]
        pub unsafe fn targetPresentationTimestamp(&self) -> CFTimeInterval;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl CAMetalDisplayLinkUpdate {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;
    }
);

extern_protocol!(
    pub unsafe trait CAMetalDisplayLinkDelegate {
        #[method(metalDisplayLink:needsUpdate:)]
        unsafe fn metalDisplayLink_needsUpdate(
            &self,
            link: &CAMetalDisplayLink,
            update: &CAMetalDisplayLinkUpdate,
        );
    }

    unsafe impl ProtocolType for dyn CAMetalDisplayLinkDelegate {}
);

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct CAMetalDisplayLink;

    unsafe impl ClassType for CAMetalDisplayLink {
        type Super = NSObject;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSObjectProtocol for CAMetalDisplayLink {}

extern_methods!(
    unsafe impl CAMetalDisplayLink {
        #[cfg(all(feature = "CALayer", feature = "CAMetalLayer"))]
        #[method_id(@__retain_semantics Init initWithMetalLayer:)]
        pub unsafe fn initWithMetalLayer(
            this: Allocated<Self>,
            layer: &CAMetalLayer,
        ) -> Retained<Self>;

        #[method(addToRunLoop:forMode:)]
        pub unsafe fn addToRunLoop_forMode(&self, runloop: &NSRunLoop, mode: &NSRunLoopMode);

        #[method(removeFromRunLoop:forMode:)]
        pub unsafe fn removeFromRunLoop_forMode(&self, runloop: &NSRunLoop, mode: &NSRunLoopMode);

        #[method(invalidate)]
        pub unsafe fn invalidate(&self);

        #[method_id(@__retain_semantics Other delegate)]
        pub unsafe fn delegate(
            &self,
        ) -> Option<Retained<ProtocolObject<dyn CAMetalDisplayLinkDelegate>>>;

        #[method(setDelegate:)]
        pub unsafe fn setDelegate(
            &self,
            delegate: Option<&ProtocolObject<dyn CAMetalDisplayLinkDelegate>>,
        );

        #[method(preferredFrameLatency)]
        pub unsafe fn preferredFrameLatency(&self) -> c_float;

        #[method(setPreferredFrameLatency:)]
        pub unsafe fn setPreferredFrameLatency(&self, preferred_frame_latency: c_float);

        #[cfg(feature = "CAFrameRateRange")]
        #[method(preferredFrameRateRange)]
        pub unsafe fn preferredFrameRateRange(&self) -> CAFrameRateRange;

        #[cfg(feature = "CAFrameRateRange")]
        #[method(setPreferredFrameRateRange:)]
        pub unsafe fn setPreferredFrameRateRange(
            &self,
            preferred_frame_rate_range: CAFrameRateRange,
        );

        #[method(isPaused)]
        pub unsafe fn isPaused(&self) -> bool;

        #[method(setPaused:)]
        pub unsafe fn setPaused(&self, paused: bool);
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl CAMetalDisplayLink {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;
    }
);