Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

增加mousepressed函数 #76

Closed
wants to merge 2 commits into from
Closed

Conversation

royqh1979
Copy link
Collaborator

增加mousepressed函数,用于判断是否有鼠标点击发生并立即返回

如果mousepressed返回1(有鼠标发生),在接下来调用delay_fps/delay_ms/delay_jfps时会清除点击事件标志,以避免一次点击被多帧处理的情况发生。

@wysaid
Copy link
Owner

wysaid commented Jan 30, 2021

这个 @chirsz-ever 看看吧, 没问题就合一下

@chirsz-ever
Copy link
Collaborator

这个新特性完全可以用户自己实现,而响应鼠标点击事件具有内在的复杂度:建立事件读取循环,编写状态机以设置 UI。这不应该是 EGE 要接管的事务,试图使用专门的 API 来“简化”实质上只会增加认知上的混乱;

一般人们想响应的鼠标操作是“点击”(Click),即按下再抬起,且两次事件必须在同一对象上,而这里只检测下降沿;

_graph_setting 已经是一团浆糊了,要避免继续往里塞东西;

综上,不接受这个 PR。

@royqh1979 royqh1979 deleted the mousepressed branch February 1, 2021 05:07
@royqh1979
Copy link
Collaborator Author

royqh1979 commented Feb 2, 2021

一般人们想响应的鼠标操作是“点击”(Click),即按下再抬起,且两次事件必须在同一对象上,而这里只检测下降沿;

pressed事件是针对整个窗口的。实际上,这个实现是参考的microui ( https://github.com/rxi/microui/ ),里面里的pressed状态就是只检测下降的

@royqh1979
Copy link
Collaborator Author

royqh1979 commented Feb 2, 2021

这个新特性完全可以用户自己实现,而响应鼠标点击事件具有内在的复杂度:建立事件读取循环,编写状态机以设置 UI。这不应该是 EGE 要接管的事务,试图使用专门的 API 来“简化”实质上只会增加认知上的混乱;

  1. ege本来就是对GDI和windows 消息循环的简化和封装;那么用同样的逻辑不是也可以说会增加认知上的混乱呢?
  2. ege到底要为谁服务,解决用户的什么问题?可否把它的范围边界划出来?
  3. 鼠标处理是现代窗口程序最重要的交互手段;而ege恰恰在这方面做的太少了。

@royqh1979 royqh1979 restored the mousepressed branch February 2, 2021 10:53
@royqh1979
Copy link
Collaborator Author

一般人们想响应的鼠标操作是“点击”(Click),即按下再抬起,且两次事件必须在同一对象上,而这里只检测下降沿;

你自己写的microui-impl-ege里,mouse_pressed也是只检测下降沿呀?为什么要双标呢?

@chirsz-ever
Copy link
Collaborator

pressed事件是针对整个窗口的。实际上,这个实现是参考的microui ( https://github.com/rxi/microui/ ),里面里的pressed状态就是只检测下降的
这个是 rxi 的设计,我对此并不认同,但除了 microui 外的 IMGUI 库如 Dear imgui、Nuklear 都太重了,所以我做的是 microui 的移植。

  1. ege本来就是对GDI和windows 消息循环的简化和封装;那么用同样的逻辑不是也可以说会增加认知上的混乱呢?

在某些方面 EGE 确实存在这样的问题,比如既有 settarget 函数又能设置全局绘图页、在绘图函数中单独指明绘制目标,这样的混乱需要减少。

我的思路是像 SDL 那样统一处理消息,而不是像现在这样鼠标、键盘、窗口分开处理,而 mousepressed 加剧了这种分裂。

  1. ege到底要为谁服务,解决用户的什么问题?可否把它的范围边界划出来?

这确实值得讨论,应该另开 issue 以及在 #71 中讨论。

  1. 鼠标处理是现代窗口程序最重要的交互手段;而ege恰恰在这方面做的太少了。

EGE 提供的鼠标消息处理是完备的,如果要扩展应该是定义新的单击和双击消息,但这其实可以在用户层面完成。鼠标消息响应还可以用 egeControlBase 来实现。相比之下这个 mousepressed 功能有限,也没有可扩展性。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants