Touchgfx的事件类型有:点击事件、拖拽事件、手势事件和定时事件、外部按键事件、屏幕转换挂起事件
当引擎检测到这些事件的时候,调用事件处理函数传递给应用
#ifndef TOUCHGFX_EVENT_HPP
#define TOUCHGFX_EVENT_HPP
namespace touchgfx
{
/* 事件类 */
class Event
{
public:
/* 事件类型 */
enum EventType
{
EVENT_CLICK, //点击
EVENT_DRAG, //拖拽
EVENT_GESTURE //手势
};
/* 构造函数 */
Event()
{
}
/* 析构函数 */
virtual ~Event()
{
}
/* 获取事件类型 */
virtual EventType getEventType() const = 0;
};
}
#endif
点击事件
#ifndef TOUCHGFX_CLICKEVENT_HPP
#define TOUCHGFX_CLICKEVENT_HPP
#include <touchgfx/Event.hpp>
#include <touchgfx/hal/Types.hpp>
namespace touchgfx
{
/* 点击事件 */
class ClickEvent : public Event
{
public:
/* 点击事件类型 */
enum ClickEventType
{
PRESSED, //按下
RELEASED, //释放
CANCEL //取消
};
/* 初始化 ClickEvent 类的一个新实例。
*
* @param type 点击事件的类型。
* @param x 点击事件的 x 坐标。
* @param y 点击事件的 y 坐标。
* @param force (可选) 点击的力度。在触摸屏上,这通常表示用户按屏幕的力度。
* 在Windows平台上,此值始终为零。
*/
ClickEvent(ClickEventType type, int16_t x, int16_t y, int16_t force = 0)
: clickEventType(type), clickX(x), clickY(y), clickForce(force)
{
}
/* 复制构造函数 */
ClickEvent(const ClickEvent& clickEvent)
{
*this = clickEvent;
}
/* 获取点击事件的X坐标 */
int16_t getX() const
{
return clickX;
}
/* 获取点击事件的Y坐标 */
int16_t getY() const
{
return clickY;
}
/* 设置点击事件的X坐标 */
void setX(int16_t x)
{
clickX = x;
}
/* 设置点击事件的Y坐标 */
void setY(int16_t y)
{
clickY = y;
}
/* 设置点击事件的类型 */
void setType(ClickEventType type)
{
clickEventType = type;
}
/* 获取点击事件的类型 */
ClickEventType getType() const
{
return clickEventType;
}
/* 获取点击事件的力度 */
int16_t getForce() const
{
return clickForce;
}
/* 获取此事件的类型(EVENT_CLICK)(重写基类的方法) */
virtual Event::EventType getEventType() const
{
return Event::EVENT_CLICK;
}
/* 赋值运算符重载 */
const ClickEvent& operator=(const ClickEvent& clickEvent)
{
clickEventType = clickEvent.clickEventType;
clickX = clickEvent.clickX;
clickY = clickEvent.clickY;
clickForce = clickEvent.clickForce;
return *this;
}
private:
ClickEventType clickEventType; //点击事件类型
int16_t clickX; //点击事件的X坐标
int16_t clickY; //点击事件的Y坐标
int16_t clickForce; //点击事件的力度
};
}
#endif
拖拽事件
#ifndef TOUCHGFX_DRAGEVENT_HPP
#define TOUCHGFX_DRAGEVENT_HPP
#include <touchgfx/Event.hpp>
#include <touchgfx/hal/Types.hpp>
namespace touchgfx
{
/* 拖拽事件 */
class DragEvent : public Event
{
public:
/* 拖拽事件类型 */
enum DragEventType
{
DRAGGED
};
/* 构造函数 */
DragEvent(DragEventType type, int16_t oldX, int16_t oldY, int16_t newX, int16_t newY)
: dragEventType(type), dragOldX(oldX), dragOldY(oldY), dragNewX(newX), dragNewY(newY)
{
}
/* 复制构造函数 */
DragEvent(const DragEvent& dragEvent)
{
*this = dragEvent;
}
/* 获取老X坐标 */
int16_t getOldX() const
{
return dragOldX;
}
/* 获取老Y坐标 */
int16_t getOldY() const
{
return dragOldY;
}
/* 获取新X坐标 */
int16_t getNewX() const
{
return dragNewX;
}
/* 获取新Y坐标 */
int16_t getNewY() const
{
return dragNewY;
}
/* 设置拖拽事件的类型 */
DragEventType getType() const
{
return dragEventType;
}
/* 获取拖拽X距离 */
int16_t getDeltaX() const
{
return dragNewX - dragOldX;
}
/* 获取拖拽Y距离 */
int16_t getDeltaY() const
{
return dragNewY - dragOldY;
}
/* 获取此事件的类型(EVENT_DRAG)(重写基类的方法) */
virtual Event::EventType getEventType() const
{
return Event::EVENT_DRAG;
}
/* 赋值运算符重载 */
const DragEvent& operator=(const DragEvent& dragEvent)
{
dragEventType = dragEvent.dragEventType;
dragOldX = dragEvent.dragOldX;
dragOldY = dragEvent.dragOldY;
dragNewX = dragEvent.dragNewX;
dragNewY = dragEvent.dragNewY;
return *this;
}
private:
DragEventType dragEventType; //点击事件类型
int16_t dragOldX; //老X坐标
int16_t dragOldY; //老Y坐标
int16_t dragNewX; //新X坐标
int16_t dragNewY; //新Y坐标
};
}
#endif
手势事件
#ifndef TOUCHGFX_GESTUREEVENT_HPP
#define TOUCHGFX_GESTUREEVENT_HPP
#include <touchgfx/Event.hpp>
#include <touchgfx/hal/Types.hpp>
namespace touchgfx
{
/* 手势事件 */
class GestureEvent : public Event
{
public:
/* 手势事件类型 */
enum GestureEventType
{
SWIPE_HORIZONTAL, //水平滑动
SWIPE_VERTICAL //垂直滑动
};
/* 构造函数 */
GestureEvent(GestureEventType type, int16_t velocity, int16_t x, int16_t y)
: gestureEventType(type),
gestureVelocity(velocity),
gestureX(x),
gestureY(y)
{
}
/* 复制构造函数 */
GestureEvent(const GestureEvent& gestureEvent)
{
*this = gestureEvent;
}
/* 获取手势事件的速度 */
int16_t getVelocity() const
{
return gestureVelocity;
}
/* 设置手势事件的类型 */
GestureEventType getType() const
{
return gestureEventType;
}
/* 获取手势事件的x坐标 */
int16_t getX() const
{
return gestureX;
}
/* 获取手势事件的y坐标 */
int16_t getY() const
{
return gestureY;
}
/* 获取此事件的类型(EVENT_GESTURE)(重写基类的方法) */
virtual Event::EventType getEventType() const
{
return Event::EVENT_GESTURE;
}
/* 赋值运算符重载 */
const GestureEvent& operator=(const GestureEvent& gestureEvent)
{
gestureEventType = gestureEvent.gestureEventType;
gestureVelocity = gestureEvent.gestureVelocity;
gestureX = gestureEvent.gestureX;
gestureY = gestureEvent.gestureY;
return *this;
}
private:
/* 构造函数 */
GestureEvent()
: gestureEventType(SWIPE_HORIZONTAL), gestureVelocity(0), gestureX(0), gestureY(0)
{
}
GestureEventType gestureEventType; //手势事件的类型
int16_t gestureVelocity; //手势事件的速度
int16_t gestureX; //手势事件的x坐标
int16_t gestureY; //手势事件的y坐标
};
}
#endif
UI事件监听器
#ifndef TOUCHGFX_UIEVENTLISTENER_HPP
#define TOUCHGFX_UIEVENTLISTENER_HPP
#include <touchgfx/events/ClickEvent.hpp>
#include <touchgfx/events/DragEvent.hpp>
#include <touchgfx/events/GestureEvent.hpp>
#include <touchgfx/hal/Types.hpp>
namespace touchgfx
{
/* UI事件监听器 */
class UIEventListener
{
public:
/* 点击事件处理函数 */
virtual void handleClickEvent(const ClickEvent& event)
{
(void)event;
}
/* 拖拽事件处理函数 */
virtual void handleDragEvent(const DragEvent& event)
{
(void)event;
}
/* 手势事件处理函数 */
virtual void handleGestureEvent(const GestureEvent& event)
{
(void)event;
}
/* 外部按键事件处理函数 */
virtual void handleKeyEvent(uint8_t c)
{
(void)c;
}
/* 定时事件处理函数 */
virtual void handleTickEvent()
{
}
/* 屏幕转换挂起事件处理函数 */
virtual void handlePendingScreenTransition()
{
}
/* 析构函数 */
virtual ~UIEventListener()
{
}
};
}
#endif
通过 HAL::registerEventListener函数注册到引擎
void TouchGFXGeneratedHAL::initialize()
{
...
registerEventListener(*(Application::getInstance()));
...
}