minetest源码解析三:菜单响应以及核心函数介绍
2017-08-11 23:00
821 查看
菜单响应以及核心函数介绍
一 流程图
二 流程图中涉及到的核心函数介绍
1.点击响应鼠标事件
在device->run()控制的循环体内,一直循环,当有鼠标事件时,CIrrDevice::run()->CIrrDevice::postEventFromUser()->CGUIEnvironment::postEventFromUser()->CGUITabControl:onEvent()->GUIFormSpecMenu::OnEvent()->acceptInput()->TextDestGuiEngine::gotText->ScriptApiMainMenu::handleMainMenuButtons()
第一个代码中可以控制接受到的event事件是GUIFormSpecMenu::OnEvent()
主要涉及函数
acceptInput()
{
…
m_text_dst->gotText(fields);
}
这里的m_text_dst就是最初创建的TextDestGuiEngine对象。可以执行如下操作,最终更改了m_formspecgui存的控件以及控件属性值。
void TextDestGuiEngine::gotText(std::map<std::string,std::string>
fields)
{
m_engine->getScriptIface()->handleMainMenuButtons(fields);
}
void ScriptApiMainMenu::handleMainMenuButtons(std::map<std::string,std::string>
fields)
{
…
// Call it
if (lua_pcall(L,1,
0,m_errorhandler))
scriptError();
}
int ModApiMainMenu::l_update_formspec(lua_State *L)
{
if (engine->m_formspecgui !=0) {
engine->m_formspecgui->setForm(formspec);
}
}
2.CGUIEnvironment绘制
流程如下:CGUIEnvironment::drawAll()->IGUIElement:draw()->GUIModalMenu:draw()->GUIFormSpecMenu:drawMenu()-> 获取m_form_src->getForm(),即m_formspecgui刚刚响应界面后设置的值->regenerateGui()->parseElement()->parseButton()->Environment->addButton()
主要涉及函数
void GUIFormSpecMenu::drawMenu()
{
if(m_form_src)
{
std::string newform =m_form_src->getForm();
if(newform !=m_formspec_string)
{
m_formspec_string = newform;
regenerateGui(m_screensize_old);
}
}
…
}
一 流程图
二 流程图中涉及到的核心函数介绍
1.点击响应鼠标事件
在device->run()控制的循环体内,一直循环,当有鼠标事件时,CIrrDevice::run()->CIrrDevice::postEventFromUser()->CGUIEnvironment::postEventFromUser()->CGUITabControl:onEvent()->GUIFormSpecMenu::OnEvent()->acceptInput()->TextDestGuiEngine::gotText->ScriptApiMainMenu::handleMainMenuButtons()
第一个代码中可以控制接受到的event事件是GUIFormSpecMenu::OnEvent()
主要涉及函数
acceptInput()
{
…
m_text_dst->gotText(fields);
}
这里的m_text_dst就是最初创建的TextDestGuiEngine对象。可以执行如下操作,最终更改了m_formspecgui存的控件以及控件属性值。
void TextDestGuiEngine::gotText(std::map<std::string,std::string>
fields)
{
m_engine->getScriptIface()->handleMainMenuButtons(fields);
}
void ScriptApiMainMenu::handleMainMenuButtons(std::map<std::string,std::string>
fields)
{
…
// Call it
if (lua_pcall(L,1,
0,m_errorhandler))
scriptError();
}
int ModApiMainMenu::l_update_formspec(lua_State *L)
{
if (engine->m_formspecgui !=0) {
engine->m_formspecgui->setForm(formspec);
}
}
2.CGUIEnvironment绘制
流程如下:CGUIEnvironment::drawAll()->IGUIElement:draw()->GUIModalMenu:draw()->GUIFormSpecMenu:drawMenu()-> 获取m_form_src->getForm(),即m_formspecgui刚刚响应界面后设置的值->regenerateGui()->parseElement()->parseButton()->Environment->addButton()
主要涉及函数
void GUIFormSpecMenu::drawMenu()
{
if(m_form_src)
{
std::string newform =m_form_src->getForm();
if(newform !=m_formspec_string)
{
m_formspec_string = newform;
regenerateGui(m_screensize_old);
}
}
…
}
相关文章推荐
- minetest源码解析二:GUIEngine初始化、菜单刷新流程以及核心函数介绍
- minetest源码解析一:mymain流程图以及核心函数介绍
- minetest源码解析四:game界面刷新绘制流程及核心函数介绍
- jQuery.API源码深入剖析以及应用实现(1) - 核心函数篇
- jQuery-1.9.1源码分析系列(十六)ajax——ajax处理流程以及核心函数
- minetest源码解析五:IGameDef、ItemDefManager、NodeDefManager类介绍
- jQuery.API源码深入剖析以及应用实现(1) - 核心函数篇
- 第九节 java数组的介绍,数组定义,数组排序,Arrays类静态方法使用,以及源码解析
- jQuery-1.9.1源码分析系列(十六)ajax——ajax处理流程以及核心函数
- jQuery.API源码深入剖析以及应用实现(1) - 核心函数篇
- for_each,count,mismatch等STL算法在VS2013下的实现以及辅助函数的源码解析
- jQuery.API源码深入剖析以及应用实现(1) - 核心函数篇
- jdk源码解读-并发包-Lock-ReentrantReadWriteLock(1)-整体介绍以及读锁的lock 和 unlock 解析
- jQuery.API源码深入剖析以及应用实现(1) - 核心函数篇(1)
- java微信开发API解析(六)-综合运用(消息处理、自定义菜单响应处理、用户自动分组处理;包含源码)
- RocketMQ原理以及源码解析目录介绍
- 常用位运算函数源码解析
- android binder机制及其源码解析之第二节 重要函数讲解之常用数据结构(一)
- [转载]字节码问题--wchar和char的区别以及wchar和char之间的相互转换字符编码转换等方法及函数介绍
- Java Servlet工作流程以及源码解析