Webkit自带谷歌浏览器实例分析(2)

news/2024/5/18 23:54:26 标签: webkit, 浏览器, gtk, signal, callback, browser

webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">

Webkit自带谷歌浏览器实例分析(2) 收藏

作者:水木杨

     上篇说到,咱们把main函数走了一遍了,是不是可以写个基于webkit简单的浏览器了呢?

非也,,,其实即便是这么简单的浏览器,代码也还没完。Main函数只是整个程序的一个入口而已,也就是说只是个门口,,,~~~~(>_<)~~~~ 好辛苦啊……里边东西多着哩!

还有三个创建整个浏览器界面的函数,不过我认为对了解Gtk的人来说应该不是很麻烦,只是核心部分是与webkit的接口,是不是还是像上节那样一直挖下去呢?快来看看吧~

还是先找重点的那三个函数。。。

/*严格来说这个例子很懒,直接定义在main函数之前了,有点乱是不*/

static GtkWidget* create_toolbar (){} /*返回个工具栏,,,有点废话哈~*/

static GtkWidget* create_browser (){}/*返回个browser,,,依然废话哈~,这个browser是什么哇?有点犯嘀咕*/

static GtkWidget* create_statusbar (){}  /*这个好理解多了*/

 

/*Come on baby!创建工具栏*/

static GtkWidget*

create_toolbar ()

{

    GtkWidget* toolbar = gtk_toolbar_new (); /*创建一个工具栏部件*/

 

#if GTK_CHECK_VERSION(2,15,0) /*检查GTK+的版本,版本要比括号中的新才好*/

    gtk_orientable_set_orientation (GTK_ORIENTABLE (toolbar), GTK_ORIENTATION_HORIZONTAL);

#else

    gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar),

/*设置工具箱是水平显示还是垂直显示*/ GTK_ORIENTATION_HORIZONTAL);

#endif

    /*设置toolbar风格GTK_TOOLBAR_BOTH_HORIZ 是自定义的*/

    gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH_HORIZ);

 

    GtkToolItem* item; /*新建一个小家伙,准备暂存工具栏的控件*/

 

    /* 后退按钮下边红色部分函数是从储存库中得到GTK_STOCK_GO_BACK图标*/

    item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);

 

/*将信号clickitem部件绑定,点击按钮时候调用go_back_cb null是要传给回调函数的参数,这里为空。一会再分析回调函数,回调函数一般cb结尾*/

    g_signal_connect (G_OBJECT (item), "clicked", G_CALLBACK (go_back_cb), NULL);

    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);/*1表示从工具栏的最后第一个位置追加*/

 

    /* 前进按钮,同上,就不罗嗦了 */

    item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD);

    g_signal_connect (G_OBJECT (item), "clicked", G_CALLBACK (go_forward_cb), NULL);

    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);/*追加到最后一个*/

 

    /* 地址输入栏,,,注意了啊,含金量的地方!O(_)O */

    item = gtk_tool_item_new ();

    gtk_tool_item_set_expand (item, TRUE);/*item放大占据额外的控件*/

    uri_entry = gtk_entry_new ();/*创建一个网址输入框直接加到工具栏可否?*/

    gtk_container_add (GTK_CONTAINER (item), uri_entry);/*放到item中去*/

    g_signal_connect (G_OBJECT (uri_entry), "activate", G_CALLBACK (activate_uri_entry_cb), NULL);

    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);

 

    /* The go button */

    item = gtk_tool_button_new_from_stock (GTK_STOCK_OK);

 

       /* g_signal_connect_swapped g_signal_connect 意思一样,只不过前者的回调函数有一个参数,也就是g_signal_connect_swapped的第四个参数,这次非空了噶 */

    g_signal_connect_swapped (G_OBJECT (item), "clicked", G_CALLBACK (activate_uri_entry_cb), (gpointer)uri_entry);

    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);

 

    return toolbar;

}/*工具栏创建完毕,,,先把这三个函数看完,待会去看回调函数去*/

 

 

 

/*创建browser,何为browser,,,我也不知道,不过一会就知道了*/

static GtkWidget*

create_browser ()

{   /*先创建一个带滚动条的滚动窗,原来如此,滚动条是滚动窗的一部分啊*/

    GtkWidget* scrolled_window = gtk_scrolled_window_new (NULL, NULL);

/*为滚动条设置一个方针,GTK_POLICY_AUTOMATIC 意思是需要时候才显示*/

    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

/*这个是全局变量,相当于一个view就是(标题栏+页面)视图,然后放入滚动窗*/

    web_view = WEBKIT_WEB_VIEW (webkit_web_view_new ());

    gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (web_view));

 

g_signal_connect (web_view, "title-changed", G_CALLBACK (title_change_cb), web_view);/* title-changed信号与web_view绑定.时间发生调用title_change_cb回调函数改变标题*/

    g_signal_connect (web_view, "notify::load-status", G_CALLBACK (notify_load_status_cb), web_view);/*加载状态*/

    g_signal_connect (web_view, "notify::progress", G_CALLBACK (notify_progress_cb), web_view);/*加载进度*/

    g_signal_connect (web_view, "hovering-over-link", G_CALLBACK (link_hover_cb), web_view);

 

    return scrolled_window;

} /*至此带滚动条的窗口创建完毕,,,回调函数与信号回头一起研究*/

 

 

static GtkWidget*

create_statusbar ()

{

    main_statusbar = GTK_STATUSBAR (gtk_statusbar_new ());

    status_context_id = gtk_statusbar_get_context_id (main_statusbar, "Link Hover");

 

    return (GtkWidget*)main_statusbar;

}/*创建状态栏*/

 

/*下面该创建个东西放这三个:工具栏、状态栏、browser了,创建mainwindow*/

static GtkWidget*

create_window ()

{

        /*创建一个主窗口*/

    GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    /*设置默认大小*/

    gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);

    gtk_widget_set_name (window, "GtkLauncher");/*设置窗口名字*/

   

    /*绑定销毁回调函数,一般来说都会有这个函数的*/

    g_signal_connect (window, "destroy", G_CALLBACK (destroy_cb), NULL);

 

    return window;

}/*主窗口创建完毕*/

目前为止,整个程序基本上走完了一遍,程序的第二个层次也已分析完毕,,,剩下的回调函数部分是与webkit接触最为紧密的一部分,且听下回细细道来

发表于 @ 2011年04月19日 10:34:00 | 评论( 0 ) | 举报| 收藏


http://www.niftyadmin.cn/n/1748268.html

相关文章

git log

git log --graph --oneline

Webkit自带谷歌浏览器实例分析(3)

Webkit自带谷歌浏览器实例分析&#xff08;3&#xff09; 收藏 第二节我们几个重要函数的实现涉及到的回调函数都没有过多的解释&#xff0c;是因为我想单独的拿出来品味&#xff0c;慢慢享用。/*这是上边用到的几个全局变量*/ static GtkWidget* main_window; static GtkWidge…

Opencv2.4.9安装和在visualstudio 2013中配置

Opencv2.4.9安装和在visualstudio 2013中配置 下载opencv和在windows下安装&#xff1a; 最新版本号的opencv是2014.4.25的opencv2.4.9&#xff0c;这里选择当前最新版本号。点击opencv for windows就可以下载。 下载完毕后。双击图标 会出现以下的提示框 选择你要将opencv保存…

GTK+中工具栏(Toolbar)使用说明

GTK中工具栏&#xff08;Toolbar&#xff09;使用说明 2008-12-2 13:40|查看数: 1184 工具栏(Toolbars)常用来将一些构件分组&#xff0c;这样能够简化定制它们的外观和布局。典型情况下工具栏由带图标和标签以及工具提示的按钮组成&#xff0c;不过&#xff0c;其它构件也可以…

maven搭建

http://blog.csdn.net/zhshulin/article/details/30779873 http://blog.csdn.net/zhshulin/article/details/37921705 改自己的settings.xml的国内镜像 <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http:…

利用udev在/dev下动态生成/移除设备文件

udev 2007年09月26日 星期三 20:26问题: 在sbc-2410x开发板上插入U盘&#xff0c;在/dev/下无法找到相应的设备文件。利用udev在/dev下动态生成/移除设备文件----------------------------------------- udev是硬件平台无关的&#xff0c;属于user space的进程&#xff0c;它…

CMD模块打包部署总结

目前线上系统利用Seajs做模板化&#xff0c;但是没有对js和css进行打包&#xff0c;在这次简历搜索优化项目里我尝试对gulp插件对Seajs模块打包。 安装gulp和相关插件 npm install -g gulp npm install —-save-dev gulp cmd打包的插件:gulp-cmd gulp-cmd可以解析seajs.config中…

FreeBSD编译内核详解

我所用的FreeBSD是5.2.1版,现在是比较新的了,我一看我的内核文件大小:# ls -l /boot/kernel/kernel  -r-xr-xr-x 1 root wheel 5940286 Feb 24 2004 /boot/kernel.bak/kernel看来不小呀&#xff0c;5M多&#xff0c;呵呵&#xff0c;我要把它编成 3M左右,呵呵&#xff0c;beg…