pub use super::render::register_input_coordinator_blackbox_panel;
use super::render::register_context_manager_blackbox_panel;
use super::settings::BlackboxPanelSettings;
use super::state::BlackboxState;
use super::types::{BlackboxEvent, BlackboxEventResult, BlackboxRenderKind, BlackboxView};
use crate::docking::panels::DockPanel;
use crate::input::LayerId;
use crate::layout::LayoutManager;
use crate::render::RenderContext;
use crate::types::{Rect, WidgetId};
pub fn register_layout_manager_blackbox_panel<P: DockPanel>(
layout: &mut LayoutManager<P>,
render: &mut dyn RenderContext,
slot_id: &str,
id: impl Into<WidgetId>,
state: &mut BlackboxState,
view: &mut BlackboxView<'_>,
settings: &BlackboxPanelSettings,
kind: &BlackboxRenderKind,
layer: &LayerId,
) -> Option<WidgetId> {
let rect = layout.rect_for(slot_id)?;
Some(register_context_manager_blackbox_panel(
layout.ctx_mut(), render, id, rect, state, view, settings, kind, layer,
))
}
pub fn dispatch_blackbox_event(
view: &mut BlackboxView<'_>,
body_rect: Rect,
screen_x: f64,
screen_y: f64,
event: BlackboxEvent,
) -> BlackboxEventResult {
let local_x = screen_x - body_rect.x;
let local_y = screen_y - body_rect.y;
let local_event = match event {
BlackboxEvent::PointerMove { .. } =>
BlackboxEvent::PointerMove { local_x, local_y },
BlackboxEvent::PointerDown { button, .. } =>
BlackboxEvent::PointerDown { local_x, local_y, button },
BlackboxEvent::PointerUp { button, .. } =>
BlackboxEvent::PointerUp { local_x, local_y, button },
other => other,
};
(view.handle_event)(local_event)
}