220 lines
5.1 KiB
C++
Executable File
220 lines
5.1 KiB
C++
Executable File
// ----------------------------------------------------------------------------
|
|
// - Open3D: www.open3d.org -
|
|
// ----------------------------------------------------------------------------
|
|
// Copyright (c) 2018-2023 www.open3d.org
|
|
// SPDX-License-Identifier: MIT
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <sstream>
|
|
#include <string>
|
|
|
|
#include "open3d/utility/IJsonConvertible.h"
|
|
|
|
/// @cond
|
|
namespace Json {
|
|
class Value;
|
|
} // namespace Json
|
|
/// @endcond
|
|
|
|
namespace open3d {
|
|
namespace visualization {
|
|
namespace gui {
|
|
|
|
enum class MouseButton {
|
|
NONE = 0,
|
|
LEFT = (1 << 0),
|
|
MIDDLE = (1 << 1),
|
|
RIGHT = (1 << 2),
|
|
BUTTON4 = (1 << 3),
|
|
BUTTON5 = (1 << 4)
|
|
};
|
|
|
|
// The key modifiers are labeled by functionality; for instance,
|
|
// Ctrl on Windows and Command on macOS have roughly the same functionality.
|
|
enum class KeyModifier {
|
|
NONE = 0,
|
|
SHIFT = (1 << 0),
|
|
CTRL = (1 << 1), // win/linux: ctrl, macOS: command
|
|
ALT = (1 << 2), // win/linux: alt, macOS: ctrl
|
|
META = (1 << 3), // win/linux: windows key, macOS: option
|
|
};
|
|
|
|
struct MouseEvent {
|
|
enum Type { MOVE, BUTTON_DOWN, DRAG, BUTTON_UP, WHEEL };
|
|
|
|
static MouseEvent MakeMoveEvent(const Type type,
|
|
const int x,
|
|
const int y,
|
|
const int modifiers,
|
|
const int buttons);
|
|
|
|
static MouseEvent MakeButtonEvent(const Type type,
|
|
const int x,
|
|
const int y,
|
|
const int modifiers,
|
|
const MouseButton button,
|
|
const int count);
|
|
|
|
static MouseEvent MakeWheelEvent(const Type type,
|
|
const int x,
|
|
const int y,
|
|
const int modifiers,
|
|
const float dx,
|
|
const float dy,
|
|
const bool isTrackpad);
|
|
|
|
Type type;
|
|
int x;
|
|
int y;
|
|
int modifiers; // KeyModifiers ORed together
|
|
union {
|
|
struct {
|
|
int buttons; // MouseButtons ORed together
|
|
} move; // includes drag
|
|
struct {
|
|
MouseButton button;
|
|
int count;
|
|
} button;
|
|
struct {
|
|
float dx; // macOS gives fractional values, and is required
|
|
float dy; // for the buttery-smooth trackpad scrolling on macOS
|
|
bool isTrackpad;
|
|
} wheel;
|
|
};
|
|
|
|
bool FromJson(const Json::Value &value);
|
|
std::string ToString() const;
|
|
};
|
|
|
|
struct TickEvent {
|
|
double dt;
|
|
};
|
|
|
|
enum KeyName {
|
|
KEY_NONE = 0,
|
|
KEY_BACKSPACE = 8,
|
|
KEY_TAB = 9,
|
|
KEY_ENTER = 10,
|
|
KEY_ESCAPE = 27,
|
|
KEY_SPACE = 32,
|
|
KEY_EXCLAMATION = 33,
|
|
KEY_DOUBLE_QUOTE = 34,
|
|
KEY_HASH = 35,
|
|
KEY_DOLLAR_SIGN = 36,
|
|
KEY_PERCENT = 37,
|
|
KEY_AMPERSAND = 38,
|
|
KEY_SINGLE_QUOTE = 39,
|
|
KEY_LEFT_PAREN = 40,
|
|
KEY_RIGHT_PAREN = 41,
|
|
KEY_ASTERISK = 42,
|
|
KEY_PLUS = 43,
|
|
KEY_COMMA = 44,
|
|
KEY_MINUS = 45,
|
|
KEY_PERIOD = 46,
|
|
KEY_SLASH = 47,
|
|
KEY_0 = 48,
|
|
KEY_1,
|
|
KEY_2,
|
|
KEY_3,
|
|
KEY_4,
|
|
KEY_5,
|
|
KEY_6,
|
|
KEY_7,
|
|
KEY_8,
|
|
KEY_9,
|
|
KEY_COLON = 58,
|
|
KEY_SEMICOLON = 59,
|
|
KEY_LESS_THAN = 60,
|
|
KEY_EQUALS = 61,
|
|
KEY_GREATER_THAN = 62,
|
|
KEY_QUESTION_MARK = 63,
|
|
KEY_AT = 64,
|
|
KEY_LEFT_BRACKET = 91,
|
|
KEY_BACKSLASH = 92,
|
|
KEY_RIGHT_BRACKET = 93,
|
|
KEY_CARET = 94,
|
|
KEY_UNDERSCORE = 95,
|
|
KEY_BACKTICK = 96,
|
|
KEY_A = 97,
|
|
KEY_B,
|
|
KEY_C,
|
|
KEY_D,
|
|
KEY_E,
|
|
KEY_F,
|
|
KEY_G,
|
|
KEY_H,
|
|
KEY_I,
|
|
KEY_J,
|
|
KEY_K,
|
|
KEY_L,
|
|
KEY_M,
|
|
KEY_N,
|
|
KEY_O,
|
|
KEY_P,
|
|
KEY_Q,
|
|
KEY_R,
|
|
KEY_S,
|
|
KEY_T,
|
|
KEY_U,
|
|
KEY_V,
|
|
KEY_W,
|
|
KEY_X,
|
|
KEY_Y,
|
|
KEY_Z,
|
|
KEY_LEFT_BRACE = 123,
|
|
KEY_PIPE = 124,
|
|
KEY_RIGHT_BRACE = 125,
|
|
KEY_TILDE = 126,
|
|
KEY_DELETE = 127,
|
|
KEY_LSHIFT = 256,
|
|
KEY_RSHIFT,
|
|
KEY_LCTRL,
|
|
KEY_RCTRL,
|
|
KEY_ALT,
|
|
KEY_META,
|
|
KEY_CAPSLOCK,
|
|
KEY_LEFT,
|
|
KEY_RIGHT,
|
|
KEY_UP,
|
|
KEY_DOWN,
|
|
KEY_INSERT,
|
|
KEY_HOME,
|
|
KEY_END,
|
|
KEY_PAGEUP,
|
|
KEY_PAGEDOWN,
|
|
KEY_F1 = 290,
|
|
KEY_F2,
|
|
KEY_F3,
|
|
KEY_F4,
|
|
KEY_F5,
|
|
KEY_F6,
|
|
KEY_F7,
|
|
KEY_F8,
|
|
KEY_F9,
|
|
KEY_F10,
|
|
KEY_F11,
|
|
KEY_F12,
|
|
KEY_UNKNOWN = 1000
|
|
};
|
|
|
|
struct KeyEvent {
|
|
enum Type { DOWN, UP };
|
|
Type type;
|
|
// This is the actual key that was pressed, not the character that
|
|
// was generated (use TextInputEvent for that). Values correspond
|
|
// to ASCII values where applicable.
|
|
uint32_t key;
|
|
bool isRepeat;
|
|
};
|
|
|
|
struct TextInputEvent {
|
|
const char *utf8;
|
|
};
|
|
|
|
} // namespace gui
|
|
} // namespace visualization
|
|
} // namespace open3d
|