Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
godot
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
community
godot
Commits
01289478
Unverified
Commit
01289478
authored
May 03, 2020
by
bruvzg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Linux/Windows] Set pressure to 1.0f when primary button is pressed and device…
[Linux/Windows] Set pressure to 1.0f when primary button is pressed and device is not pressure sensitive.
parent
78db7824
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
37 additions
and
4 deletions
+37
-4
display_server_x11.cpp
platform/linuxbsd/display_server_x11.cpp
+9
-2
display_server_x11.h
platform/linuxbsd/display_server_x11.h
+1
-0
display_server_windows.cpp
platform/windows/display_server_windows.cpp
+11
-2
display_server_windows.h
platform/windows/display_server_windows.h
+16
-0
No files found.
platform/linuxbsd/display_server_x11.cpp
View file @
01289478
...
...
@@ -2359,6 +2359,7 @@ void DisplayServerX11::process_events() {
xi
.
pressure
=
0
;
xi
.
tilt
=
Vector2
();
xi
.
pressure_supported
=
false
;
while
(
XPending
(
x11_display
)
>
0
)
{
XEvent
event
;
...
...
@@ -2421,9 +2422,11 @@ void DisplayServerX11::process_events() {
Map
<
int
,
Vector2
>::
Element
*
pen_pressure
=
xi
.
pen_pressure_range
.
find
(
device_id
);
if
(
pen_pressure
)
{
Vector2
pen_pressure_range
=
pen_pressure
->
value
();
if
(
pen_pressure_range
!=
Vector2
())
if
(
pen_pressure_range
!=
Vector2
())
{
xi
.
pressure_supported
=
true
;
xi
.
pressure
=
(
*
values
-
pen_pressure_range
[
0
])
/
(
pen_pressure_range
[
1
]
-
pen_pressure_range
[
0
]);
}
}
values
++
;
...
...
@@ -2782,7 +2785,11 @@ void DisplayServerX11::process_events() {
mm
.
instance
();
mm
->
set_window_id
(
window_id
);
mm
->
set_pressure
(
xi
.
pressure
);
if
(
xi
.
pressure_supported
)
{
mm
->
set_pressure
(
xi
.
pressure
);
}
else
{
mm
->
set_pressure
((
mouse_get_button_state
()
&
(
1
<<
(
BUTTON_LEFT
-
1
)))
?
1.0
f
:
0.0
f
);
}
mm
->
set_tilt
(
xi
.
tilt
);
// Make the absolute position integral so it doesn't look _too_ weird :)
...
...
platform/linuxbsd/display_server_x11.h
View file @
01289478
...
...
@@ -176,6 +176,7 @@ class DisplayServerX11 : public DisplayServer {
XIEventMask
all_event_mask
;
Map
<
int
,
Vector2
>
state
;
double
pressure
;
bool
pressure_supported
;
Vector2
tilt
;
Vector2
mouse_pos_to_filter
;
Vector2
relative_motion
;
...
...
platform/windows/display_server_windows.cpp
View file @
01289478
...
...
@@ -1928,6 +1928,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
mm
->
set_control
(
control_mem
);
mm
->
set_shift
(
shift_mem
);
mm
->
set_alt
(
alt_mem
);
mm
->
set_pressure
((
raw
->
data
.
mouse
.
ulButtons
&
RI_MOUSE_LEFT_BUTTON_DOWN
)
?
1.0
f
:
0.0
f
);
mm
->
set_button_mask
(
last_button_state
);
...
...
@@ -2038,8 +2039,14 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
mm
.
instance
();
mm
->
set_window_id
(
window_id
);
mm
->
set_pressure
(
pen_info
.
pressure
?
(
float
)
pen_info
.
pressure
/
1024
:
0
);
mm
->
set_tilt
(
Vector2
(
pen_info
.
tiltX
?
(
float
)
pen_info
.
tiltX
/
90
:
0
,
pen_info
.
tiltY
?
(
float
)
pen_info
.
tiltY
/
90
:
0
));
if
(
pen_info
.
penMask
&
PEN_MASK_PRESSURE
)
{
mm
->
set_pressure
((
float
)
pen_info
.
pressure
/
1024
);
}
else
{
mm
->
set_pressure
((
HIWORD
(
wParam
)
&
POINTER_MESSAGE_FLAG_FIRSTBUTTON
)
?
1.0
f
:
0.0
f
);
}
if
((
pen_info
.
penMask
&
PEN_MASK_TILT_X
)
&&
(
pen_info
.
penMask
&
PEN_MASK_TILT_Y
))
{
mm
->
set_tilt
(
Vector2
((
float
)
pen_info
.
tiltX
/
90
,
(
float
)
pen_info
.
tiltY
/
90
));
}
mm
->
set_control
((
wParam
&
MK_CONTROL
)
!=
0
);
mm
->
set_shift
((
wParam
&
MK_SHIFT
)
!=
0
);
...
...
@@ -2138,6 +2145,8 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
mm
->
set_shift
((
wParam
&
MK_SHIFT
)
!=
0
);
mm
->
set_alt
(
alt_mem
);
mm
->
set_pressure
((
wParam
&
MK_LBUTTON
)
?
1.0
f
:
0.0
f
);
mm
->
set_button_mask
(
last_button_state
);
mm
->
set_position
(
Vector2
(
GET_X_LPARAM
(
lParam
),
GET_Y_LPARAM
(
lParam
)));
...
...
platform/windows/display_server_windows.h
View file @
01289478
...
...
@@ -75,6 +75,22 @@ typedef UINT32 POINTER_FLAGS;
typedef
UINT32
PEN_FLAGS
;
typedef
UINT32
PEN_MASK
;
#ifndef PEN_MASK_PRESSURE
#define PEN_MASK_PRESSURE 0x00000001
#endif
#ifndef PEN_MASK_TILT_X
#define PEN_MASK_TILT_X 0x00000004
#endif
#ifndef PEN_MASK_TILT_Y
#define PEN_MASK_TILT_Y 0x00000008
#endif
#ifndef POINTER_MESSAGE_FLAG_FIRSTBUTTON
#define POINTER_MESSAGE_FLAG_FIRSTBUTTON 0x00000010
#endif
enum
tagPOINTER_INPUT_TYPE
{
PT_POINTER
=
0x00000001
,
PT_TOUCH
=
0x00000002
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment