chromium的UI架构

chromium UI大部分的代码基本上都集中在chrome/browser/ui目录,对应这chromium里面是browser_ui这个工程。这个目录下虽然有几千个文件,但是框架还是很清晰的,是个典型的MVC设计模式。根据文件名就知道哪些是modle,controller,view了,比如tab_strip_modle,bookmark_context_menu_controller,infobar_container_view。

最重要的类是Browser,它继承自content::WebContentsDelegate,代表这一个浏览器会话,可被视为一个modle,通过这个类可以得到浏览器的各种状态和动作逻辑。

Browser有个BrowserWindow类型的window_成员,window_就是代表的整个浏览器界面窗口,对应这MVC模型中的View。其实BrowserWindow只是一个接口,真正干活的类是BrowserView,它在chrome/browser/ui/views/frame目录下。BrowserView中各种view类型的成员就是对应这浏览器一个个可视的区域。下面这个字符画就描述各种view之间的父子包含关系。

chromium_ui20141126184031

view只是负责创建控件,UI的布局还是需要对应的LayoutManager类去实现。view中可以通过chrome::AddCommandObserver去添加观察者,把自己的事件通知给别人,也可以通过content::NotificationRegistrar去注册自己感兴趣的事件。各种controller就去调度对应的动作。比如ToolbarView就是通过BrowserCommandController去调用Browser里面的响应方法。

下面就是在toolbar上增加一个按钮,一点击这个按钮就会在浏览器的左侧显示一个侧边栏,再次点击就会隐藏侧边栏。

sidebar

《chromium的UI架构》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注