1#[doc(hidden)]
2#[macro_export]
3macro_rules! impl_input_ext {
5 ($name: ident, $flname: ident) => {
6 paste::paste! {
7 unsafe impl InputExt for $name {
8 fn value(&self) -> String {
9 unsafe {
10 let value_ptr = [<$flname _value>](self.inner.widget() as _);
11 assert!(!value_ptr.is_null());
12 CStr::from_ptr(value_ptr as *mut std::os::raw::c_char)
13 .to_string_lossy()
14 .to_string()
15 }
16 }
17
18 fn set_value(&mut self, val: &str) {
19 let temp = CString::safe_new(val);
20 unsafe {
21 [<$flname _set_value>](self.inner.widget() as _, temp.as_ptr());
22 }
23 }
24
25 fn maximum_size(&self) -> i32 {
26 unsafe {
27 [<$flname _maximum_size>](self.inner.widget() as _) as i32
28 }
29 }
30
31 fn set_maximum_size(&mut self, val: i32) {
32 unsafe {
33 [<$flname _set_maximum_size>](self.inner.widget() as _, val as i32)
34 }
35 }
36
37 fn insert_position(&self) -> i32 {
38 unsafe {
39 [<$flname _position>](self.inner.widget() as _) as i32
40 }
41 }
42
43 fn set_position(&mut self, val: i32) -> Result<(), FltkError> {
44 unsafe {
45 let x = [<$flname _set_position>](self.inner.widget() as _, val as i32);
46 if x == 0 {
47 return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
48 }
49 Ok(())
50 }
51 }
52
53 fn mark(&self) -> i32 {
54 unsafe {
55 [<$flname _mark>](self.inner.widget() as _) as i32
56 }
57 }
58
59 fn set_mark(&mut self, val: i32) -> Result<(), FltkError> {
60 unsafe {
61 let x = [<$flname _set_mark>](self.inner.widget() as _, val as i32);
62 if x == 0 {
63 return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
64 }
65 Ok(())
66 }
67 }
68
69 fn replace(&mut self, beg: i32, end: i32, val: &str) -> Result<(), FltkError> {
70 let val = CString::safe_new(val);
71 unsafe {
72 let x = [<$flname _replace>](
73 self.inner.widget() as _,
74 beg as i32,
75 end as i32,
76 val.as_ptr(),
77 0,
78 );
79 if x == 0 {
80 return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
81 }
82 Ok(())
83 }
84 }
85
86 fn insert(&mut self, txt: &str) -> Result<(), FltkError> {
87 let txt = CString::safe_new(txt);
88 unsafe {
89 let x = [<$flname _insert>](self.inner.widget() as _, txt.as_ptr(), 0);
90 if x == 0 {
91 return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
92 }
93 Ok(())
94 }
95 }
96
97 fn append(&mut self, txt: &str) -> Result<(), FltkError> {
98 let txt = CString::safe_new(txt);
99 unsafe {
100 let x = [<$flname _append>](self.inner.widget() as _, txt.as_ptr(), 0, 0);
101 if x == 0 {
102 return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
103 }
104 Ok(())
105 }
106 }
107
108 fn copy(&mut self) -> Result<(), FltkError> {
109 unsafe {
110 let x = [<$flname _copy>](self.inner.widget() as _, 1);
111 if x == 0 {
112 return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
113 }
114 Ok(())
115 }
116 }
117
118 fn undo(&mut self) -> Result<(), FltkError> {
119 unsafe {
120 let x = [<$flname _undo>](self.inner.widget() as _);
121 if x == 0 {
122 return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
123 }
124 Ok(())
125 }
126 }
127
128 fn cut(&mut self) -> Result<(), FltkError> {
129 unsafe {
130 let x = [<$flname _copy_cuts>](self.inner.widget() as _);
131 if x == 0 {
132 return Err(FltkError::Internal(FltkErrorKind::FailedOperation));
133 }
134 Ok(())
135 }
136 }
137
138 fn text_font(&self) -> $crate::enums::Font {
139 unsafe {
140 std::mem::transmute([<$flname _text_font>](self.inner.widget() as _))
141 }
142 }
143
144 fn set_text_font(&mut self, font: $crate::enums::Font) {
145 unsafe {
146 [<$flname _set_text_font>](self.inner.widget() as _, font.bits() as i32)
147 }
148 }
149
150 fn cursor_color(&self) -> $crate::enums::Color {
151 unsafe {
152 std::mem::transmute([<$flname _cursor_color>](self.inner.widget() as _))
153 }
154 }
155
156 fn set_cursor_color(&mut self, color: $crate::enums::Color) {
157 unsafe {
158 [<$flname _set_cursor_color>](self.inner.widget() as _, color.bits() as u32)
159 }
160 }
161
162 fn text_color(&self) -> $crate::enums::Color {
163 unsafe {
164 std::mem::transmute([<$flname _text_color>](self.inner.widget() as _))
165 }
166 }
167
168 fn set_text_color(&mut self, color: $crate::enums::Color) {
169 unsafe {
170 [<$flname _set_text_color>](self.inner.widget() as _, color.bits() as u32)
171 }
172 }
173
174 fn text_size(&self) -> i32 {
175 unsafe {
176 [<$flname _text_size>](self.inner.widget() as _) as i32
177 }
178 }
179
180 fn set_text_size(&mut self, sz: i32) {
181 unsafe {
182 [<$flname _set_text_size>](self.inner.widget() as _, sz as i32)
183 }
184 }
185
186 fn readonly(&self) -> bool {
187 unsafe {
188 [<$flname _readonly>](self.inner.widget() as _) != 0
189 }
190 }
191
192 fn set_readonly(&mut self, val: bool) {
193 unsafe {
194 [<$flname _set_readonly>](self.inner.widget() as _, val as i32)
195 }
196 }
197
198 fn wrap(&self) -> bool {
199 unsafe {
200 [<$flname _wrap>](self.inner.widget() as _) != 0
201 }
202 }
203
204 fn set_wrap(&mut self, val: bool) {
205 unsafe {
206 [<$flname _set_wrap>](self.inner.widget() as _, val as i32)
207 }
208 }
209
210 fn set_tab_nav(&mut self, val: bool) {
211 unsafe {
212 [<$flname _set_tab_nav>](self.inner.widget() as _, val as i32)
213 }
214 }
215
216 fn tab_nav(&self) -> bool {
217 unsafe {
218 [<$flname _tab_nav>](self.inner.widget() as _) != 0
219 }
220 }
221 }
222 }
223 };
224}
225
226pub use impl_input_ext;