140 lines
8.9 KiB
C++
140 lines
8.9 KiB
C++
#ifdef NANOGUI_PYTHON
|
|
|
|
#include "python.h"
|
|
|
|
DECLARE_WIDGET(Widget);
|
|
DECLARE_SCREEN(Screen);
|
|
DECLARE_WIDGET(Window);
|
|
|
|
void register_widget(py::module &m) {
|
|
py::class_<Object, ref<Object>>(m, "Object", D(Object));
|
|
|
|
py::class_<Widget, Object, ref<Widget>, PyWidget>(m, "Widget", D(Widget))
|
|
.def(py::init<Widget *>(), D(Widget, Widget))
|
|
.def("parent", (Widget *(Widget::*)(void)) &Widget::parent, D(Widget, parent))
|
|
.def("set_parent", &Widget::set_parent, D(Widget, set_parent))
|
|
.def("layout", (Layout *(Widget::*)(void)) &Widget::layout, D(Widget, layout))
|
|
.def("set_layout", &Widget::set_layout, D(Widget, set_layout))
|
|
.def("theme", (Theme *(Widget::*)(void)) &Widget::theme, D(Widget, theme))
|
|
.def("set_theme", &Widget::set_theme, D(Widget, set_theme))
|
|
.def("position", &Widget::position, D(Widget, position))
|
|
.def("set_position", &Widget::set_position, D(Widget, set_position))
|
|
.def("absolute_position", &Widget::absolute_position, D(Widget, absolute_position))
|
|
.def("size", &Widget::size, D(Widget, size))
|
|
.def("set_size", &Widget::set_size, D(Widget, set_size))
|
|
.def("width", &Widget::width, D(Widget, width))
|
|
.def("set_width", &Widget::set_width, D(Widget, set_width))
|
|
.def("height", &Widget::height, D(Widget, height))
|
|
.def("set_height", &Widget::set_height, D(Widget, set_height))
|
|
.def("fixed_size", &Widget::fixed_size, D(Widget, fixed_size))
|
|
.def("set_fixed_size", &Widget::set_fixed_size, D(Widget, set_fixed_size))
|
|
.def("fixed_width", &Widget::fixed_width, D(Widget, fixed_width))
|
|
.def("set_fixed_width", &Widget::set_fixed_width, D(Widget, set_fixed_width))
|
|
.def("fixed_height", &Widget::fixed_height, D(Widget, fixed_height))
|
|
.def("set_fixed_height", &Widget::set_fixed_height, D(Widget, set_fixed_height))
|
|
.def("visible", &Widget::visible, D(Widget, visible))
|
|
.def("set_visible", &Widget::set_visible, D(Widget, set_visible))
|
|
.def("visible_recursive", &Widget::visible_recursive, D(Widget, visible_recursive))
|
|
.def("children", (const std::vector<Widget *>&(Widget::*)(void)) &Widget::children,
|
|
D(Widget, children), py::return_value_policy::reference)
|
|
.def("add_child", (void (Widget::*) (int, Widget *)) &Widget::add_child, D(Widget, add_child))
|
|
.def("add_child", (void (Widget::*) (Widget *)) &Widget::add_child, D(Widget, add_child, 2))
|
|
.def("child_count", &Widget::child_count, D(Widget, child_count))
|
|
.def("__len__", &Widget::child_count, D(Widget, child_count))
|
|
.def("__iter__", [](const Widget &w) {
|
|
return py::make_iterator(w.children().begin(), w.children().end());
|
|
}, py::keep_alive<0, 1>())
|
|
.def("child_index", &Widget::child_index, D(Widget, child_index))
|
|
.def("__getitem__", (Widget* (Widget::*)(int)) &Widget::child_at, D(Widget, child_at))
|
|
.def("remove_child_at", &Widget::remove_child_at, D(Widget, remove_child_at))
|
|
.def("remove_child", &Widget::remove_child, D(Widget, remove_child))
|
|
.def("__delitem__", &Widget::remove_child_at, D(Widget, remove_child_at))
|
|
.def("enabled", &Widget::enabled, D(Widget, enabled))
|
|
.def("set_enabled", &Widget::set_enabled, D(Widget, set_enabled))
|
|
.def("focused", &Widget::focused, D(Widget, focused))
|
|
.def("set_focused", &Widget::set_focused, D(Widget, set_focused))
|
|
.def("request_focus", &Widget::request_focus, D(Widget, request_focus))
|
|
.def("tooltip", &Widget::tooltip, D(Widget, tooltip))
|
|
.def("set_tooltip", &Widget::set_tooltip, D(Widget, set_tooltip))
|
|
.def("font_size", &Widget::font_size, D(Widget, font_size))
|
|
.def("set_font_size", &Widget::set_font_size, D(Widget, set_font_size))
|
|
.def("has_font_size", &Widget::has_font_size, D(Widget, has_font_size))
|
|
.def("cursor", &Widget::cursor, D(Widget, cursor))
|
|
.def("set_cursor", &Widget::set_cursor, D(Widget, set_cursor))
|
|
.def("find_widget", (Widget *(Widget::*)(const Vector2i &)) &Widget::find_widget, D(Widget, find_widget))
|
|
.def("contains", &Widget::contains, D(Widget, contains))
|
|
.def("mouse_button_event", &Widget::mouse_button_event, "p"_a, "button"_a,
|
|
"down"_a, "modifiers"_a, D(Widget, mouse_button_event))
|
|
.def("mouse_motion_event", &Widget::mouse_motion_event, "p"_a, "rel"_a,
|
|
"button"_a, "modifiers"_a, D(Widget, mouse_motion_event))
|
|
.def("mouse_drag_event", &Widget::mouse_drag_event, "p"_a, "rel"_a,
|
|
"button"_a, "modifiers"_a, D(Widget, mouse_drag_event))
|
|
.def("mouse_enter_event", &Widget::mouse_enter_event, "p"_a, "enter"_a,
|
|
D(Widget, mouse_enter_event))
|
|
.def("scroll_event", &Widget::scroll_event, "p"_a, "rel"_a,
|
|
D(Widget, scroll_event))
|
|
.def("focus_event", &Widget::focus_event, "focused"_a, D(Widget, focus_event))
|
|
.def("keyboard_event", &Widget::keyboard_event, "key"_a, "scancode"_a,
|
|
"action"_a, "modifiers"_a, D(Widget, keyboard_event))
|
|
.def("keyboard_character_event", &Widget::keyboard_character_event,
|
|
D(Widget, keyboard_character_event))
|
|
.def("preferred_size", &Widget::preferred_size, D(Widget, preferred_size))
|
|
.def("perform_layout", &Widget::perform_layout, D(Widget, perform_layout))
|
|
.def("screen", py::overload_cast<>(&Widget::screen, py::const_), D(Widget, screen))
|
|
.def("window", py::overload_cast<>(&Widget::window, py::const_), D(Widget, window))
|
|
.def("draw", &Widget::draw, D(Widget, draw));
|
|
|
|
py::class_<Window, Widget, ref<Window>, PyWindow>(m, "Window", D(Window))
|
|
.def(py::init<Widget *, const std::string>(), "parent"_a,
|
|
"title"_a = std::string("Untitled"), D(Window, Window))
|
|
.def("title", &Window::title, D(Window, title))
|
|
.def("set_title", &Window::set_title, D(Window, set_title))
|
|
.def("modal", &Window::modal, D(Window, modal))
|
|
.def("set_modal", &Window::set_modal, D(Window, set_modal))
|
|
.def("dispose", &Window::dispose, D(Window, dispose))
|
|
.def("button_panel", &Window::button_panel, D(Window, button_panel))
|
|
.def("center", &Window::center, D(Window, center));
|
|
|
|
py::class_<Screen, Widget, ref<Screen>, PyScreen>(m, "Screen", D(Screen))
|
|
.def(py::init<const Vector2i &, const std::string &, bool, bool, bool,
|
|
bool, bool, unsigned int, unsigned int>(),
|
|
"size"_a, "caption"_a = "Unnamed", "resizable"_a = true, "fullscreen"_a = false,
|
|
"depth_buffer"_a = true, "stencil_buffer"_a = true,
|
|
"float_buffer"_a = false, "gl_major"_a = 3, "gl_minor"_a = 2, D(Screen, Screen))
|
|
.def("caption", &Screen::caption, D(Screen, caption))
|
|
.def("set_caption", &Screen::set_caption, D(Screen, set_caption))
|
|
.def("background", &Screen::background, D(Screen, background))
|
|
.def("set_background", &Screen::set_background, D(Screen, set_background))
|
|
.def("set_visible", &Screen::set_visible, D(Screen, set_visible))
|
|
.def("set_size", &Screen::set_size, D(Screen, set_size))
|
|
.def("framebuffer_size", &Screen::framebuffer_size, D(Screen, framebuffer_size))
|
|
.def("perform_layout", (void(Screen::*)(void)) &Screen::perform_layout, D(Screen, perform_layout))
|
|
.def("redraw", &Screen::redraw, D(Screen, redraw))
|
|
.def("clear", &Screen::clear, D(Screen, clear))
|
|
.def("draw_all", &Screen::draw_all, D(Screen, draw_all))
|
|
.def("draw_contents", &Screen::draw_contents, D(Screen, draw_contents))
|
|
.def("resize_event", &Screen::resize_event, "size"_a, D(Screen, resize_event))
|
|
.def("resize_callback", &Screen::resize_callback)
|
|
.def("set_resize_callback", &Screen::set_resize_callback)
|
|
.def("drop_event", &Screen::drop_event, D(Screen, drop_event))
|
|
.def("mouse_pos", &Screen::mouse_pos, D(Screen, mouse_pos))
|
|
.def("pixel_ratio", &Screen::pixel_ratio, D(Screen, pixel_ratio))
|
|
.def("has_depth_buffer", &Screen::has_depth_buffer, D(Screen, has_depth_buffer))
|
|
.def("has_stencil_buffer", &Screen::has_stencil_buffer, D(Screen, has_stencil_buffer))
|
|
.def("has_float_buffer", &Screen::has_float_buffer, D(Screen, has_float_buffer))
|
|
.def("glfw_window", &Screen::glfw_window, D(Screen, glfw_window),
|
|
py::return_value_policy::reference)
|
|
.def("nvg_context", &Screen::nvg_context, D(Screen, nvg_context),
|
|
py::return_value_policy::reference)
|
|
.def("pixel_format", &Screen::pixel_format, D(Screen, pixel_format))
|
|
.def("component_format", &Screen::component_format, D(Screen, component_format))
|
|
.def("nvg_flush", &Screen::nvg_flush, D(Screen, nvg_flush))
|
|
#if defined(NANOGUI_USE_METAL)
|
|
.def("metal_layer", &Screen::metal_layer)
|
|
.def("metal_texture", &Screen::metal_texture)
|
|
.def("depth_stencil_texture", &Screen::depth_stencil_texture)
|
|
#endif
|
|
;
|
|
}
|
|
#endif
|