TouchGFX之事件

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()));
    ...
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/496832.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

原生JS上传大文件分片

代码&#xff1a;https://gitee.com/xproer/up6-vue-cli 1.引入up6组件 2.配置接口地址 接口地址分别对应&#xff1a;文件初始化&#xff0c;文件数据上传&#xff0c;文件进度&#xff0c;文件上传完毕&#xff0c;文件删除&#xff0c;文件夹初始化&#xff0c;文件夹删除&…

市场复盘总结 20240328

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 40% 最常用的…

代码随想录算法训练营第day60|84.柱状图中最大的矩形

84.柱状图中最大的矩形 力扣题目链接(opens new window) 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 思路&#xff1a; 为什么这么说呢&#xff…

第三十二天-PythonWeb主流框架-Django框架

目录 1.介绍 发展历史 介绍 2.使用 1.安装 2.创建项目 3.项目结构 4.启动 3.开发流程 1.设置ip可访问 2.创建模块 3.第一个页面 4.视图 5.include()参数 6.url与视图的关系 7.响应内容 4.视图处理业务逻辑 1.响应html 2.获取url参数 3.从文件响应html内容 …

趣味物理知识竞赛活动方案

为了丰富校园文化生活&#xff0c;创建格调高雅、学习氛围浓厚、青春气息浓郁的校园文化&#xff0c;注重多样性全方面的发展&#xff0c;推进了素质教育向纵深拓展&#xff0c;全面提升大学生的综合素质和精神文明建设全面发展。为进一步引导大学生了解前沿科技&#xff0c;普…

24计算机考研调剂 | 【官方】北京科技大学

北京科技大学 考研调剂招生信息 招生专业&#xff1a; 085404&#xff08;计算机技术&#xff09; 081200&#xff08;计算机科学与技术&#xff09; 调剂要求&#xff1a;&#xff08;调剂基本分数&#xff09; 我中心将在教育部“全国硕士生招生调剂服务系统”&#xff08…

面试算法-124-二叉树的最近公共祖先

题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它…

缓存雪崩问题及解决思路

实战篇Redis 2.7 缓存雪崩问题及解决思路 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 解决方案&#xff1a; 给不同的Key的TTL添加随机值利用Redis集群提高服务的可用性给缓存业务添加降…

Requests教程-20-sign签名认证

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节中&#xff0c;我们学习了requests的token认证方法&#xff0c;本小节我们讲解一下requests的sign签名认证。 在进行接口调用时&#xff0c;一般会要求进行签名操作&#xff0c;以确保接口的安全性和完整…

基于springboot实现课程作业管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现课程作业管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;课程作业管理系统当然也不能排除在外。课程作业管理系统是以实际运用为开发背景…

项目实战:电影评论情感分析系统

目录 1.引言 2.数据获取与预处理 3.构建文本分类模型&#xff08;使用LSTM&#xff09; 4.结果评估与模型优化 4.2.结果评估 4.2.模型优化 5.总结 1.引言 在本篇文章中&#xff0c;将通过一个完整的项目实战来演示如何使用Python构建一个电影评论情感分析系统。涵盖从数…

OSCP靶场--pyLoader

OSCP靶场–pyLoader 考点(信息收集CVE-2023-0297) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.178.26 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-28 09:14 EDT Nmap scan report for 192.168.178.26 Host is up…

二分图

数据结构、算法总述&#xff1a;数据结构/算法 C/C-CSDN博客 二分图&#xff1a;节点由两个集合组成&#xff0c;且两个集合内部没有边的图。换言之&#xff0c;存在一种方案&#xff0c;将节点划分成满足以上性质的两个集合。 染色法 目的&#xff1a;验证给定的二分图是否可…

房间采光不好怎么改造?这里有6个实用的解决方案!福州中宅装饰,福州装修

当装修中遇到房间采光不好的问题&#xff0c;可以从以下几个方面来解决&#xff1a; ①引入自然光源 尽可能减少光线阻碍物&#xff0c;例如可以考虑打通一些非承重墙&#xff0c;扩大窗户的面积&#xff0c;让阳光直接穿过阳台照射到室内。同时&#xff0c;也可以考虑在某些没…

YOLOV8逐步分解(2)_DetectionTrainer类初始化过程

接上篇文章yolov8逐步分解(1)--默认参数&超参配置文件加载继续讲解。 1. 默认配置文件加载完成后&#xff0c;创建对象trainer时&#xff0c;需要从默认配置中获取类DetectionTrainer初始化所需的参数args&#xff0c;如下所示 def train(cfgDEFAULT_CFG, use_pythonFalse…

17.注释和关键字

文章目录 一、 注释二、关键字class关键字 我们之前写的HelloWorld案例写的比较简单&#xff0c;但随着课程渐渐深入&#xff0c;当我们写一些比较难的代码时&#xff0c;在刚开始写完时&#xff0c;你知道这段代码是什么意思&#xff0c;但是等过了几天&#xff0c;再次看这段…

图片标注编辑平台搭建系列教程(3)——画布拖拽、缩放实现

简介 标注平台很关键的一点&#xff0c;对于整个图片为底图的画布&#xff0c;需要支持缩放、拖拽&#xff0c;并且无论画布位置在哪里&#xff0c;大小如何&#xff0c;所有绘制的点、线、面的坐标都是相对于图片左上角的&#xff0c;并且&#xff0c;拖拽、缩放&#xff0c;…

从零开始学习在VUE3中使用canvas(六):线条样式(线条宽度lineWidth,线条端点样式lineCap)

一、线条宽度lineWidth 1.1简介 值为一个数字 const ctx canvas.getContext("2d"); ctx.lineWidth 6; 1.2效果展示 1.3全部代码 <template><div class"canvasPage"><!-- 写一个canvas标签 --><canvas class"main" r…

图像处理与视觉感知---期末复习重点(5)

文章目录 一、膨胀与腐蚀1.1 膨胀1.2 腐蚀 二、开操作与闭操作 一、膨胀与腐蚀 1.1 膨胀 1. 集合 A A A 被集合 B B B 膨胀&#xff0c;定义式如下。其中集合 B B B 也称为结构元素&#xff1b; ( B ^ ) z (\hat{B})z (B^)z 表示 B B B 的反射平移 z z z 后得到的新集合。…

冥想打坐睡觉功法

睡觉把手机放远一点&#xff0c;有电磁辐射&#xff0c;我把睡觉功法交给你&#xff0c;这样就可以睡好了。
最新文章