/*
* Copyright © 2015 Canonical Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Author: Robert Carr
*/
#ifndef MIR_EVENT_BUILDERS_H_
#define MIR_EVENT_BUILDERS_H_
#include "mir_toolkit/event.h"
#include "mir/geometry/size.h"
#include "mir/geometry/point.h"
#include "mir/geometry/rectangle.h"
#include "mir/geometry/displacement.h"
#include "mir/frontend/surface_id.h"
#include "mir/events/input_device_state.h"
#include "mir/events/contact_state.h"
#include
#include
#include
#include
namespace mir
{
typedef std::unique_ptr EventUPtr;
namespace events
{
// Surface orientation change event
EventUPtr make_event(frontend::SurfaceId const& surface_id, MirOrientation orientation);
// Prompt session state change event
EventUPtr make_event(MirPromptSessionState state);
// Surface resize event
EventUPtr make_event(frontend::SurfaceId const& surface_id, geometry::Size const& size);
// Surface configure event
EventUPtr make_event(frontend::SurfaceId const& surface_id, MirSurfaceAttrib attribute, int value)
MIR_FOR_REMOVAL_IN_VERSION_1("use make_event with MirWindowAttribute instead");
// Window configure event
EventUPtr make_event(frontend::SurfaceId const& surface_id, MirWindowAttrib attribute, int value);
// Close surface event
EventUPtr make_event(frontend::SurfaceId const& surface_id);
// Keymap event
EventUPtr make_event(frontend::SurfaceId const& surface_id, MirInputDeviceId id, std::string const& model,
std::string const& layout, std::string const& variant, std::string const& options);
// Surface output event
EventUPtr make_event(
frontend::SurfaceId const& surface_id,
int dpi,
float scale,
double refresh_rate,
MirFormFactor form_factor,
uint32_t id);
/// Surface placement event
EventUPtr make_event(frontend::SurfaceId const& surface_id, geometry::Rectangle placement);
// Key event
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
std::vector const& cookie, MirKeyboardAction action, xkb_keysym_t key_code,
int scan_code, MirInputEventModifiers modifiers);
void set_modifier(MirEvent& event, MirInputEventModifiers modifiers);
void set_cursor_position(MirEvent& event, mir::geometry::Point const& pos);
void set_cursor_position(MirEvent& event, float x, float y);
void set_button_state(MirEvent& event, MirPointerButtons button_state);
// Deprecated version with uint64_t mac
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
uint64_t mac, MirKeyboardAction action, xkb_keysym_t key_code,
int scan_code, MirInputEventModifiers modifiers) MIR_FOR_REMOVAL_IN_VERSION_1("unused");
// Deprecated version without mac
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
MirKeyboardAction action, xkb_keysym_t key_code,
int scan_code, MirInputEventModifiers modifiers) MIR_FOR_REMOVAL_IN_VERSION_1("unused");
// Touch event
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
std::vector const& mac, MirInputEventModifiers modifiers);
// Deprecated version with uint64_t mac
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
uint64_t mac, MirInputEventModifiers modifiers) MIR_FOR_REMOVAL_IN_VERSION_1("unused");
// Deprecated version without mac
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
MirInputEventModifiers modifiers) MIR_FOR_REMOVAL_IN_VERSION_1("unused");
void add_touch(MirEvent &event, MirTouchId touch_id, MirTouchAction action,
MirTouchTooltype tooltype, float x_axis_value, float y_axis_value,
float pressure_value, float touch_major_value, float touch_minor_value, float size_value);
// Pointer event
// Deprecated version without relative axis
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
uint64_t mac, MirInputEventModifiers modifiers, MirPointerAction action,
MirPointerButtons buttons_pressed,
float x_axis_value, float y_axis_value,
float hscroll_value, float vscroll_value) MIR_FOR_REMOVAL_IN_VERSION_1("unused");
// Deprecated version without relative axis and mac
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
MirInputEventModifiers modifiers, MirPointerAction action,
MirPointerButtons buttons_pressed,
float x_axis_value, float y_axis_value,
float hscroll_value, float vscroll_value) MIR_FOR_REMOVAL_IN_VERSION_1("unused");
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
std::vector const& mac, MirInputEventModifiers modifiers, MirPointerAction action,
MirPointerButtons buttons_pressed,
float x_axis_value, float y_axis_value,
float hscroll_value, float vscroll_value,
float relative_x_value, float relative_y_value);
// Deprecated version with uint64_t mac
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
uint64_t mac, MirInputEventModifiers modifiers, MirPointerAction action,
MirPointerButtons buttons_pressed,
float x_axis_value, float y_axis_value,
float hscroll_value, float vscroll_value,
float relative_x_value, float relative_y_value) MIR_FOR_REMOVAL_IN_VERSION_1("unused");
// Deprecated version without mac
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
MirInputEventModifiers modifiers, MirPointerAction action,
MirPointerButtons buttons_pressed,
float x_axis_value, float y_axis_value,
float hscroll_value, float vscroll_value,
float relative_x_value, float relative_y_value) MIR_FOR_REMOVAL_IN_VERSION_1("unused");
// Input configuration event
EventUPtr make_event(MirInputConfigurationAction action,
MirInputDeviceId id, std::chrono::nanoseconds time) MIR_FOR_REMOVAL_IN_VERSION_1("unused");
EventUPtr make_event(std::chrono::nanoseconds timestamp,
MirPointerButtons pointer_buttons,
MirInputEventModifiers modifiers,
float x_axis_value,
float y_axis_value,
std::vector&& device_states);
EventUPtr make_event(MirInputDeviceId device_id, std::chrono::nanoseconds timestamp,
std::vector const& mac, MirInputEventModifiers modifiers,
std::vector const& contacts);
EventUPtr clone_event(MirEvent const& event);
void transform_positions(MirEvent& event, mir::geometry::Displacement const& movement);
}
}
#endif // MIR_EVENT_BUILDERS_H_