Function fltk::app::set_raw_callback[][src]

pub unsafe fn set_raw_callback<W>(
    widget: &mut W,
    data: *mut c_void,
    cb: Option<fn(_: WidgetPtr, _: *mut c_void)>
) where
    W: WidgetExt
Expand description

Set a widget callback using a C style API

use fltk::{prelude::*, *};
use std::os::raw::*;
// data can be anything, even a different widget
fn cb(w: app::WidgetPtr, data: *mut c_void) {
    // To access the button
    let mut btn = unsafe { button::Button::from_widget_ptr(w) }; // Gets a Widget
    btn.set_label("Works!");
    // To access the frame
    let mut frm = unsafe { widget::Widget::from_widget_ptr(data as app::WidgetPtr) };
    frm.set_label("Works!");
}
let mut but = button::Button::default();
let mut frame = frame::Frame::default();
unsafe {
    // If no data needs to be passed, you can pass 0 as *mut _
    app::set_raw_callback(&mut but, frame.as_widget_ptr() as *mut _, Some(cb));
    // Using a closure also works
    app::set_raw_callback(&mut but, frame.as_widget_ptr() as *mut _, Some(|_ , _| { println!("Also works!")}));
}

Safety

The function involves dereferencing externally provided raw pointers