예제 #1
0
sge::input::processor_unique_ptr
sge::x11input::system::create_processor(
	sge::window::object const &_window,
	sge::window::system const &_window_system
)
{
	awl::backends::x11::window::object const &x11_window(
		fcppt::cast::dynamic_cross_exn<
			awl::backends::x11::window::object const &
		>(
			_window.awl_object()
		)
	);

	awl::backends::x11::system::event::opcode const opcode(
		fcppt::optional::to_exception(
			sge::x11input::xi_opcode(
				x11_window.display()
			),
			[]{
				return
					sge::input::exception{
						FCPPT_TEXT("X Input extension not available! Please install libXi!")
					};
			}
		)
	);

	// The first supported version we ask for and that is supported will be used
	if(
		!sge::x11input::xi_version(
			x11_window.display(),
			2,
			1
		)
	)
		throw
			sge::input::exception{
				FCPPT_TEXT("The X server doesn't support XI2.1!")
			};

	return
		fcppt::unique_ptr_to_base<
			sge::input::processor
		>(
			fcppt::make_unique_ptr<
				sge::x11input::processor
			>(
				log_,
				_window,
				_window_system,
				opcode
			)
		);
}
예제 #2
0
sge::systems::impl::window::quit::quit(
	sge::window::system &_system,
	sge::window::object &_window
)
:
	system_(
		_system
	),
	destroy_connection_(
		_window.awl_window_event_processor().destroy_callback(
			awl::window::event::destroy_callback{
				std::bind(
					&sge::systems::impl::window::quit::on_destroy,
					this,
					std::placeholders::_1
				)
			}
		)
	)
{
}
예제 #3
0
sge::wlinput::processor::processor(
	fcppt::log::object &_log,
	sge::window::object const &_window,
	sge::window::system const &_system
)
:
	sge::input::processor(),
	log_{
		_log
	},
	system_processor_{
		fcppt::cast::dynamic_exn<
			awl::backends::wayland::system::event::processor &
		>(
			_system.awl_system_event_processor()
		)
	},
	window_{
		fcppt::cast::dynamic_exn<
			awl::backends::wayland::window::object &
		>(
			_window.awl_object()
		)
	},
	xkb_context_{},
	focus_discover_{},
	focus_remove_{},
	cursor_discover_{},
	cursor_remove_{},
	cursors_(
		sge::wlinput::initial_objects<
			sge::wlinput::cursor::object,
			awl::backends::wayland::system::seat::caps::pointer
		>(
			sge::wlinput::cursor::create(
				window_
			),
			system_processor_.seats()
		)
	),
	foci_(
		sge::wlinput::initial_objects<
			sge::wlinput::focus::object,
			awl::backends::wayland::system::seat::caps::keyboard
		>(
			sge::wlinput::focus::create(
				_log,
				xkb_context_,
				system_processor_.fd_processor(),
				window_
			),
			system_processor_.seats()
		)
	),
	start_event_{
		system_processor_.fd_processor().post(
			awl::backends::posix::callback{
				std::bind(
					&sge::wlinput::processor::init,
					this,
					std::placeholders::_1
				)
			}
		)
	},
	seat_added_connection_{
		system_processor_.seat_added_callback(
			awl::backends::wayland::system::event::seat_added_callback{
				std::bind(
					&sge::wlinput::processor::add_seat,
					this,
					std::placeholders::_1
				)
			}
		)
	},
	seat_removed_connection_{
		system_processor_.seat_removed_callback(
			awl::backends::wayland::system::event::seat_removed_callback{
				std::bind(
					&sge::wlinput::processor::remove_seat,
					this,
					std::placeholders::_1
				)
			}
		)
	},
	seat_connections_{}
{
}
예제 #4
0
sge::dinput::processor::processor(
	fcppt::log::object &_log,
	sge::window::object const &_window,
	sge::window::system const &_window_system
)
:
	log_{
		_log
	},
	dinput_(
		sge::dinput::create_dinput()
	),
	windows_window_(
		fcppt::cast::dynamic_cross_exn<
			awl::backends::windows::window::object &
		>(
			_window.awl_object()
		)
	),
	event_processor_(
		fcppt::cast::dynamic_exn<
			awl::backends::windows::window::event::processor &
		>(
			_window.awl_window_event_processor()
		)
	),
	system_processor_(
		fcppt::cast::dynamic_exn<
			awl::backends::windows::system::event::processor &
		>(
			_window_system.awl_system_event_processor()
		)
	),
	devices_(),
	event_handle_(
		system_processor_.create_event_handle()
	),
	has_focus_(
		false
	),
	keyboard_discover_(),
	keyboard_remove_(),
	mouse_discover_(),
	mouse_remove_(),
	joypad_discover_(),
	joypad_remove_(),
	init_message_(
		system_processor_
	),
	connections_(
		fcppt::assign::make_container<
			fcppt::signal::auto_connection_container
		>(
			event_processor_.register_callback(
				fcppt::strong_typedef_construct_cast<
					awl::backends::windows::message_type,
					fcppt::cast::to_unsigned_fun
				>(
					WM_SETFOCUS
				),
				awl::backends::windows::window::event::callback{
					std::bind(
						&sge::dinput::processor::on_focus_in,
						this,
						std::placeholders::_1
					)
				}
			),
			event_processor_.register_callback(
				fcppt::strong_typedef_construct_cast<
					awl::backends::windows::message_type,
					fcppt::cast::to_unsigned_fun
				>(
					WM_KILLFOCUS
				),
				awl::backends::windows::window::event::callback{
					std::bind(
						&sge::dinput::processor::on_focus_out,
						this,
						std::placeholders::_1
					)
				}
			),
			event_processor_.register_callback(
				init_message_.type(),
				awl::backends::windows::window::event::callback{
					std::bind(
						&sge::dinput::processor::on_init,
						this,
						std::placeholders::_1
					)
				}
			),
			system_processor_.register_handle_callback(
				awl::backends::windows::system::event::handle_callback{
					std::bind(
						&sge::dinput::processor::on_handle_ready,
						this
					)
				}
			)
		)
	)
{
	awl::backends::windows::post_message(
		windows_window_.hwnd(),
		init_message_.type(),
		awl::backends::windows::wparam(
			0u
		),
		awl::backends::windows::lparam(
			0
		)
	);
}