@@ -11,13 +11,60 @@ use binaryninjacore_sys::*;
11
11
use std:: ffi:: { c_char, c_void} ;
12
12
use std:: ptr:: NonNull ;
13
13
14
- pub type RenderLayerDefaultEnableState = BNRenderLayerDefaultEnableState ;
14
+ /// The state in which the [`RenderLayer`] will be registered with.
15
+ #[ repr( u32 ) ]
16
+ pub enum RenderLayerDefaultState {
17
+ /// Register the [`RenderLayer`] as disabled, the user must then enable it via the UI.
18
+ ///
19
+ /// This is the default registration value.
20
+ Disabled = 0 ,
21
+ /// Register the [`RenderLayer`] as enabled, the user must then disable it via the UI.
22
+ Enabled = 1 ,
23
+ /// Use this if you do not want the render layer to be adjustable via the UI.
24
+ AlwaysEnabled = 2 ,
25
+ }
26
+
27
+ impl From < BNRenderLayerDefaultEnableState > for RenderLayerDefaultState {
28
+ fn from ( value : BNRenderLayerDefaultEnableState ) -> Self {
29
+ match value {
30
+ BNRenderLayerDefaultEnableState :: DisabledByDefaultRenderLayerDefaultEnableState => {
31
+ Self :: Disabled
32
+ }
33
+ BNRenderLayerDefaultEnableState :: EnabledByDefaultRenderLayerDefaultEnableState => {
34
+ Self :: Enabled
35
+ }
36
+ BNRenderLayerDefaultEnableState :: AlwaysEnabledRenderLayerDefaultEnableState => {
37
+ Self :: AlwaysEnabled
38
+ }
39
+ }
40
+ }
41
+ }
42
+
43
+ impl From < RenderLayerDefaultState > for BNRenderLayerDefaultEnableState {
44
+ fn from ( value : RenderLayerDefaultState ) -> Self {
45
+ match value {
46
+ RenderLayerDefaultState :: Disabled => {
47
+ Self :: DisabledByDefaultRenderLayerDefaultEnableState
48
+ }
49
+ RenderLayerDefaultState :: Enabled => Self :: EnabledByDefaultRenderLayerDefaultEnableState ,
50
+ RenderLayerDefaultState :: AlwaysEnabled => {
51
+ Self :: AlwaysEnabledRenderLayerDefaultEnableState
52
+ }
53
+ }
54
+ }
55
+ }
56
+
57
+ impl Default for RenderLayerDefaultState {
58
+ fn default ( ) -> Self {
59
+ Self :: Disabled
60
+ }
61
+ }
15
62
16
63
/// Register a [`RenderLayer`] with the API.
17
64
pub fn register_render_layer < S : BnStrCompatible , T : RenderLayer > (
18
65
name : S ,
19
66
render_layer : T ,
20
- enable_state : RenderLayerDefaultEnableState ,
67
+ default_state : RenderLayerDefaultState ,
21
68
) -> ( & ' static mut T , CoreRenderLayer ) {
22
69
let render_layer = Box :: leak ( Box :: new ( render_layer) ) ;
23
70
let mut callback = BNRenderLayerCallbacks {
@@ -30,7 +77,7 @@ pub fn register_render_layer<S: BnStrCompatible, T: RenderLayer>(
30
77
BNRegisterRenderLayer (
31
78
name. into_bytes_with_nul ( ) . as_ref ( ) . as_ptr ( ) as * const _ ,
32
79
& mut callback,
33
- enable_state ,
80
+ default_state . into ( ) ,
34
81
)
35
82
} ;
36
83
let core = CoreRenderLayer :: from_raw ( NonNull :: new ( result) . unwrap ( ) ) ;
@@ -263,8 +310,9 @@ impl CoreRenderLayer {
263
310
NonNull :: new ( result) . map ( Self :: from_raw)
264
311
}
265
312
266
- pub fn default_enable_state ( & self ) -> RenderLayerDefaultEnableState {
267
- unsafe { BNGetRenderLayerDefaultEnableState ( self . handle . as_ptr ( ) ) }
313
+ pub fn default_state ( & self ) -> RenderLayerDefaultState {
314
+ let raw = unsafe { BNGetRenderLayerDefaultEnableState ( self . handle . as_ptr ( ) ) } ;
315
+ RenderLayerDefaultState :: from ( raw)
268
316
}
269
317
270
318
pub fn apply_to_flow_graph ( & self , graph : & FlowGraph ) {
0 commit comments