GTK+3.0终发布:诸多新特性亮相

导读:文章来自imtx.me,作者以生动、有趣、新颖的口吻给大家介绍了GTK+3.0的新特性;以下是全文:

关注已久的GTK+3.0终于发布了,真是等着让我脖子都掉下来了。没想到这么快两年了。如今它终于发布,不记录点文字还真是过不去,我就稍微详细地介绍下GTK+3.0吧。

GTK+3.0的发布公告在此:http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00020.html

针对其一些重大更新,我稍微做点扩展介绍。

完全Cairo绘制

既然是图形库,如何绘制图形当然是最重要点。请注意,GTK+3.0在这点上,并不是革新的,因为GTK+2.x即已经在绝大多数地方使用Cairo绘制了。

Cairo是什么?它是一个矢量的绘图库,Firefox使用Cairo进行网页的绘制和文字排版。

GTK+2.0的时候,还不依赖于Cairo,在Linux下,是标准的基于xlib建构的图形库。直到GTK+2.8,Cairo才开始作为GTK的重要绘图引擎,从来带来矢量、抗锯齿等特性。但是GTK+依然还有不少图形绘制方面的API及概念是基于X11的,这使得它的跨平台性真的不怎么样。

举一个简单的例子好了,GTK+带有Colormap的概念(来源X11),因为Linux图形环境的限制,默认只能使用RGB的colormap,导致要实现透明的效果(即RGBA)很麻烦,并且兼容性、跨平台性不佳。

但在3.0中,所有跟图形绘制相关的东西,已经全面转移向Cairo了。跨平台相关的代码,基本上都在事件、屏幕、拖曳等处理上了。现在,即使开发者拥有自绘的界面或控件,也能保证在各种平台下有一致的效果了!

更棒的是,由于绘图API的清理和统一,使得GTK+3.0能非常容易地支持除X11、Win32和Mac以外的后端,这就是下节要讲的:

更灵活、更强大的平台扩展支持

前面说到了,GTK+3.0的完全Cairo支持让它的跨平台性更好了。除此之外,还有“平台扩展”能力的大福提升。什么是“平台扩展”能力?对,得益于全新的架构,只需要实现一个后端,GTK+便能以HTML5的姿态显示出来。

与其同时,GTK+的Wayland后端也在积极开发当中,基本上能在Wayland正式发布时,也有一个标准的GTK+可以使用。因此当前,GTK+一共有:X11、Win32、Mac(Quartz)、HTML5和Wayland这五个后端。用GTK+写软件,可以跑在这五个平台上!

另外,GTK+3.0还支持多后端功能,即在一个库里面内置不同的后端,在运行时而非编译时选择具体的后端。这对Linux图形从X11向Wayland发展有着非常重要的意义。

还是举一个例子:

熟悉Qt开发朋友应该知道,Qt有一个专门面向嵌入式的版本,叫Qte。但是一个Qt软件,必须在编译时确定它的链接库是Qt还是Qte,如果它要跑在Qte下,必须重新编使其链接至Qte。

但是GTK+3.0就不需要!多后端功能使GTK+可以动态的装载其后端。比如用户的电脑上同时有Wayland和X11环境,那么在有Wayland的情况下,GTK应用程序可以以Wayland的形态呈现出来,在没Wayland有X11的情况下,它便可以以X11应用程序呈现出来。这样同时照顾到了使用经典X11的用户和使用Wayland新桌面的用户,协助Linux桌面的逐步进化……

支持CSS的主题API

GTK+虽然拥有无数的第三方主题,但鲜有让人眼前一亮的。倒不是说缺少漂亮的设计,而是它的主题API不好,语法难懂、文档缺失,即使有好的设计,也不一定能实现出来。现在终于可以跟过去说再见了。

GTK+正式支持了CSS式的主题文件,还支持简单的动画属性——好歹是CSS3.0了吧。之前的束缚已经没有了,稍微有点设计/前端经验的人,都可以简单地制作出GTK+的主题了。接下来就让我们期待有一个漂亮、精致的主题出现吧!

多点设备的支持

2011年了,到处都是支持多点的触摸屏了。GTK+也不能在这方面落后啊。通过对Xinput2.0的支持,GTK+也支持多点了。这个多点可以是多个鼠标、多个键盘或者其他,总之是:多个输入设备。

前段日子不是听到出Ubuntu平板电脑的新闻了吗?有GTK+3.0的话,应该会更给力的!

更多Widgets、更棒的App API

前面说的都是基础设施的改进,那么在应用层,GTK+有什么变动?

首先是加入了更多的常用的Widget,如Switch(开关)、Grid(网格布局)等,另外还引入了GtkApplication这个类,想要实现一个应用程序+多窗口,或者单实例等等,就变得非常方便了。

GTK周边:Glib和GObject Introspection

GTK+不是一个独立的个体,它丰富的周边让它增色不少。比如它所依赖的GLib库,GLib是一个功能非常丰富的C库,在最新版本中,它引入了全新的GSettings用于取代速度很慢的GConf。GSettings在不同的平台有不同的实现,提供统一的API供开发者使用,不像GConf,跨平台不好。

在Win32下,GSettings写注册表,在Linux下,GSettings的实现是dconf,一个存取非常之快的配置中心。以前GNOME桌面有两个比较明显的缺点,一个是加载慢(GConf的初始化和读取设取影响很大),其二是应用程序跨平台不容易,尽管也是GTK+编写,但依赖于GConf的原因,让移植变得困难。现在GSettings一并解决了这些问题。

其次,还有GObject Introspection,它让GTK+的语言扩展能力尽乎无限。以前,除了GTK+、GTKMM(C++)以外,还有一些动态语言的绑定,如Pygtk、perl-gtk。但这些实现是各种独立的,维护成本非常高。

但是GObject Introspection实现了GObject对象的统一调用,这意味着各种语言只要实现一个GObject Introspection的包装,什么GTK+的API,都可以通过它来调用了。就像在Python里用ctype一样,但是通过GI技术,能像使用原生API一样来使用这些C库。

目前为止,对GI支持比较好的已经有Python、JavaScript了。GNOME3.0的重要组件——GNOME Shell即是使用了JavaScript来实现其UI逻辑部分。

总结

虽然让人等了很久,但是GTK+显然很好地完成了一次平台清理和新特性的加入,可贵的是它依然保持了细小的个头,将能在移动或嵌入式领域发挥重要作用。

此外,自身架构的改变让它可以继续不断地进化,让Linux桌面变得更好!

接下来,就看GTK+3.0在GNOME3.0和实践生产中发挥作用吧!

原文链接:http://imtx.me/archives/1600.html

时间: 2024-09-30 04:39:42

GTK+3.0终发布:诸多新特性亮相的相关文章

hibernate 3 和hibernate 4 的区别,4.0以上版本加入哪些新特性,有什么优势?

问题描述 hibernate 3 和hibernate 4 的区别,4.0以上版本加入哪些新特性,有什么优势? hibernate 3.6.10.Final 和 hibernate 4.3.8.Final 的区别, 解决方案 http://blog.csdn.net/iaiti/article/details/9336703 解决方案二: http://blog.sina.com.cn/s/blog_3e20fc040100yhzq.html

Android5.0中Material Design的新特性_Android

 Material Design简介 Material Design是谷歌新的设计语言,谷歌希望寄由此来统一各种平台上的用户体验,Material Design的特点是干净的排版和简单的布局,以此来突出内容. Material Design对排版.材质.配色.光效.间距.文字大小.交互方式.动画轨迹都做出了建议,以帮助设计者设计出符合Material Design风格的应用. Material Design设计语言鼓励大家使用充满活力的鲜艳色彩,并在同一界面建议使用三种色调,并保障有一个强色调,

Android5.0中Material Design的新特性

Material Design简介 Material Design是谷歌新的设计语言,谷歌希望寄由此来统一各种平台上的用户体验,Material Design的特点是干净的排版和简单的布局,以此来突出内容. Material Design对排版.材质.配色.光效.间距.文字大小.交互方式.动画轨迹都做出了建议,以帮助设计者设计出符合Material Design风格的应用. Material Design设计语言鼓励大家使用充满活力的鲜艳色彩,并在同一界面建议使用三种色调,并保障有一个强色调,强

GTK+ 3.0.9发布 具有OO特色的C语言开发框架

GTK+采用具有OO特色的C语言http://www.aliyun.com/zixun/aggregation/13435.html">开发框架,这使它在开发GUI应用程序能和操作系统紧密结合,同时具有很大简洁性,其中的很多代码只要简单的复制和更改即可完成,只用一个C源代码文件就可以创建一个LINUX下的GUI程序. GNOME Desktop 用GTK++写的HelloWorld 下面的代码是笔者用GTK+编写的一个HelloWorld例程,编译后运行显示一个带按钮的窗口,点击按钮会弹出

Swift 2.0初探: 值得注意的新特性

转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上Apple发布了Swift 2.0,引入了很多新的特性,以帮助开发者能更快,更简单的构建应用.我在这里也说道说道Swift 2.0中值得大家注意的新特性. guard语句 guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么.但与if语句不同的是,guard语句只会

模块化设计:官方最新发布Java 9新特性

Java 9正在紧锣密鼓的开发中,新一代的Java采用了模块化的设计.Java SE 9准备要发布Jigsaw项目及其他五项提案(以前称为JSR,现在称为Java增强提案或者简称为JEP).虽然并未给出发布日期,但这是官方首次发布OpenJDK 9和Java SE 9的特性. 本版本的一项主要内容就是实现JDK源码的模块化.以前称之为Jigsaw项目,JEP 201把它从Java 8推后了,因为从各种Java组件间解耦需要大量的工作量. 除了模块化源码之外,Oracle宣布在Java的下一个版本

J2SE5.0中最有趣的新特性:注释(annotation)

本文为原创,如需转载,请注明作者和出处,谢谢! 本文曾发表于IT168:http://tech.it168.com/j/e/2006-09-29/200609291054707.shtml     本文将向你介绍J2SE5.0中的新特性之一:注释.本文将从什么是注释:J2SE5.0中预定义的注释:如何自定义注释:如何对注释进行注释以及如何在程序中读取注释5个方面进行讨论. 一.什么是注释     说起注释,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描

Node.js v8.0.0 带来了哪些主要新特性

Node.js于5月30号在其官方博客上发布了Node.js v8.0.0.这一版本将成为当前的长期维护版本,从2017年10月开始到2019年12月31号.而Node.js v6.0.0将会在2018年4月进入维护模式,并于2019年4月结束. 最新发布的版本代号为Carbon,带来了很多重要的特性改进和一些全新的特性. 引入async_hooks模块新引入实验性模块async_hooks(之前叫作async_wrap),它包含了一组用于诊断的API,开发人员可以用它监控Node.js事件循环

Flash8.0专业版及播放器新特性

相关文章: Dreamweaver 8 新功能简介 Fireworks 8 新功能简介 Macromedia Studio 8开始网上预订送背包 Flash 8.0 分为两个版 Flash Professional 8 和 Flash Basic 8,之前我们所猜测的 Flash MX 2006 是不存在的. Flash Prefessional 8 1,滤镜效果 Flash Professional 8 滤镜可以让你给影片剪辑(MovieClip)添加特殊效果,例如阴影,模糊等等(滤镜同样可以