mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 03:18:37 +08:00
commit
f4f7d6d58d
@ -259,45 +259,48 @@ void App::pointer_event(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Cor
|
||||
int but = _get_button(point);
|
||||
if (_is_touch(point)) {
|
||||
|
||||
Ref<InputEvent> event;
|
||||
event.type = InputEvent::SCREEN_TOUCH;
|
||||
event.device = 0;
|
||||
event.screen_touch->is_pressed() = p_pressed;
|
||||
event.screen_touch.x = pos.X;
|
||||
event.screen_touch.y = pos.Y;
|
||||
event.screen_touch.index = _get_finger(point->PointerId);
|
||||
Ref<InputEventScreenTouch> screen_touch;
|
||||
screen_touch.instance();
|
||||
screen_touch->set_device(0);
|
||||
screen_touch->set_pressed(p_pressed);
|
||||
screen_touch->set_pos(Vector2(pos.X, pos.Y));
|
||||
screen_touch->set_index(_get_finger(point->PointerId));
|
||||
|
||||
last_touch_x[event.screen_touch.index] = pos.X;
|
||||
last_touch_y[event.screen_touch.index] = pos.Y;
|
||||
last_touch_x[screen_touch->get_index()] = pos.X;
|
||||
last_touch_y[screen_touch->get_index()] = pos.Y;
|
||||
|
||||
os->input_event(event);
|
||||
os->input_event(screen_touch);
|
||||
if (number_of_contacts > 1)
|
||||
return;
|
||||
|
||||
}; // fallthrought of sorts
|
||||
|
||||
Ref<InputEvent> event;
|
||||
event.type = InputEvent::MOUSE_BUTTON;
|
||||
event.device = 0;
|
||||
event->is_pressed() = p_pressed;
|
||||
event->get_button_index() = but;
|
||||
event->get_pos().x = pos.X;
|
||||
event->get_pos().y = pos.Y;
|
||||
event.mouse_button.global_x = pos.X;
|
||||
event.mouse_button.global_y = pos.Y;
|
||||
Ref<InputEventMouseButton> mouse_button;
|
||||
mouse_button.instance();
|
||||
mouse_button->set_device(0);
|
||||
mouse_button->set_pressed(p_pressed);
|
||||
mouse_button->set_button_index(but);
|
||||
mouse_button->set_pos(Vector2(pos.X, pos.Y));
|
||||
mouse_button->set_global_pos(Vector2(pos.X, pos.Y));
|
||||
|
||||
if (p_is_wheel) {
|
||||
if (point->Properties->MouseWheelDelta > 0) {
|
||||
event->get_button_index() = point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_RIGHT : BUTTON_WHEEL_UP;
|
||||
mouse_button->set_button_index(point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_RIGHT : BUTTON_WHEEL_UP);
|
||||
} else if (point->Properties->MouseWheelDelta < 0) {
|
||||
event->get_button_index() = point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_LEFT : BUTTON_WHEEL_DOWN;
|
||||
mouse_button->set_button_index(point->Properties->IsHorizontalMouseWheel ? BUTTON_WHEEL_LEFT : BUTTON_WHEEL_DOWN);
|
||||
}
|
||||
}
|
||||
|
||||
last_touch_x[31] = pos.X;
|
||||
last_touch_y[31] = pos.Y;
|
||||
|
||||
os->input_event(event);
|
||||
os->input_event(mouse_button);
|
||||
|
||||
if (p_is_wheel) {
|
||||
// Send release for mouse wheel
|
||||
mouse_button->set_pressed(false);
|
||||
os->input_event(mouse_button);
|
||||
}
|
||||
};
|
||||
|
||||
void App::OnPointerPressed(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::PointerEventArgs ^ args) {
|
||||
@ -349,16 +352,14 @@ void App::OnPointerMoved(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Co
|
||||
|
||||
if (point->IsInContact && _is_touch(point)) {
|
||||
|
||||
InputEvent event;
|
||||
event.type = Ref<InputEvent>::SCREEN_DRAG;
|
||||
event.device = 0;
|
||||
event.screen_drag.x = pos.X;
|
||||
event.screen_drag.y = pos.Y;
|
||||
event.screen_drag.index = _get_finger(point->PointerId);
|
||||
event.screen_drag.relative_x = event.screen_drag.x - last_touch_x[event.screen_drag.index];
|
||||
event.screen_drag.relative_y = event.screen_drag.y - last_touch_y[event.screen_drag.index];
|
||||
Ref<InputEventScreenDrag> screen_drag;
|
||||
screen_drag.instance();
|
||||
screen_drag->set_device(0);
|
||||
screen_drag->set_pos(Vector2(pos.X, pos.Y));
|
||||
screen_drag->set_index(_get_finger(point->PointerId));
|
||||
screen_drag->set_relative(Vector2(screen_drag->get_pos().x - last_touch_x[screen_drag->get_index()], screen_drag->get_pos().y - last_touch_y[screen_drag->get_index()]));
|
||||
|
||||
os->input_event(event);
|
||||
os->input_event(screen_drag);
|
||||
if (number_of_contacts > 1)
|
||||
return;
|
||||
|
||||
@ -368,19 +369,16 @@ void App::OnPointerMoved(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Co
|
||||
if (os->get_mouse_mode() == OS::MouseMode::MOUSE_MODE_CAPTURED)
|
||||
return;
|
||||
|
||||
InputEvent event;
|
||||
event.type = Ref<InputEvent>::MOUSE_MOTION;
|
||||
event.device = 0;
|
||||
event.mouse_motion.x = pos.X;
|
||||
event.mouse_motion.y = pos.Y;
|
||||
event.mouse_motion.global_x = pos.X;
|
||||
event.mouse_motion.global_y = pos.Y;
|
||||
event->get_relative().x = pos.X - last_touch_x[31];
|
||||
event->get_relative().y = pos.Y - last_touch_y[31];
|
||||
Ref<InputEventMouseMotion> mouse_motion;
|
||||
mouse_motion.instance();
|
||||
mouse_motion->set_device(0);
|
||||
mouse_motion->set_pos(Vector2(pos.X, pos.Y));
|
||||
mouse_motion->set_global_pos(Vector2(pos.X, pos.Y));
|
||||
mouse_motion->set_relative(Vector2(pos.X - last_touch_x[31], pos.Y - last_touch_y[31]));
|
||||
|
||||
last_mouse_pos = pos;
|
||||
|
||||
os->input_event(event);
|
||||
os->input_event(mouse_motion);
|
||||
}
|
||||
|
||||
void App::OnMouseMoved(MouseDevice ^ mouse_device, MouseEventArgs ^ args) {
|
||||
@ -393,47 +391,40 @@ void App::OnMouseMoved(MouseDevice ^ mouse_device, MouseEventArgs ^ args) {
|
||||
pos.X = last_mouse_pos.X + args->MouseDelta.X;
|
||||
pos.Y = last_mouse_pos.Y + args->MouseDelta.Y;
|
||||
|
||||
InputEvent event;
|
||||
event.type = Ref<InputEvent>::MOUSE_MOTION;
|
||||
event.device = 0;
|
||||
event.mouse_motion.x = pos.X;
|
||||
event.mouse_motion.y = pos.Y;
|
||||
event.mouse_motion.global_x = pos.X;
|
||||
event.mouse_motion.global_y = pos.Y;
|
||||
event->get_relative().x = args->MouseDelta.X;
|
||||
event->get_relative().y = args->MouseDelta.Y;
|
||||
Ref<InputEventMouseMotion> mouse_motion;
|
||||
mouse_motion.instance();
|
||||
mouse_motion->set_device(0);
|
||||
mouse_motion->set_pos(Vector2(pos.X, pos.Y));
|
||||
mouse_motion->set_global_pos(Vector2(pos.X, pos.Y));
|
||||
mouse_motion->set_relative(Vector2(args->MouseDelta.X, args->MouseDelta.Y));
|
||||
|
||||
last_mouse_pos = pos;
|
||||
|
||||
os->input_event(event);
|
||||
os->input_event(mouse_motion);
|
||||
}
|
||||
|
||||
void App::key_event(Windows::UI::Core::CoreWindow ^ sender, bool p_pressed, Windows::UI::Core::KeyEventArgs ^ key_args, Windows::UI::Core::CharacterReceivedEventArgs ^ char_args) {
|
||||
|
||||
OSUWP::KeyEvent ke;
|
||||
|
||||
InputModifierState mod;
|
||||
mod.meta = false;
|
||||
mod.command = false;
|
||||
mod.control = sender->GetAsyncKeyState(VirtualKey::Control) == CoreVirtualKeyStates::Down;
|
||||
mod.alt = sender->GetAsyncKeyState(VirtualKey::Menu) == CoreVirtualKeyStates::Down;
|
||||
mod.shift = sender->GetAsyncKeyState(VirtualKey::Shift) == CoreVirtualKeyStates::Down;
|
||||
ke.mod_state = mod;
|
||||
ke.control = sender->GetAsyncKeyState(VirtualKey::Control) == CoreVirtualKeyStates::Down;
|
||||
ke.alt = sender->GetAsyncKeyState(VirtualKey::Menu) == CoreVirtualKeyStates::Down;
|
||||
ke.shift = sender->GetAsyncKeyState(VirtualKey::Shift) == CoreVirtualKeyStates::Down;
|
||||
|
||||
ke->is_pressed() = p_pressed;
|
||||
ke.pressed = p_pressed;
|
||||
|
||||
if (key_args != nullptr) {
|
||||
|
||||
ke.type = OSUWP::KeyEvent::MessageType::KEY_EVENT_MESSAGE;
|
||||
ke.unicode = 0;
|
||||
ke->get_scancode() = KeyMappingWindows::get_keysym((unsigned int)key_args->VirtualKey);
|
||||
ke.scancode = KeyMappingWindows::get_keysym((unsigned int)key_args->VirtualKey);
|
||||
ke.echo = (!p_pressed && !key_args->KeyStatus.IsKeyReleased) || (p_pressed && key_args->KeyStatus.WasKeyDown);
|
||||
|
||||
} else {
|
||||
|
||||
ke.type = OSUWP::KeyEvent::MessageType::CHAR_EVENT_MESSAGE;
|
||||
ke.unicode = char_args->KeyCode;
|
||||
ke->get_scancode() = 0;
|
||||
ke.scancode = 0;
|
||||
ke.echo = (!p_pressed && !char_args->KeyStatus.IsKeyReleased) || (p_pressed && char_args->KeyStatus.WasKeyDown);
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,8 @@ def configure(env):
|
||||
arch = ""
|
||||
env['ENV'] = os.environ
|
||||
|
||||
vc_base_path = os.environ['VCTOOLSINSTALLDIR'] if "VCTOOLSINSTALLDIR" in os.environ else os.environ['VCINSTALLDIR']
|
||||
|
||||
# ANGLE
|
||||
angle_root = os.getenv("ANGLE_SRC_PATH")
|
||||
env.Append(CPPPATH=[angle_root + '/include'])
|
||||
@ -65,7 +67,7 @@ def configure(env):
|
||||
arch = "arm"
|
||||
env["bits"] = "32"
|
||||
env.Append(LINKFLAGS=['/MACHINE:ARM'])
|
||||
env.Append(LIBPATH=[os.environ['VCINSTALLDIR'] + 'lib/store/arm'])
|
||||
env.Append(LIBPATH=[vc_base_path + 'lib/store/arm'])
|
||||
|
||||
angle_build_cmd += "ARM"
|
||||
|
||||
@ -92,7 +94,7 @@ def configure(env):
|
||||
|
||||
env.Append(CPPFLAGS=['/DPNG_ABORT=abort'])
|
||||
env.Append(LINKFLAGS=['/MACHINE:X86'])
|
||||
env.Append(LIBPATH=[os.environ['VCINSTALLDIR'] + 'lib/store'])
|
||||
env.Append(LIBPATH=[vc_base_path + 'lib/store'])
|
||||
env.Append(LIBPATH=[angle_root + '/winrt/10/src/Release_Win32/lib'])
|
||||
|
||||
else:
|
||||
@ -107,10 +109,9 @@ def configure(env):
|
||||
env.Append(CPPPATH=['#platform/uwp', '#drivers/windows'])
|
||||
env.Append(LINKFLAGS=['/MANIFEST:NO', '/NXCOMPAT', '/DYNAMICBASE', '/WINMD', '/APPCONTAINER', '/ERRORREPORT:PROMPT', '/NOLOGO', '/TLBID:1', '/NODEFAULTLIB:"kernel32.lib"', '/NODEFAULTLIB:"ole32.lib"'])
|
||||
env.Append(CPPFLAGS=['/D', '__WRL_NO_DEFAULT_LIB__', '/D', 'WIN32'])
|
||||
env.Append(CPPFLAGS=['/FU', os.environ['VCINSTALLDIR'] + 'lib/store/references/platform.winmd'])
|
||||
env.Append(CPPFLAGS=['/AI', os.environ['VCINSTALLDIR'] + 'lib/store/references'])
|
||||
|
||||
env.Append(LIBPATH=[os.environ['VCINSTALLDIR'] + 'lib/store/references'])
|
||||
|
||||
env.Append(CPPFLAGS=['/AI', vc_base_path + 'lib/store/references'])
|
||||
env.Append(CPPFLAGS=['/AI', vc_base_path + 'lib/x86/store/references'])
|
||||
|
||||
if (env["target"] == "release"):
|
||||
|
||||
@ -133,7 +134,7 @@ def configure(env):
|
||||
|
||||
env.Append(CCFLAGS=string.split('/FS /MP /GS /wd"4453" /wd"28204" /wd"4291" /Zc:wchar_t /Gm- /fp:precise /D "_UNICODE" /D "UNICODE" /D "WINAPI_FAMILY=WINAPI_FAMILY_APP" /errorReport:prompt /WX- /Zc:forScope /Gd /EHsc /nologo'))
|
||||
env.Append(CXXFLAGS=string.split('/ZW /FS'))
|
||||
env.Append(CCFLAGS=['/AI', os.environ['VCINSTALLDIR'] + '\\vcpackages', '/AI', os.environ['WINDOWSSDKDIR'] + '\\References\\CommonConfiguration\\Neutral'])
|
||||
env.Append(CCFLAGS=['/AI', vc_base_path + '\\vcpackages', '/AI', os.environ['WINDOWSSDKDIR'] + '\\References\\CommonConfiguration\\Neutral'])
|
||||
|
||||
env["PROGSUFFIX"] = "." + arch + env["PROGSUFFIX"]
|
||||
env["OBJSUFFIX"] = "." + arch + env["OBJSUFFIX"]
|
||||
|
@ -97,7 +97,7 @@ Error ContextEGL::initialize() {
|
||||
EGLContext context = EGL_NO_CONTEXT;
|
||||
EGLSurface surface = EGL_NO_SURFACE;
|
||||
EGLConfig config = nullptr;
|
||||
EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE, EGL_NONE };
|
||||
EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE, EGL_NONE };
|
||||
|
||||
try {
|
||||
|
||||
|
@ -330,16 +330,9 @@ String OSUWP::get_clipboard() const {
|
||||
return "";
|
||||
};
|
||||
|
||||
void OSUWP::input_event(Ref<InputEvent> &p_event) {
|
||||
void OSUWP::input_event(const Ref<InputEvent> &p_event) {
|
||||
|
||||
input->parse_input_event(p_event);
|
||||
|
||||
if (p_event.type == Ref<InputEvent>::MOUSE_BUTTON && p_event->is_pressed() && p_event->get_button_index() > 3) {
|
||||
|
||||
//send release for mouse wheel
|
||||
p_event->is_pressed() = false;
|
||||
input->parse_input_event(p_event);
|
||||
}
|
||||
};
|
||||
|
||||
void OSUWP::delete_main_loop() {
|
||||
@ -663,16 +656,18 @@ void OSUWP::process_key_events() {
|
||||
for (int i = 0; i < key_event_pos; i++) {
|
||||
|
||||
KeyEvent &kev = key_event_buffer[i];
|
||||
Ref<InputEvent> iev;
|
||||
|
||||
iev.type = Ref<InputEvent>::KEY;
|
||||
iev.key.mod = kev.mod_state;
|
||||
iev->is_echo() = kev.echo;
|
||||
iev->get_scancode() = kev->get_scancode();
|
||||
iev.key.unicode = kev.unicode;
|
||||
iev->is_pressed() = kev->is_pressed();
|
||||
Ref<InputEventKey> key_event;
|
||||
key_event.instance();
|
||||
key_event->set_alt(kev.alt);
|
||||
key_event->set_shift(kev.shift);
|
||||
key_event->set_control(kev.control);
|
||||
key_event->set_echo(kev.echo);
|
||||
key_event->set_scancode(kev.scancode);
|
||||
key_event->set_unicode(kev.unicode);
|
||||
key_event->set_pressed(kev.pressed);
|
||||
|
||||
input_event(iev);
|
||||
input_event(key_event);
|
||||
}
|
||||
key_event_pos = 0;
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ public:
|
||||
CHAR_EVENT_MESSAGE
|
||||
};
|
||||
|
||||
InputModifierState mod_state;
|
||||
bool alt, shift, control;
|
||||
MessageType type;
|
||||
bool pressed;
|
||||
unsigned int scancode;
|
||||
@ -257,7 +257,7 @@ public:
|
||||
|
||||
virtual bool get_swap_ok_cancel() { return true; }
|
||||
|
||||
void input_event(Ref<InputEvent> &p_event);
|
||||
void input_event(const Ref<InputEvent> &p_event);
|
||||
|
||||
virtual PowerState get_power_state();
|
||||
virtual int get_power_seconds_left();
|
||||
|
Loading…
Reference in New Issue
Block a user