{"id":23,"date":"2008-06-22T15:59:52","date_gmt":"2008-06-22T14:59:52","guid":{"rendered":"http:\/\/blogs.igalia.com\/jfernandez\/2008\/06\/22\/what-could-we-do-with-clutter\/"},"modified":"2008-06-22T15:59:52","modified_gmt":"2008-06-22T14:59:52","slug":"what-could-we-do-with-clutter","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/jfernandez\/2008\/06\/22\/what-could-we-do-with-clutter\/","title":{"rendered":"What could we do with Clutter ?"},"content":{"rendered":"<div align=\"left\">These last months i&#8217;ve been working with <a target=\"_blank\" href=\"http:\/\/clutter-project.org\/\">Clutter<\/a> project as part our <em>GNOME R&amp;D<\/em> project. Firstly, for who don&#8217;t know what <em>Clutter<\/em> project exactly is, i would like to briefly introduce you this technology.The <em>Clutter<\/em> project has created an open source software library for creating fast, visually rich and animated graphical user interfaces. Clutter uses <a href=\"http:\/\/opengl.org\/\">OpenGL<\/a> (and optionally <a href=\"http:\/\/www.khronos.org\/opengles\/\">OpenGL ES<\/a> for use on <em>Mobile<\/em> and <em>embedded<\/em> platforms) for rendering but with an <em>API<\/em> which hides the underlying <em>GL <\/em>complexity from the developer.  The <em>Clutter<\/em> <em>API<\/em> is intended to be easy to use, efficient and flexible.<\/div>\n<p align=\"left\">Basically, <em>Clutter<\/em> provides a <em>Canvas<\/em> for drawing complex graphics and effects. This <em>Canvas<\/em> could be inserted inside a <em>Gtk<\/em> context, using the <em>Clutter-Gtk<\/em> library.<\/p>\n<p align=\"left\">The second part of my post will be focused on my work during last <em>R&amp;D<\/em> project iteration and what were my thoughts about this new and promising technology; there were several discussions in the gtk-devel list about the new <em>GTK 3.0 <\/em>evolution and what would be the role of <em>Clutter<\/em> project.<\/p>\n<p align=\"left\">The best way to understand a technology, after read carefully all related documentation, is to implement a proof of concept. For that purpose, i&#8217;ve chosen the <em>YouTube<\/em>\u00a0 client applications domain to develop new <em>UI<\/em> concepts, in order to test the powerful of <em>Clutter<\/em> as toolkit.<\/p>\n<p align=\"left\">The first thing i&#8217;ve realized when i read the <em>Clutter<\/em> project documentation is that <em>Clutter<\/em> is not actually a toolkit, as it&#8217;s mentioned in <em>Clutter<\/em> project web page. With my understanding of the toolkit concept, it should be a set of tools for implementing user interfaces. However, user interfaces are not only graphical elements, but window management, theming support, advanced graphical components, translation support, applets and icons management, shortcuts, toolbars and menus or similar ways of activating user actions, &#8230; In that sense, <em>Clutter<\/em> lacks of several important features required to be considered as UI toolkit. I think that, at least at this moment, <em>Clutter<\/em> could be just considered as a graphical engine or <strong>scene graph<\/strong> tool. This point was also mentioned by some people inside <em>gtk<\/em> developers community who are considering the approach of using <em>Clutter<\/em> as scene graph concept for the next <em>GTK 3.0.<\/em><\/p>\n<p align=\"left\">When finally i began to develop my test application i had assumed that it actually wont be a functional <em>YouTube<\/em> client application, just an user interface proof of concept. Who knows what will happen in future, but for this project i&#8217; ve focused the development in just one use case: querying for videos and show the results.\u00a0 For implementing the communication with <em>YouTube<\/em> web services i&#8217;ve found a very interesting implementation of <strong>YouTube GData API:<\/strong> <em>libgdata<\/em> and <em>libgdata-google<\/em>.These libraries, also used inside evolution-data-server as static libraries, are also provided as independent libraries, at least, in Ubuntu hardy. These libraries, implemented using a <strong>GLib GObject<\/strong> approach, provide Client access to <em>google POA<\/em> through <em>SOAP<\/em> interface.<\/p>\n<p align=\"left\">During the implementation of this <em>YouTube<\/em> client application i&#8217;ve implemented several UI for showing <em>YouTube<\/em> <em>top_rated<\/em> query results. The first approach was obviously a <em>GtkTreeView<\/em> view.<\/p>\n<p align=\"center\"><a class=\"imagelink\" title=\"screenshot-youtube-test.png\" href=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-youtube-test1.png\"><img loading=\"lazy\" decoding=\"async\" height=\"89\" width=\"117\" alt=\"screenshot-youtube-test.png\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-youtube-test1.thumbnail.png\" \/><\/a>\u00a0\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<a title=\"screenshot-clutter-ui.png\" class=\"imagelink\" href=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-clutter-ui1.png\"><img loading=\"lazy\" decoding=\"async\" height=\"96\" width=\"121\" alt=\"screenshot-clutter-ui.png\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-clutter-ui1.thumbnail.png\" \/><\/a><\/p>\n<p align=\"left\">The first and simpler clutter approach would be to show results in a square grid. I have to say that the square grid its also possible to implement in <em>Gtk<\/em>, although <em>Clutter<\/em> provides more fancy effects.<\/p>\n<p align=\"left\">After this first UI proposals, and after understanding better advanced operations with <em>Clutter<\/em>, i tried to define new ways of showing information, always thinking about how to improve the end user experience.<\/p>\n<p align=\"center\"><a title=\"screenshot-clutter-ui2.png\" class=\"imagelink\" href=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-clutter-ui21.png\"><img decoding=\"async\" alt=\"screenshot-clutter-ui2.png\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-clutter-ui21.thumbnail.png\" \/><\/a>\u00a0\u00a0 \u00a0\u00a0 \u00a0 \u00a0\u00a0<a title=\"screenshot-clutter-ui2-1.png\" class=\"imagelink\" href=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-clutter-ui2-11.png\"><img decoding=\"async\" alt=\"screenshot-clutter-ui2-1.png\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-clutter-ui2-11.thumbnail.png\" \/><\/a> \u00a0 \u00a0 \u00a0\u00a0 \u00a0\u00a0<a title=\"screenshot-clutter-ui3.png\" class=\"imagelink\" href=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-clutter-ui31.png\"><img decoding=\"async\" alt=\"screenshot-clutter-ui3.png\" src=\"http:\/\/blogs.igalia.com\/jfernandez\/files\/2008\/06\/screenshot-clutter-ui31.thumbnail.png\" \/><\/a><\/p>\n<p align=\"left\">\n<p align=\"left\">The most interesting questions i&#8217;ve made to myself at this point have not been about <em>Clutter<\/em> technology capabilities, but what new <em>UI<\/em> concepts we want to achieve. I think there are several graphic technologies today providing new ways of drawing user interfaces, the important point is to define precisely how to present information and services to end users in a more intuitive way.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>These last months i&#8217;ve been working with Clutter project as part our GNOME R&amp;D project. Firstly, for who don&#8217;t know what Clutter project exactly is, i would like to briefly introduce you this technology.The Clutter project has created an open source software library for creating fast, visually rich and animated graphical user interfaces. Clutter uses &hellip; <a href=\"https:\/\/blogs.igalia.com\/jfernandez\/2008\/06\/22\/what-could-we-do-with-clutter\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">What could we do with Clutter ?<\/span><\/a><\/p>\n","protected":false},"author":20,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8],"tags":[],"class_list":["post-23","post","type-post","status-publish","format-standard","hentry","category-gnome","category-mobile"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/comments?post=23"}],"version-history":[{"count":0,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/posts\/23\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/media?parent=23"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/categories?post=23"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/jfernandez\/wp-json\/wp\/v2\/tags?post=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}