blob: 654d4c2aeeb341f530e86d26050596b47409f8b4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "views/events/event.h"
#include <windows.h>
namespace views {
KeyEvent::KeyEvent(ui::EventType type, ui::KeyboardCode key_code,
int event_flags, int repeat_count, int message_flags,
UINT message)
: Event(type, event_flags),
key_code_(key_code),
repeat_count_(repeat_count),
message_flags_(message_flags),
message_(message) {
}
int Event::GetWindowsFlags() const {
// TODO: need support for x1/x2.
int result = 0;
result |= (flags_ & ui::EF_SHIFT_DOWN) ? MK_SHIFT : 0;
result |= (flags_ & ui::EF_CONTROL_DOWN) ? MK_CONTROL : 0;
result |= (flags_ & ui::EF_LEFT_BUTTON_DOWN) ? MK_LBUTTON : 0;
result |= (flags_ & ui::EF_MIDDLE_BUTTON_DOWN) ? MK_MBUTTON : 0;
result |= (flags_ & ui::EF_RIGHT_BUTTON_DOWN) ? MK_RBUTTON : 0;
return result;
}
//static
int Event::ConvertWindowsFlags(UINT win_flags) {
int r = 0;
if (win_flags & MK_CONTROL)
r |= ui::EF_CONTROL_DOWN;
if (win_flags & MK_SHIFT)
r |= ui::EF_SHIFT_DOWN;
if (GetKeyState(VK_MENU) < 0)
r |= ui::EF_ALT_DOWN;
if (win_flags & MK_LBUTTON)
r |= ui::EF_LEFT_BUTTON_DOWN;
if (win_flags & MK_MBUTTON)
r |= ui::EF_MIDDLE_BUTTON_DOWN;
if (win_flags & MK_RBUTTON)
r |= ui::EF_RIGHT_BUTTON_DOWN;
return r;
}
// static
int KeyEvent::GetKeyStateFlags() {
// Windows Keyboard messages don't come with control key state as parameters
// like mouse messages do, so we need to explicitly probe for these key
// states.
int flags = 0;
if (GetKeyState(VK_MENU) & 0x80)
flags |= ui::EF_ALT_DOWN;
if (GetKeyState(VK_SHIFT) & 0x80)
flags |= ui::EF_SHIFT_DOWN;
if (GetKeyState(VK_CONTROL) & 0x80)
flags |= ui::EF_CONTROL_DOWN;
return flags;
}
bool KeyEvent::IsExtendedKey() const {
return (message_flags_ & KF_EXTENDED) == KF_EXTENDED;
}
} // namespace views
|