fix touch and pen mixed in windows

This commit is contained in:
2018-10-14 00:09:49 +02:00
parent 64ce471ed8
commit ae05e56110
3 changed files with 37 additions and 24 deletions

View File

@@ -16,20 +16,20 @@ void CanvasModeBasicCamera::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
switch (me->m_type) switch (me->m_type)
{ {
case kEventType::MouseDownL: case kEventType::MouseDownL:
if (canvas->m_touch_lock && me->m_source == kEventSource::Touch) // if (canvas->m_touch_lock && me->m_source == kEventSource::Touch)
{ // {
m_draggingR = true; // m_draggingR = true;
m_dragR_start = me->m_pos; // m_dragR_start = me->m_pos;
m_pan_start = canvas->m_pan; // m_pan_start = canvas->m_pan;
node->mouse_capture(); // node->mouse_capture();
} // }
break; break;
case kEventType::MouseUpL: case kEventType::MouseUpL:
if (canvas->m_touch_lock && me->m_source == kEventSource::Touch) // if (canvas->m_touch_lock && me->m_source == kEventSource::Touch)
{ // {
m_draggingR = false; // m_draggingR = false;
node->mouse_release(); // node->mouse_release();
} // }
break; break;
case kEventType::MouseDownR: case kEventType::MouseDownR:
if (App::I.keys[(int)kKey::KeyAlt]) if (App::I.keys[(int)kKey::KeyAlt])

View File

@@ -30,6 +30,8 @@ int gl_count = 0;
std::deque<std::packaged_task<void()>> tasklist; std::deque<std::packaged_task<void()>> tasklist;
std::mutex task_mutex; std::mutex task_mutex;
float timer_stylus = 0; float timer_stylus = 0;
float timer_ink_touch = 0;
float timer_ink_pen = 0;
bool sandboxed = false; bool sandboxed = false;
//Returns the last Win32 error, in string format. Returns an empty string if there is no error. //Returns the last Win32 error, in string format. Returns an empty string if there is no error.
@@ -603,6 +605,8 @@ int main(int argc, char** argv)
render_timer += dt; render_timer += dt;
frame_timer += dt; frame_timer += dt;
timer_stylus += dt; timer_stylus += dt;
timer_ink_touch += dt;
timer_ink_pen += dt;
t0 = t1; t0 = t1;
if (one_sec > 1.f) if (one_sec > 1.f)
@@ -644,14 +648,23 @@ int main(int argc, char** argv)
App::I.redraw = true; App::I.redraw = true;
render_timer = 0; render_timer = 0;
} }
if (timer_stylus > 0.1 && WacomTablet::I.m_stylus) if (timer_stylus > 0.1 && (WacomTablet::I.m_stylus || WacomTablet::I.m_eraser))
{ {
WacomTablet::I.m_stylus = false; WacomTablet::I.m_stylus = false;
WacomTablet::I.m_eraser = false; WacomTablet::I.m_eraser = false;
WacomTablet::I.m_ink = false; App::I.redraw = true;
}
if (timer_ink_pen > 0.1 && WacomTablet::I.m_ink_pen)
{
WacomTablet::I.m_ink_pen = false; WacomTablet::I.m_ink_pen = false;
App::I.redraw = true; App::I.redraw = true;
} }
if (timer_ink_touch > 0.1 && WacomTablet::I.m_ink_touch)
{
WacomTablet::I.m_ink_touch = false;
App::I.redraw = true;
}
if (App::I.redraw) if (App::I.redraw)
{ {
async_lock(); async_lock();
@@ -802,9 +815,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
std::lock_guard<std::mutex> lock(task_mutex); std::lock_guard<std::mutex> lock(task_mutex);
tasklist.emplace_back([lp, extra, p = WacomTablet::I.get_pressure()]{ tasklist.emplace_back([lp, extra, p = WacomTablet::I.get_pressure()]{
kEventSource pointer_source; kEventSource pointer_source;
if (WacomTablet::I.m_ink) if (WacomTablet::I.m_ink_pen || WacomTablet::I.m_ink_touch)
{ {
pointer_source = WacomTablet::I.m_ink_pen? kEventSource::Stylus : kEventSource::Touch; pointer_source = WacomTablet::I.m_ink_pen ? kEventSource::Stylus : kEventSource::Touch;
} }
else else
{ {
@@ -822,7 +835,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
tasklist.emplace_back([lp, extra, hWnd, p = WacomTablet::I.get_pressure()]{ tasklist.emplace_back([lp, extra, hWnd, p = WacomTablet::I.get_pressure()]{
SetCapture(hWnd); SetCapture(hWnd);
kEventSource pointer_source; kEventSource pointer_source;
if (WacomTablet::I.m_ink) if (WacomTablet::I.m_ink_pen || WacomTablet::I.m_ink_touch)
{ {
pointer_source = WacomTablet::I.m_ink_pen ? kEventSource::Stylus : kEventSource::Touch; pointer_source = WacomTablet::I.m_ink_pen ? kEventSource::Stylus : kEventSource::Touch;
} }
@@ -843,7 +856,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
WacomTablet::I.reset_pressure(); WacomTablet::I.reset_pressure();
ReleaseCapture(); ReleaseCapture();
kEventSource pointer_source; kEventSource pointer_source;
if (WacomTablet::I.m_ink) if (WacomTablet::I.m_ink_pen || WacomTablet::I.m_ink_touch)
{ {
pointer_source = WacomTablet::I.m_ink_pen ? kEventSource::Stylus : kEventSource::Touch; pointer_source = WacomTablet::I.m_ink_pen ? kEventSource::Stylus : kEventSource::Touch;
} }
@@ -863,7 +876,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
tasklist.emplace_back([lp, extra, hWnd]{ tasklist.emplace_back([lp, extra, hWnd]{
SetCapture(hWnd); SetCapture(hWnd);
kEventSource pointer_source; kEventSource pointer_source;
if (WacomTablet::I.m_ink) if (WacomTablet::I.m_ink_pen || WacomTablet::I.m_ink_touch)
{ {
pointer_source = WacomTablet::I.m_ink_pen ? kEventSource::Stylus : kEventSource::Touch; pointer_source = WacomTablet::I.m_ink_pen ? kEventSource::Stylus : kEventSource::Touch;
} }
@@ -883,7 +896,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
tasklist.emplace_back([lp, extra]{ tasklist.emplace_back([lp, extra]{
ReleaseCapture(); ReleaseCapture();
kEventSource pointer_source; kEventSource pointer_source;
if (WacomTablet::I.m_ink) if (WacomTablet::I.m_ink_pen || WacomTablet::I.m_ink_touch)
{ {
pointer_source = WacomTablet::I.m_ink_pen ? kEventSource::Stylus : kEventSource::Touch; pointer_source = WacomTablet::I.m_ink_pen ? kEventSource::Stylus : kEventSource::Touch;
} }
@@ -948,8 +961,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
// success, process touchInfo // success, process touchInfo
// mark as handled to skip call to DefWindowProc // mark as handled to skip call to DefWindowProc
//fHandled = TRUE; //fHandled = TRUE;
WacomTablet::I.m_ink = true; timer_ink_touch = 0;
WacomTablet::I.m_ink_pen = false; WacomTablet::I.m_ink_touch = true;
WacomTablet::I.m_pen_pres = 1; WacomTablet::I.m_pen_pres = 1;
} }
break; break;
@@ -965,7 +978,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
// mark as handled to skip call to DefWindowProc // mark as handled to skip call to DefWindowProc
//fHandled = TRUE; //fHandled = TRUE;
//penInfo.pressure //penInfo.pressure
WacomTablet::I.m_ink = true; timer_ink_pen = 0;
WacomTablet::I.m_ink_pen = true; WacomTablet::I.m_ink_pen = true;
WacomTablet::I.m_pen_pres = (float)penInfo.pressure / 1024.f; WacomTablet::I.m_pen_pres = (float)penInfo.pressure / 1024.f;
App::I.set_stylus(); App::I.set_stylus();

View File

@@ -20,8 +20,8 @@ public:
bool m_mouse_down = false; bool m_mouse_down = false;
bool m_stylus = false; bool m_stylus = false;
bool m_eraser = false; bool m_eraser = false;
bool m_ink = false;
bool m_ink_pen = false; bool m_ink_pen = false;
bool m_ink_touch = false;
HCTX TabletInit(HWND hWnd); HCTX TabletInit(HWND hWnd);