@@ -11,13 +11,60 @@ use binaryninjacore_sys::*;
1111use std:: ffi:: { c_char, c_void} ;
1212use std:: ptr:: NonNull ;
1313
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+ }
1562
1663/// Register a [`RenderLayer`] with the API.
1764pub fn register_render_layer < S : BnStrCompatible , T : RenderLayer > (
1865 name : S ,
1966 render_layer : T ,
20- enable_state : RenderLayerDefaultEnableState ,
67+ default_state : RenderLayerDefaultState ,
2168) -> ( & ' static mut T , CoreRenderLayer ) {
2269 let render_layer = Box :: leak ( Box :: new ( render_layer) ) ;
2370 let mut callback = BNRenderLayerCallbacks {
@@ -30,7 +77,7 @@ pub fn register_render_layer<S: BnStrCompatible, T: RenderLayer>(
3077 BNRegisterRenderLayer (
3178 name. into_bytes_with_nul ( ) . as_ref ( ) . as_ptr ( ) as * const _ ,
3279 & mut callback,
33- enable_state ,
80+ default_state . into ( ) ,
3481 )
3582 } ;
3683 let core = CoreRenderLayer :: from_raw ( NonNull :: new ( result) . unwrap ( ) ) ;
@@ -263,8 +310,9 @@ impl CoreRenderLayer {
263310 NonNull :: new ( result) . map ( Self :: from_raw)
264311 }
265312
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)
268316 }
269317
270318 pub fn apply_to_flow_graph ( & self , graph : & FlowGraph ) {
0 commit comments