use crate::application::platform::unix::*;
use gdk::{Cursor, WindowEdge};
use gtk::prelude::*;
use webkit2gtk::WebView;
pub fn setup(webview: &WebView) {
webview.connect_motion_notify_event(|webview, event| {
if let Some(widget) = webview.parent() {
if let Some(window) = widget.parent() {
let window: gtk::Window = window.downcast().unwrap();
if !window.is_decorated() && window.is_resizable() {
if let Some(window) = window.window() {
let (cx, cy) = event.root();
let edge = hit_test(&window, cx, cy);
window.set_cursor(
Cursor::from_name(
&window.display(),
match edge {
WindowEdge::North => "n-resize",
WindowEdge::South => "s-resize",
WindowEdge::East => "e-resize",
WindowEdge::West => "w-resize",
WindowEdge::NorthWest => "nw-resize",
WindowEdge::NorthEast => "ne-resize",
WindowEdge::SouthEast => "se-resize",
WindowEdge::SouthWest => "sw-resize",
_ => "default",
},
)
.as_ref(),
);
}
}
}
}
Inhibit(false)
});
webview.connect_button_press_event(move |webview, event| {
let inhibit = false;
if event.button() == 1 {
let (cx, cy) = event.root();
if let Some(widget) = webview.parent() {
if let Some(window) = widget.parent() {
let window: gtk::Window = window.downcast().unwrap();
if !window.is_decorated() && window.is_resizable() {
if let Some(window) = window.window() {
let result = hit_test(&window, cx, cy);
match result {
WindowEdge::__Unknown(_) => (),
_ => window.begin_resize_drag(result, 1, cx as i32, cy as i32, event.time()),
}
}
}
}
}
}
Inhibit(inhibit)
});
webview.connect_touch_event(|webview, event| {
if let Some(widget) = webview.parent() {
if let Some(window) = widget.parent() {
let window: gtk::Window = window.downcast().unwrap();
if !window.is_decorated() && window.is_resizable() && !window.is_maximized() {
if let Some(window) = window.window() {
if let Some((cx, cy)) = event.root_coords() {
if let Some(device) = event.device() {
let result = hit_test(&window, cx, cy);
match result {
WindowEdge::__Unknown(_) => (),
_ => window.begin_resize_drag_for_device(
result,
&device,
0,
cx as i32,
cy as i32,
event.time(),
),
}
}
}
}
}
}
}
Inhibit(false)
});
}