Due to the right hand side of the :? trickery the rhs was cast to a
char losing precision. Previously this didn't matter, but with
CharProxy it does. (Previously we could just happily cast it back to
a wchar_t and get the original 16 - 32 bits. Now we'll only ever
get the first 8).
Fixes the following warnings in `p=server target=release_debug` builds
on Travis CI:
```
./core/os/memory.h: In function 'MainLoop* TestOAHashMap::test()':
./core/os/memory.h:108:111: warning: 'dummy' may be used uninitialized in this function [-Wmaybe-uninitialized]
#define memnew_placement(m_placement, m_class) _post_initialize(new (m_placement, sizeof(m_class), "") m_class)
^
main/tests/test_oa_hash_map.cpp:98:7: note: 'dummy' was declared here
int dummy;
^
scene/resources/bit_mask.cpp:447:3: warning: 'next_i' may be used uninitialized in this function [-Wmaybe-uninitialized]
scene/resources/bit_mask.cpp:448:4: warning: 'next_j' may be used uninitialized in this function [-Wmaybe-uninitialized]
```
Fixes this warning raised by Travis CI on macOS:
```
editor/plugins/polygon_2d_editor_plugin.cpp:95:6: warning: variable 'skeleton' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (!node->has_node(node->get_skeleton())) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
editor/plugins/polygon_2d_editor_plugin.cpp:106:7: note: uninitialized use occurs here
if (!skeleton) {
^~~~~~~~
editor/plugins/polygon_2d_editor_plugin.cpp:95:2: note: remove the 'if' if its condition is always false
if (!node->has_node(node->get_skeleton())) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
editor/plugins/polygon_2d_editor_plugin.cpp:94:22: note: initialize the variable 'skeleton' to silence this warning
Skeleton2D *skeleton;
^
= NULL
```
By introducing an intermediate proxy class for the array subscript
operator for String and CharString we can control better when CowData
will actually CoW.
This should improve performance of String usage for most cases.
Some of the previous colors were "overbright" in the sense that
some of their components were above 1, causing font anti-aliasing
to look bad.
These new colors should be easier on the eyes while fitting better
with the rest of the editor's color palette.
The current system for capturing the mouse and generating motion events on X11
has issues with inaccurate and lopsided input. This is because both
XQueryPointer and XWarpPointer work in terms of integer coordinates when the
underlying X11 input driver may be tracking the mouse using subpixel
coordinates. When warping the pointer, the fractional part of the pointer
position is discarded.
To work around this issue, the fix uses raw motion events from XInput 2. These
events report relative motion and are not affected by pointer warping.
Additionally, this means Godot is able to detect motion at a higher resolution
under X11. Because this is raw mouse input, it is not affected by the user's
pointer speed and acceleration settings. This is the same system as SDL2 uses
for its relative motion.
Multitouch input on X requires XInput 2.2. Raw motion events require
XInput 2.0. Since 2.0 is old enough, this is now the minimum requirement to
use Godot on X.
By relying on the fact that a struct or class's first member has the
same address as the struct itself we can cast VectorWriteProxy<T> to
Vector<T> and access the CowData field.
This allows a Vector to be moved in memory without invalidating the
pointer to the cowdata field.