Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions apps/DesktopStreamer/Stream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ bool processEvents( const bool interact )
case deflect::Event::EVT_KEY_PRESS:
case deflect::Event::EVT_KEY_RELEASE:
case deflect::Event::EVT_VIEW_SIZE_CHANGED:
case deflect::Event::EVT_TAP_AND_HOLD:
case deflect::Event::EVT_PAN:
case deflect::Event::EVT_PINCH:
default:
break;
}
Expand Down
66 changes: 47 additions & 19 deletions apps/SimpleStreamer/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ void initGLWindow( int argc, char** argv )
glClearColor( 0.5, 0.5, 0.5, 1.0 );

glEnable( GL_DEPTH_TEST );
glEnable( GL_LIGHTING) ;
glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
}

Expand Down Expand Up @@ -180,6 +180,8 @@ void display()
// angles of camera rotation and zoom factor
static float angleX = 0.f;
static float angleY = 0.f;
static float offsetX = 0.f;
static float offsetY = 0.f;
static float zoom = 1.f;

// Render the teapot
Expand All @@ -193,8 +195,10 @@ void display()
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();

glRotatef( angleX, 0.0, 1.0, 0.0 );
glRotatef( angleY, -1.0, 0.0, 0.0 );
glTranslatef( offsetX, -offsetY, 0.f );

glRotatef( angleX, 0.f, 1.f, 0.f );
glRotatef( angleY, -1.f, 0.f, 0.f );

glScalef( zoom, zoom, zoom );
glutSolidTeapot( 1.f );
Expand Down Expand Up @@ -237,25 +241,49 @@ void display()
{
const deflect::Event& event = deflectStream->getEvent();

if( event.type == deflect::Event::EVT_CLOSE )
switch( event.type )
{
case deflect::Event::EVT_CLOSE:
std::cout << "Received close..." << std::endl;
exit( 0 );
}

const float newMouseX = event.mouseX;
const float newMouseY = event.mouseY;

if( event.mouseLeft )
{
angleX += (newMouseX - mouseX) * 360.f;
angleY += (newMouseY - mouseY) * 360.f;
}
else if( event.mouseRight )
zoom += (newMouseY - mouseY);

mouseX = newMouseX;
mouseY = newMouseY;
case deflect::Event::EVT_PINCH:
zoom += std::copysign( std::sqrt( event.dx * event.dx +
event.dy * event.dy ),
event.dx + event.dy );
break;
case deflect::Event::EVT_PRESS:
mouseX = event.mouseX;
mouseY = event.mouseY;
break;
case deflect::Event::EVT_MOVE:
case deflect::Event::EVT_RELEASE:
if( event.mouseLeft )
{
angleX += (event.mouseX - mouseX) * 360.f;
angleY += (event.mouseY - mouseY) * 360.f;
}
mouseX = event.mouseX;
mouseY = event.mouseY;
break;
case deflect::Event::EVT_PAN:
offsetX += event.dx;
offsetY += event.dy;
mouseX = event.mouseX;
mouseY = event.mouseY;
break;
case deflect::Event::EVT_KEY_PRESS:
if( event.key == ' ' )
{
angleX = 0.f;
angleY = 0.f;
offsetX = 0.f;
offsetY = 0.f;
zoom = 1.f;
}
break;
default:
break;
};
}
}
else
Expand Down
62 changes: 56 additions & 6 deletions deflect/Event.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*********************************************************************/
/* Copyright (c) 2013, EPFL/Blue Brain Project */
/* Raphael Dumusc <raphael.dumusc@epfl.ch> */
/* Copyright (c) 2013-2016, EPFL/Blue Brain Project */
/* Raphael Dumusc <raphael.dumusc@epfl.ch> */
/* All rights reserved. */
/* */
/* Redistribution and use in source and binary forms, with or */
Expand Down Expand Up @@ -60,6 +60,52 @@ namespace deflect
* Typically used to forward user inputs from a window to classes that
* generate content for it.
*
* Events can be divided into several categories, listed below. Applications can
* decide to handle all the events or limit themselves to any subset that is
* appropriate.
*
* For example, an application which supports multiple touch points natively may
* want to use unprocessed touch points, while still assigning some specific
* actions to high-level gestures such as swipe events.
*
* For a concrete code example of basic event processing, users can refer to
* the simplestreamer demo application.
*
* Stream events
* - EVT_VIEW_SIZE_CHANGED < remote stream window resized by user
* - EVT_CLOSE < remote stream window closed by user
*
* Basic interaction
* - EVT_PRESS < touch/mouse button press (single touch point)
* - EVT_MOVE < touch point/mouse move (single touch point)
* - EVT_RELEASE < touch/mouse button release (single touch point)
* - EVT_WHEEL < mouse wheel event (no longer sent by Tide >= 1.2, replaced by EVT_PINCH)
*
* Basic gestures
* - EVT_CLICK < tap/click with one or more fingers/buttons (key field contains number of points)
* - EVT_DOUBLECLICK < double tap/click with one or more fingers/button (key field contains number of points)
* - EVT_TAP_AND_HOLD < tap and hold with one or more fingers/buttons (key field contains number of points)
*
* Advanced gestures
* - EVT_PAN < pan with two or more fingers (key field contains number of points)
* - EVT_PINCH < pinch with two finger
* - EVT_SWIPE_LEFT < swipe left with two fingers
* - EVT_SWIPE_RIGHT < swipe right with two fingers
* - EVT_SWIPE_UP < swipe up with two fingers
* - EVT_SWIPE_DOWN < swipe down with two fingers
*
* Unprocessed touch points
* - EVT_TOUCH_ADD < touch point added (key field contains point id)
* - EVT_TOUCH_UPDATE < touch point moved (key field contains point id)
* - EVT_TOUCH_REMOVE < touch point removed (key field contains point id)
*
* Keybord events
* - EVT_KEY_PRESS < key pressed
* - EVT_KEY_RELEASE < key released
*
* Other:
* - EVT_NONE < normally unused
*
* @version 1.0
*/
struct Event
Expand All @@ -86,7 +132,11 @@ struct Event
EVT_KEY_RELEASE,
EVT_VIEW_SIZE_CHANGED,
EVT_TAP_AND_HOLD,
EVT_PAN
EVT_PAN,
EVT_PINCH,
EVT_TOUCH_ADD,
EVT_TOUCH_UPDATE,
EVT_TOUCH_REMOVE
};

/** The type of event */
Expand All @@ -96,16 +146,16 @@ struct Event
//@{
double mouseX; /**< Normalized X mouse/touch position relative to the window */
double mouseY; /**< Normalized Y mouse/touch position relative to the window */
double dx; /**< Normalized horizontal delta for scroll events / delta in pixels for wheel events. */
double dy; /**< Normalized vertical delta for scroll events / delta in pixels for wheel events. */
double dx; /**< Normalized horizontal delta for pan/pinch events / delta in pixels for wheel events */
double dy; /**< Normalized vertical delta for pan/pinch events / delta in pixels for wheel events */
bool mouseLeft; /**< The state of the left mouse button (pressed=true) */
bool mouseRight; /**< The state of the right mouse button (pressed=true) */
bool mouseMiddle; /**< The state of the middle mouse button (pressed=true) */
//@}

/** @name Keyboard events */
//@{
int key; /**< The key code, see QKeyEvent::key() */
int key; /**< The key code, see QKeyEvent::key() / number of fingers for gestures / point id for touch events */
int modifiers; /**< The keyboard modifiers, see QKeyEvent::modifiers() */
char text[UNICODE_TEXT_SIZE]; /**< Carries unicode for key, see QKeyEvent::text() */
//@}
Expand Down
18 changes: 15 additions & 3 deletions deflect/qt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,21 @@
# Daniel Nachbaur <daniel.nachbaur@epfl.ch>
# Raphael Dumusc <raphael.dumusc@epfl.ch>

set(DEFLECTQT_HEADERS EventReceiver.h QmlGestures.h QmlStreamerImpl.h)
set(DEFLECTQT_PUBLIC_HEADERS QmlStreamer.h)
set(DEFLECTQT_SOURCES EventReceiver.cpp QmlStreamer.cpp QmlStreamerImpl.cpp)
set(DEFLECTQT_HEADERS
EventReceiver.h
QmlGestures.h
QmlStreamerImpl.h
)
set(DEFLECTQT_PUBLIC_HEADERS
QmlStreamer.h
TouchInjector.h
)
set(DEFLECTQT_SOURCES
EventReceiver.cpp
QmlStreamer.cpp
QmlStreamerImpl.cpp
TouchInjector.cpp
)
set(DEFLECTQT_LINK_LIBRARIES
PUBLIC Deflect Qt5::Quick PRIVATE Qt5::Qml)
set(DEFLECTQT_INCLUDE_NAME deflect/qt)
Expand Down
31 changes: 21 additions & 10 deletions deflect/qt/EventReceiver.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*********************************************************************/
/* Copyright (c) 2015, EPFL/Blue Brain Project */
/* Copyright (c) 2015-2016, EPFL/Blue Brain Project */
/* Daniel.Nachbaur <daniel.nachbaur@epfl.ch> */
/* Raphael Dumusc <raphael.dumusc@epfl.ch> */
/* All rights reserved. */
/* */
/* Redistribution and use in source and binary forms, with or */
Expand Down Expand Up @@ -62,8 +63,11 @@ EventReceiver::EventReceiver( Stream& stream )
_timer->start( 1 );
}

EventReceiver::~EventReceiver()
EventReceiver::~EventReceiver() {}

inline QPointF _pos( const Event& deflectEvent )
{
return QPointF{ deflectEvent.mouseX, deflectEvent.mouseY };
}

void EventReceiver::_onEvent( int socket )
Expand All @@ -82,20 +86,16 @@ void EventReceiver::_onEvent( int socket )
QCoreApplication::quit();
break;
case Event::EVT_PRESS:
emit pressed( deflectEvent.mouseX, deflectEvent.mouseY );
emit pressed( _pos( deflectEvent ));
break;
case Event::EVT_RELEASE:
emit released( deflectEvent.mouseX, deflectEvent.mouseY );
emit released( _pos( deflectEvent ));
break;
case Event::EVT_MOVE:
emit moved( deflectEvent.mouseX, deflectEvent.mouseY );
emit moved( _pos( deflectEvent ));
break;
case Event::EVT_VIEW_SIZE_CHANGED:
emit resized( deflectEvent.dx, deflectEvent.dy );
break;
case Event::EVT_WHEEL:
emit wheeled( deflectEvent.mouseX, deflectEvent.mouseY,
deflectEvent.dy );
emit resized( QSize{ int(deflectEvent.dx), int(deflectEvent.dy) } );
break;
case Event::EVT_SWIPE_LEFT:
emit swipeLeft();
Expand All @@ -117,8 +117,19 @@ void EventReceiver::_onEvent( int socket )
emit keyRelease( deflectEvent.key, deflectEvent.modifiers,
QString::fromStdString( deflectEvent.text ));
break;
case Event::EVT_TOUCH_ADD:
emit touchPointAdded( deflectEvent.key, _pos( deflectEvent ));
break;
case Event::EVT_TOUCH_UPDATE:
emit touchPointUpdated( deflectEvent.key, _pos( deflectEvent ));
break;
case Event::EVT_TOUCH_REMOVE:
emit touchPointRemoved( deflectEvent.key, _pos( deflectEvent ));
break;
case Event::EVT_CLICK:
case Event::EVT_DOUBLECLICK:
case Event::EVT_PINCH:
case Event::EVT_WHEEL:
default:
break;
}
Expand Down
21 changes: 15 additions & 6 deletions deflect/qt/EventReceiver.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*********************************************************************/
/* Copyright (c) 2015, EPFL/Blue Brain Project */
/* Copyright (c) 2015-2016, EPFL/Blue Brain Project */
/* Daniel.Nachbaur <daniel.nachbaur@epfl.ch> */
/* Raphael Dumusc <raphael.dumusc@epfl.ch> */
/* All rights reserved. */
/* */
/* Redistribution and use in source and binary forms, with or */
Expand Down Expand Up @@ -41,6 +42,8 @@
#define EVENTRECEIVER_H

#include <QObject>
#include <QPointF>
#include <QSize>
#include <QSocketNotifier>
#include <QTimer>

Expand All @@ -60,18 +63,24 @@ class EventReceiver : public QObject
~EventReceiver();

signals:
void pressed( double x, double y );
void released( double x, double y );
void moved( double x, double y );
void resized( double x, double y );
void wheeled( double x, double y, double dy );
void pressed( QPointF position );
void released( QPointF position );
void moved( QPointF position );

void resized( QSize newSize );

void keyPress( int key, int modifiers, QString text );
void keyRelease( int key, int modifiers, QString text );

void swipeLeft();
void swipeRight();
void swipeUp();
void swipeDown();

void touchPointAdded( int id, QPointF position );
void touchPointUpdated( int id, QPointF position );
void touchPointRemoved( int id, QPointF position );

private slots:
void _onEvent( int socket );

Expand Down
Loading