cleanup: Remove unused single frame draw

This commit is contained in:
Dorota Czaplejewicz
2019-12-07 15:55:20 +00:00
parent 36362291ef
commit 1f69787fac

View File

@ -4,11 +4,9 @@ use cairo;
use std::cell::RefCell; use std::cell::RefCell;
use ::keyboard; use ::keyboard;
use ::layout;
use ::layout::{ Button, Layout }; use ::layout::{ Button, Layout };
use ::layout::c::{ EekGtkKeyboard, Point }; use ::layout::c::{ EekGtkKeyboard, Point };
use gdk::{ WindowExt, DrawingContextExt };
use glib::translate::FromGlibPtrNone; use glib::translate::FromGlibPtrNone;
use gtk::WidgetExt; use gtk::WidgetExt;
@ -37,14 +35,6 @@ mod c {
pressed: u64, pressed: u64,
locked: u64, locked: u64,
); );
pub fn eek_gtk_keyboard_get_renderer(
keyboard: EekGtkKeyboard,
) -> EekRenderer;
pub fn eek_renderer_get_transformation(
renderer: EekRenderer,
) -> layout::c::Transformation;
} }
#[no_mangle] #[no_mangle]
@ -134,46 +124,3 @@ pub fn queue_redraw(keyboard: EekGtkKeyboard) {
let widget = unsafe { gtk::Widget::from_glib_none(keyboard.0) }; let widget = unsafe { gtk::Widget::from_glib_none(keyboard.0) };
widget.queue_draw(); widget.queue_draw();
} }
/// Renders a single frame
/// Opens a frame on `keyboard`'s `GdkWindow`, attempt to get a drawing context,
/// calls `f`, closes the frame.
/// If the drawing context was successfully retrieved, returns `f` call result.
pub fn render_as_frame<F, T>(keyboard: EekGtkKeyboard, mut f: F) -> Option<T>
where F: FnMut(c::EekRenderer, &cairo::Context) -> T
{
let renderer = unsafe { c::eek_gtk_keyboard_get_renderer(keyboard) };
let widget = unsafe { gtk::Widget::from_glib_none(keyboard.0) };
widget.get_window()
.and_then(|window| {
// Need to split the `.and_then` chain here
// because `window` needs to be in scope
// for the references deeper inside.
window.get_clip_region()
// contrary to the docs, `Region` gets destroyed automatically
.and_then(|region| window.begin_draw_frame(&region))
.and_then(|drawctx| {
let ret: Option<T> = drawctx.get_cairo_context()
.map(|cr| {
let transformation = unsafe {
c::eek_renderer_get_transformation(renderer)
};
cr.translate(
transformation.origin_x,
transformation.origin_y,
);
cr.scale(
transformation.scale,
transformation.scale,
);
queue_redraw(keyboard);
f(renderer, &cr) // finally!
});
// This must always happen after `begin_draw_frame`,
// enven if `get_cairo_context` fails.
window.end_draw_frame(&drawctx);
ret
})
})
}