browser_window_core/window/
c.rs1use super::{
5 WindowExt,
6 WindowOptions
7};
8
9use crate::{
10 application::ApplicationImpl,
11 prelude::*
12};
13
14use std::{
15 os::raw::c_char,
16 ptr
17};
18
19
20
21#[derive(Clone,Copy)]
22pub struct WindowImpl {
23 pub(in crate) inner: *mut cbw_Window
24}
25
26
27
28impl WindowImpl {
29
30 pub fn new(
31 app: ApplicationImpl,
32 parent: Self,
33 title: &str,
34 width: Option<u32>,
35 height: Option<u32>,
36 options: &WindowOptions,
37 user_data: *mut ()
38 ) -> Self {
39 let str_slice: cbw_CStrSlice = title.into();
40
41 let w = match width {
42 None => -1i32,
43 Some( x ) => x as i32
44 };
45 let h = match height {
46 None => -1i32,
47 Some( x ) => x as i32
48 };
49
50 let handle = unsafe { cbw_Window_new(
51 app.inner,
52 parent.inner,
53 str_slice,
54 w,
55 h,
56 options,
57 user_data as _
58 ) };
59
60 Self { inner: handle }
62 }
63}
64
65impl WindowExt for WindowImpl {
66
67 fn app( &self ) -> ApplicationImpl {
68 ApplicationImpl { inner: unsafe { (*self.inner).app } }
69 }
70
71 fn destroy( &self ) {
72 unsafe { cbw_Window_destroy( self.inner ) }
73 }
74
75 fn drop( &self ) {
76 unsafe { cbw_Window_drop( self.inner ) }
77 }
78
79 fn get_content_dimensions( &self ) -> Dims2D {
80 unsafe { Dims2D(cbw_Window_getContentDimensions( self.inner )) }
81 }
82
83 fn get_opacity( &self ) -> u8 {
84 unsafe { cbw_Window_getOpacity( self.inner ) }
85 }
86
87 fn get_position( &self ) -> Pos2D {
88 unsafe { Pos2D(cbw_Window_getPosition( self.inner )) }
89 }
90
91 fn get_title( &self ) -> String {
92 let mut buf: *mut c_char = ptr::null_mut();
94 let buf_len = unsafe { cbw_Window_getTitle( self.inner, &mut buf) };
95
96 let slice = cbw_StrSlice { data: buf, len: buf_len };
97
98 unsafe { cbw_string_freeCstr(buf) };
99
100 slice.into()
102 }
103
104 fn get_window_dimensions( &self ) -> Dims2D {
105 unsafe { Dims2D(cbw_Window_getWindowDimensions( self.inner )) }
106 }
107
108 fn hide( &self ) {
109 unsafe { cbw_Window_hide( self.inner ) }
110 }
111
112 fn set_content_dimensions( &self, dimensions: Dims2D ) {
113 unsafe { cbw_Window_setContentDimensions( self.inner, dimensions.0 ) }
114 }
115
116 fn set_opacity( &self, opacity: u8 ) {
117 unsafe { cbw_Window_setOpacity( self.inner, opacity ) }
118 }
119
120 fn set_position( &self, position: Pos2D ) {
121 unsafe { cbw_Window_setPosition( self.inner, position.0 ) }
122 }
123
124 fn set_title( &self, title: &str ) {
125 let slice: cbw_CStrSlice = title.into();
126 unsafe { cbw_Window_setTitle( self.inner, slice ) };
127 }
128
129 fn set_window_dimensions( &self, dimensions: Dims2D ) {
130 unsafe { cbw_Window_setWindowDimensions( self.inner, dimensions.0 ) }
131 }
132
133 fn show( &self ) {
134 unsafe { cbw_Window_show( self.inner ) }
135 }
136}
137
138impl Default for WindowImpl {
139 fn default() -> Self {
140 Self {
141 inner: ptr::null_mut()
142 }
143 }
144}