Touch events are communicated from BLOCKS devices to your application code via TouchSurface objects.
You can obtain a pointer to the TouchSurface associated with a specific BLOCKS device from its corresponding Block object using the Block::getTouchSurface() method — see the Discovering BLOCKS page for an example of how to obtain Block objects. For devices without a touch surface (such as the Control Block) this method will return nullptr
, but if the device is capable of sending touch events then the pointer to the TouchSurface will be valid for the lifetime of the Block object.
Once you have a TouchSurface you must register as a TouchSurface::Listener to get touch events. The process for doing this is to have one of your application's classes inherit from TouchSurface::Listener and override the pure virtual method TouchSurface::Listener::touchChanged(). Then, when you register your derived class as a listener to a particular TouchSurface, your overriden method will be called when the corresponding device is touched.
A safe way of registering a class derived from TouchSurface::Listener with a TouchSurface is as follows.
When your overriden touchChanged()
method is called you have access to two parameters: a reference to the TouchSurface that generated this event and a reference to a TouchSurface::Touch. The TouchSurface::Touch class contains member variables describing the position, pressure, velocity, timestamp and more.
To add this functionality to the BlockFinder example project, add TouchSurface::Listener as a base class to the BlockFinder class and override the touchChanged()
function as follows:
Then in the topologyChanged()
callback, add the BlockFinder class as a listener to the connected Blocks in the current topology to receive touch change callbacks as shown below:
If you run the application now and connect a Lightpad, you should see text in the logger whenever the surface is touched.
You can also find multiple examples of using TouchSurfaces in the Example JUCE Applications pages.
Learn more about other Block methods from the following pages: