cheese r394 - in trunk: . data data/pixmaps src



Author: dgsiegel
Date: Mon Jan 14 14:28:40 2008
New Revision: 394
URL: http://svn.gnome.org/viewvc/cheese?rev=394&view=rev

Log:
add the stylish countdown widget by Mirco "MacSlow" MÃller. the patch was provided by Patryk Zawadzki


Added:
   trunk/data/pixmaps/camera-icon.svg
   trunk/src/cheese-countdown.c
   trunk/src/cheese-countdown.h
Modified:
   trunk/ChangeLog
   trunk/configure.ac
   trunk/data/cheese.glade
   trunk/data/pixmaps/Makefile.am
   trunk/data/wscript_build
   trunk/src/Makefile.am
   trunk/src/cheese-window.c
   trunk/src/wscript_build
   trunk/wscript

Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac	(original)
+++ trunk/configure.ac	Mon Jan 14 14:28:40 2008
@@ -46,6 +46,8 @@
 DBUS_REQUIRED=1.0
 HAL_REQUIRED=0.5.9
 DBUS_GLIB_REQUIRED=0.7
+LIBRSVG_REQUIRED=2.18.0
+PANGOCAIRO_REQUIRED=1.18.0
 
 PKG_CHECK_MODULES(CHEESE, \ 
   glib-2.0 >= $GLIB_REQUIRED \
@@ -61,6 +63,8 @@
   dbus-1 >= $DBUS_REQUIRED \
   hal >= $HAL_REQUIRED \
   dbus-glib-1 >= $DBUS_GLIB_REQUIRED \
+  pangocairo >= $PANGOCAIRO_REQUIRED \
+  librsvg-2.0 >= $LIBRSVG_REQUIRED \
   xxf86vm)
 
 AC_SUBST(CHEESE_CFLAGS)

Modified: trunk/data/cheese.glade
==============================================================================
--- trunk/data/cheese.glade	(original)
+++ trunk/data/cheese.glade	Mon Jan 14 14:28:40 2008
@@ -85,216 +85,248 @@
               </widget>
             </child>
             <child>
-              <widget class="GtkHBox" id="hbox1">
+              <widget class="GtkNotebook" id="notebook_bar">
                 <property name="visible">True</property>
+                <property name="can_focus">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="homogeneous">True</property>
+                <property name="show_tabs">False</property>
+                <property name="show_border">False</property>
                 <child>
-                  <widget class="GtkAlignment" id="alignment3">
+                  <widget class="GtkHBox" id="hbox1">
                     <property name="visible">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="homogeneous">True</property>
                     <child>
-                      <widget class="GtkHBox" id="hbox2">
+                      <widget class="GtkAlignment" id="alignment3">
                         <property name="visible">True</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <child>
-                          <widget class="GtkToggleButton" id="button_photo">
+                          <widget class="GtkHBox" id="hbox2">
                             <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="response_id">0</property>
                             <child>
-                              <widget class="GtkAlignment" id="alignment4">
+                              <widget class="GtkToggleButton" id="button_photo">
                                 <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="response_id">0</property>
                                 <child>
-                                  <widget class="GtkHBox" id="hbox5">
+                                  <widget class="GtkAlignment" id="alignment4">
                                     <property name="visible">True</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="homogeneous">True</property>
-                                    <child>
-                                      <widget class="GtkImage" id="image4">
-                                        <property name="visible">True</property>
-                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <property name="icon_name">camera-photo</property>
-                                      </widget>
-                                    </child>
                                     <child>
-                                      <widget class="GtkLabel" id="label_photo">
+                                      <widget class="GtkHBox" id="hbox5">
                                         <property name="visible">True</property>
                                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <property name="label" translatable="yes">_Photo</property>
-                                        <property name="use_markup">True</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="mnemonic_widget">button_photo</property>
+                                        <property name="homogeneous">True</property>
+                                        <child>
+                                          <widget class="GtkImage" id="image4">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="icon_name">camera-photo</property>
+                                          </widget>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkLabel" id="label_photo">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="label" translatable="yes">_Photo</property>
+                                            <property name="use_markup">True</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="mnemonic_widget">button_photo</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
                                       </widget>
-                                      <packing>
-                                        <property name="position">1</property>
-                                      </packing>
                                     </child>
                                   </widget>
                                 </child>
                               </widget>
                             </child>
-                          </widget>
-                        </child>
-                        <child>
-                          <widget class="GtkToggleButton" id="button_video">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="response_id">0</property>
                             <child>
-                              <widget class="GtkAlignment" id="alignment5">
+                              <widget class="GtkToggleButton" id="button_video">
                                 <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="response_id">0</property>
                                 <child>
-                                  <widget class="GtkHBox" id="hbox6">
+                                  <widget class="GtkAlignment" id="alignment5">
                                     <property name="visible">True</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="homogeneous">True</property>
                                     <child>
-                                      <widget class="GtkImage" id="image5">
+                                      <widget class="GtkHBox" id="hbox6">
                                         <property name="visible">True</property>
                                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <property name="icon_name">camera-video</property>
+                                        <property name="homogeneous">True</property>
+                                        <child>
+                                          <widget class="GtkImage" id="image5">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="icon_name">camera-video</property>
+                                          </widget>
+                                        </child>
+                                        <child>
+                                          <widget class="GtkLabel" id="label_video">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="label" translatable="yes">_Video</property>
+                                            <property name="use_markup">True</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="mnemonic_widget">button_video</property>
+                                          </widget>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
                                       </widget>
                                     </child>
-                                    <child>
-                                      <widget class="GtkLabel" id="label_video">
-                                        <property name="visible">True</property>
-                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <property name="label" translatable="yes">_Video</property>
-                                        <property name="use_markup">True</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="mnemonic_widget">button_video</property>
-                                      </widget>
-                                      <packing>
-                                        <property name="position">1</property>
-                                      </packing>
-                                    </child>
                                   </widget>
                                 </child>
                               </widget>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
                             </child>
                           </widget>
-                          <packing>
-                            <property name="position">1</property>
-                          </packing>
                         </child>
                       </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                      </packing>
                     </child>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="GtkButton" id="take_picture">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="response_id">0</property>
                     <child>
-                      <widget class="GtkAlignment" id="alignment1">
+                      <widget class="GtkButton" id="take_picture">
                         <property name="visible">True</property>
-                        <property name="xscale">0</property>
-                        <property name="yscale">0</property>
+                        <property name="can_focus">True</property>
+                        <property name="response_id">0</property>
                         <child>
-                          <widget class="GtkHBox" id="hbox3">
+                          <widget class="GtkAlignment" id="alignment1">
                             <property name="visible">True</property>
-                            <property name="spacing">2</property>
+                            <property name="xscale">0</property>
+                            <property name="yscale">0</property>
                             <child>
-                              <widget class="GtkImage" id="image_take_photo">
+                              <widget class="GtkHBox" id="hbox3">
                                 <property name="visible">True</property>
-                                <property name="stock">gtk-media-record</property>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <widget class="GtkLabel" id="label_take_photo">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">_Take a photo</property>
-                                <property name="use_markup">True</property>
-                                <property name="use_underline">True</property>
-                                <property name="mnemonic_widget">take_picture</property>
+                                <property name="spacing">2</property>
+                                <child>
+                                  <widget class="GtkImage" id="image_take_photo">
+                                    <property name="visible">True</property>
+                                    <property name="stock">gtk-media-record</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkLabel" id="label_take_photo">
+                                    <property name="visible">True</property>
+                                    <property name="label" translatable="yes">_Take a photo</property>
+                                    <property name="use_markup">True</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="mnemonic_widget">take_picture</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
                               </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
                             </child>
                           </widget>
                         </child>
                       </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="padding">16</property>
+                        <property name="position">1</property>
+                      </packing>
                     </child>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="padding">16</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="GtkButton" id="button_effects">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="response_id">0</property>
                     <child>
-                      <widget class="GtkAlignment" id="alignment2">
+                      <widget class="GtkButton" id="button_effects">
                         <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="response_id">0</property>
                         <child>
-                          <widget class="GtkHBox" id="hbox4">
+                          <widget class="GtkAlignment" id="alignment2">
                             <property name="visible">True</property>
                             <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="spacing">2</property>
                             <child>
-                              <widget class="GtkImage" id="image2">
+                              <widget class="GtkHBox" id="hbox4">
                                 <property name="visible">True</property>
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="icon_name">applications-graphics</property>
+                                <property name="spacing">2</property>
+                                <child>
+                                  <widget class="GtkImage" id="image2">
+                                    <property name="visible">True</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <property name="icon_name">applications-graphics</property>
+                                  </widget>
+                                </child>
+                                <child>
+                                  <widget class="GtkLabel" id="label_effects">
+                                    <property name="visible">True</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <property name="label" translatable="yes">_Effects</property>
+                                    <property name="use_markup">True</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="mnemonic_widget">button_effects</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
                               </widget>
                             </child>
-                            <child>
-                              <widget class="GtkLabel" id="label_effects">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="label" translatable="yes">_Effects</property>
-                                <property name="use_markup">True</property>
-                                <property name="use_underline">True</property>
-                                <property name="mnemonic_widget">button_effects</property>
-                              </widget>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
                           </widget>
                         </child>
                       </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="padding">40</property>
+                        <property name="pack_type">GTK_PACK_END</property>
+                        <property name="position">2</property>
+                      </packing>
                     </child>
                   </widget>
+                </child>
+                <child>
+                  <placeholder/>
+                  <packing>
+                    <property name="type">tab</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkAlignment" id="countdown_frame">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder/>
                   <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="padding">40</property>
-                    <property name="pack_type">GTK_PACK_END</property>
-                    <property name="position">2</property>
+                    <property name="type">tab</property>
                   </packing>
                 </child>
               </widget>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
-                <property name="padding">3</property>
                 <property name="position">1</property>
               </packing>
             </child>

Modified: trunk/data/pixmaps/Makefile.am
==============================================================================
--- trunk/data/pixmaps/Makefile.am	(original)
+++ trunk/data/pixmaps/Makefile.am	Mon Jan 14 14:28:40 2008
@@ -1,7 +1,8 @@
 Pixmapsdir = $(datadir)/cheese/pixmaps
 
 Pixmaps_DATA =			\
-	thumbnail-frame.png
+	thumbnail-frame.png \
+	camera-icon.svg
 
 EXTRA_DIST =			\
 	$(Pixmaps_DATA)

Added: trunk/data/pixmaps/camera-icon.svg
==============================================================================
--- (empty file)
+++ trunk/data/pixmaps/camera-icon.svg	Mon Jan 14 14:28:40 2008
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://web.resource.org/cc/";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   version="1.0"
+   width="30"
+   height="30"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docname="camera-icon.svg"
+   sodipodi:docbase="/home/users/patrys/Desktop/lab/cheese/data/pixmaps"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata23">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     inkscape:window-height="620"
+     inkscape:window-width="872"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     width="30px"
+     height="30px"
+     inkscape:zoom="6.7833333"
+     inkscape:cx="30"
+     inkscape:cy="12.309582"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:current-layer="svg2" />
+  <defs
+     id="defs4">
+    <filter
+       x="-0.1545473"
+       width="1.3090945"
+       y="-0.09807618"
+       height="1.1961524"
+       id="filter3168">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.37089844"
+         id="feGaussianBlur3170" />
+    </filter>
+    <filter
+       x="-0.15620252"
+       width="1.3124051"
+       y="-0.09742105"
+       height="1.1948421"
+       id="filter3172">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.36152344"
+         id="feGaussianBlur3174" />
+    </filter>
+    <filter
+       x="-0.1607649"
+       width="1.3215297"
+       y="-0.095726728"
+       height="1.1914535"
+       id="filter3176">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.34892578"
+         id="feGaussianBlur3178" />
+    </filter>
+    <filter
+       x="-0.21608295"
+       width="1.4321659"
+       y="-0.15424342"
+       height="1.3084868"
+       id="filter4158">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.5723877"
+         id="feGaussianBlur4160" />
+    </filter>
+    <filter
+       x="-0.21392"
+       width="1.42784"
+       y="-0.15536475"
+       height="1.3107295"
+       id="filter4162">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.58754883"
+         id="feGaussianBlur4164" />
+    </filter>
+    <filter
+       x="-0.21760684"
+       width="1.4352137"
+       y="-0.15347622"
+       height="1.3069524"
+       id="filter4166">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.55942383"
+         id="feGaussianBlur4168" />
+    </filter>
+  </defs>
+  <g
+     style="display:inline"
+     id="layer3"
+     transform="matrix(0.4962866,0,0,0.4962866,0.1114021,0.1114022)">
+    <g
+       style="opacity:1;fill:#ffffff;fill-opacity:1;display:inline"
+       id="g2183">
+      <g
+         style="fill:#ffffff;fill-opacity:1"
+         id="g2185">
+        <rect
+           width="32.623775"
+           height="5.6962147"
+           rx="2.2113023"
+           ry="2.2113023"
+           x="13.688112"
+           y="8.6353283"
+           style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect2187" />
+        <path
+           d="M 4.0940897,11.993542 C 2.564051,11.993542 1.3498196,13.244365 1.3498196,14.774403 L 1.3498196,48.583811 C 1.3498196,50.113849 2.564051,51.364671 4.0940897,51.364671 L 55.90591,51.364671 C 57.435948,51.364671 58.65018,50.113849 58.65018,48.583811 L 58.65018,14.774403 C 58.65018,13.244365 57.435948,11.993542 55.90591,11.993542 L 4.0940897,11.993542 z M 30,15.469618 C 38.950294,15.469618 46.209489,22.728813 46.209489,31.679107 C 46.20949,40.6294 38.950294,47.888596 30,47.888596 C 21.049708,47.888596 13.790511,40.6294 13.790511,31.679107 C 13.790511,22.728813 21.049706,15.469618 30,15.469618 z "
+           style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path2189" />
+        <path
+           d="M 46.06637,34.20763 C 46.068254,40.635655 40.857839,45.847598 34.429814,45.847598 C 28.001788,45.847598 22.791373,40.635655 22.793257,34.20763 C 22.791373,27.779605 28.001788,22.567662 34.429814,22.567662 C 40.857839,22.567662 46.068254,27.779605 46.06637,34.20763 L 46.06637,34.20763 z "
+           transform="matrix(0.9038829,0,0,0.9038829,-1.1205199,0.7594145)"
+           style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path2191" />
+      </g>
+    </g>
+  </g>
+</svg>

Modified: trunk/data/wscript_build
==============================================================================
--- trunk/data/wscript_build	(original)
+++ trunk/data/wscript_build	Mon Jan 14 14:28:40 2008
@@ -30,7 +30,7 @@
 
 # data/effects
 install_files('PACKAGE_DATADIR', 'effects', 'effects/*.png')
-install_files('PACKAGE_DATADIR', 'pixmaps', 'pixmaps/thumbnail-frame.png')
+install_files('PACKAGE_DATADIR', 'pixmaps', 'pixmaps/*.png')
 
 # data/icons
 for i in ["16x16", "22x22", "24x24", "32x32", "48x48"]:

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Mon Jan 14 14:28:40 2008
@@ -12,6 +12,8 @@
 
 cheese_SOURCES = \
 	cheese.c \
+	cheese-countdown.c \
+	cheese-countdown.h \
 	cheese-effect-chooser.c \
 	cheese-effect-chooser.h \
 	cheese-fileutil.c \

Added: trunk/src/cheese-countdown.c
==============================================================================
--- (empty file)
+++ trunk/src/cheese-countdown.c	Mon Jan 14 14:28:40 2008
@@ -0,0 +1,375 @@
+/*
+ * Copyright (C) 2008 Mirco "MacSlow" MÃller <macslow bangang de>
+ * Copyright (C) 2008 daniel g. siegel <dgsiegel gmail com>
+ * Copyright (C) 2008 Patryk Zawadzki <patrys pld-linux org>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <cheese-config.h>
+#endif
+
+#include <stdlib.h>
+#include <gtk/gtk.h>
+#include <librsvg/rsvg.h>
+#include <librsvg/rsvg-cairo.h>
+
+#include "cheese-countdown.h"
+
+#define R 0
+#define G 1
+#define B 2
+#define A 3
+
+#define CHEESE_COUNTDOWN_GET_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), CHEESE_TYPE_COUNTDOWN, CheeseCountdownPrivate))
+
+G_DEFINE_TYPE (CheeseCountdown, cheese_countdown, GTK_TYPE_DRAWING_AREA);
+
+#define STATE_OFF   0
+#define STATE_3     1
+#define STATE_2     2
+#define STATE_1     3
+#define STATE_SMILE 4
+
+typedef struct
+{
+  gint iState;
+  cairo_surface_t* pSurface;
+  t_cheese_countdown_cb callback;
+  gpointer callback_data;
+} CheeseCountdownPrivate;
+
+static gint
+do_text (cairo_t*    pContext,
+         gchar*      pcText,
+         gint        iFontSize,
+         gchar*      pcFontFamily,
+         PangoWeight fontWeight,
+         PangoStyle  fontStyle)
+{
+  PangoFontDescription* pDesc       = NULL;
+  PangoLayout*          pLayout     = NULL;
+  GString*              pTextString = NULL;
+  PangoRectangle        logicalRect;
+  gint                  iAdvanceWidth;
+
+  /* setup a new pango-layout based on the source-context */
+  pLayout = pango_cairo_create_layout (pContext);
+  if (!pLayout)
+  {
+    g_print ("do_text(): ");
+    g_print ("Could not create pango-layout!\n");
+    return 0;
+  }
+
+  /* get a new pango-description */
+  pDesc = pango_font_description_new ();
+  if (!pDesc)
+  {
+    g_print ("do_text(): ");
+    g_print ("Could not create pango-font-description!\n");
+    g_object_unref (pLayout);
+    return 0;
+  }
+
+  /* set some desired font-attributes */
+  pango_font_description_set_absolute_size (pDesc, iFontSize);
+  pango_font_description_set_family_static (pDesc, pcFontFamily);
+  pango_font_description_set_weight (pDesc, fontWeight);
+  pango_font_description_set_style (pDesc, fontStyle);
+  pango_layout_set_font_description (pLayout, pDesc);
+  pango_font_description_free (pDesc);
+
+  /* get buffer to hold string */
+  pTextString = g_string_new (NULL);
+  if (!pTextString)
+  {
+    g_print ("do_text(): ");
+    g_print ("Could not create string-buffer!\n");
+    g_object_unref (pLayout);
+    return 0;
+  }
+
+  /* print and layout string (pango-wise) */
+  g_string_printf (pTextString, pcText);
+  pango_layout_set_text (pLayout, pTextString->str, -1);
+  g_string_free (pTextString, TRUE);
+
+  pango_layout_get_extents (pLayout, NULL, &logicalRect);
+  iAdvanceWidth = logicalRect.width / PANGO_SCALE;
+
+  /* draw pango-text as path to our cairo-context */
+  pango_cairo_layout_path (pContext, pLayout);
+
+  /* clean up */
+  g_object_unref (pLayout);
+
+  return iAdvanceWidth;
+}
+
+static gboolean
+on_expose (GtkWidget* widget, GdkEventExpose* pEvent, gpointer data)
+{
+  CheeseCountdownPrivate* priv = CHEESE_COUNTDOWN_GET_PRIVATE (widget);
+  cairo_t*  pContext = NULL;
+  gdouble   fWidth   = (gdouble) widget->allocation.width;
+  gdouble   fHeight  = (gdouble) widget->allocation.height;
+  gint      iOffsetX = (widget->allocation.width - 4 * 24) / 2;
+  gint      iOffsetY = (widget->allocation.height - 30) / 2;
+  gdouble   fAlpha1;
+  gdouble   fAlpha2;
+  gdouble   fAlpha3;
+  gdouble   fAlphaClick;
+
+  /* deal with the timing stuff */
+  if (priv->iState == STATE_3)
+    fAlpha3 = 1.0f;
+  else
+    fAlpha3 = 0.5f;
+  if (priv->iState == STATE_2)
+    fAlpha2 = 1.0f;
+  else
+    fAlpha2 = 0.5f;
+  if (priv->iState == STATE_1)
+    fAlpha1 = 1.0f;
+  else
+    fAlpha1 = 0.5f;
+  if (priv->iState == STATE_SMILE)
+    fAlphaClick = 1.0f;
+  else
+    fAlphaClick = 0.5f;
+
+  /* clear drawing-context */
+  pContext = gdk_cairo_create (widget->window);
+  cairo_set_operator (pContext, CAIRO_OPERATOR_CLEAR);
+  cairo_paint (pContext);
+  cairo_set_operator (pContext, CAIRO_OPERATOR_OVER);
+
+  /* set the clipping-rectangle */
+  cairo_rectangle (pContext, 0.0f, 0.0f, fWidth, fHeight);
+  cairo_clip (pContext);
+
+  /* draw the red-ish background */
+  /* glossy version */
+  /*
+  cairo_set_source_rgba (pContext, 1.0f, 0.5f, 0.5f, 1.0f);
+  cairo_rectangle (pContext, 0.0f, 0.0f, fWidth, fHeight);
+  cairo_fill (pContext);
+  cairo_set_source_rgba (pContext, 1.0f, 0.25f, 0.25f, 1.0f);
+  cairo_rectangle (pContext, 0.0f, fHeight / 2.0f, fWidth, fHeight / 2.0f);
+  cairo_fill (pContext);
+  */
+  /* plain version */
+  cairo_set_source_rgba (pContext, 1.0f, 0.25f, 0.25f, 1.0f);
+  cairo_rectangle (pContext, 0.0f, 0.0f, fWidth, fHeight);
+  cairo_fill (pContext);
+
+  /* draw the 3 */
+  cairo_set_source_rgba (pContext, 1.0f, 1.0f, 1.0f, fAlpha3);
+  cairo_move_to (pContext, (gdouble) iOffsetX, (gdouble) iOffsetY);
+  iOffsetX += do_text (pContext,
+           "3 ",
+           24 * PANGO_SCALE,
+           "Bitstream Charter",
+           PANGO_WEIGHT_BOLD,
+           PANGO_STYLE_NORMAL);
+  cairo_fill (pContext);
+
+  /* draw the 2 */
+  cairo_set_source_rgba (pContext, 1.0f, 1.0f, 1.0f, fAlpha2);
+  cairo_move_to (pContext, (gdouble) iOffsetX, (gdouble) iOffsetY);
+  iOffsetX += do_text (pContext,
+           "2 ",
+           24 * PANGO_SCALE,
+           "Bitstream Charter",
+           PANGO_WEIGHT_BOLD,
+           PANGO_STYLE_NORMAL);
+  cairo_fill (pContext);
+
+  /* draw the 1 */
+  cairo_set_source_rgba (pContext, 1.0f, 1.0f, 1.0f, fAlpha1);
+  cairo_move_to (pContext, (gdouble) iOffsetX, (gdouble) iOffsetY);
+  iOffsetX += do_text (pContext,
+           "1 ",
+           24 * PANGO_SCALE,
+           "Bitstream Charter",
+           PANGO_WEIGHT_BOLD,
+           PANGO_STYLE_NORMAL);
+  cairo_fill (pContext);
+
+  /* draw the camera */
+  cairo_set_source_surface (pContext,
+          priv->pSurface,
+          (gdouble) iOffsetX,
+          (gdouble) iOffsetY);
+  cairo_paint_with_alpha (pContext, fAlphaClick);
+
+  cairo_destroy (pContext);
+
+  return FALSE;
+}
+
+static gboolean
+redraw_handler (gpointer data)
+{
+  GtkWidget* widget = (GtkWidget*) data;
+
+  gtk_widget_queue_draw (widget);
+  return TRUE;
+}
+
+static cairo_surface_t*
+create_surface_from_svg (gchar* pcFilename)
+{
+  cairo_surface_t*  pSurface   = NULL;
+  RsvgHandle*       pSvgHandle = NULL;
+  GError*           pError     = NULL;
+  RsvgDimensionData dimension;
+  cairo_t*          pContext   = NULL;
+
+  rsvg_init ();
+
+  /* load svg-file from disk */
+  pSvgHandle = rsvg_handle_new_from_file (pcFilename, &pError);
+  if (!pSvgHandle)
+  {
+    g_print ("Could not load file %s!\n", pcFilename);
+    return NULL;
+  }
+
+  /* get size of svg */
+  rsvg_handle_get_dimensions (pSvgHandle, &dimension);
+
+  /* create a surface-buffer */
+  pSurface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+                 dimension.width,
+                 dimension.height);
+  if (cairo_surface_status (pSurface) != CAIRO_STATUS_SUCCESS)
+  {
+    g_print ("Could not create surface for svg-icon!\n");
+    return NULL;
+  }
+
+  /* create a temporary drawing-context */
+  pContext = cairo_create (pSurface);
+  if (cairo_status (pContext) != CAIRO_STATUS_SUCCESS)
+  {
+    g_print ("Could not create temp drawing-context!\n");
+    return NULL;
+  }
+
+  /* clear that context */
+  cairo_set_source_rgba (pContext, 1.0f, 1.0f, 1.0f, 0.0f);
+  cairo_set_operator (pContext, CAIRO_OPERATOR_OVER);
+  cairo_paint (pContext);
+
+  /* draw icon into surface-buffer */
+  rsvg_handle_render_cairo (pSvgHandle, pContext);
+
+  /* clean up */
+  rsvg_handle_free (pSvgHandle);
+  rsvg_term ();
+  cairo_destroy (pContext);
+
+  return pSurface;
+}
+
+static gboolean
+cheese_countdown_cb (gpointer countdown)
+{
+  CheeseCountdownPrivate* priv = CHEESE_COUNTDOWN_GET_PRIVATE (countdown);
+  if (priv->iState == STATE_OFF)
+  {
+    // should just ignore it, testing purposes
+    g_print("Should not happen, unitialized state in countdown handler\n");
+  }
+  else if (priv->iState == STATE_3)
+  {
+    priv->iState = STATE_2;
+  }
+  else if (priv->iState == STATE_2)
+  {
+    priv->iState = STATE_1;
+  }
+  else if (priv->iState == STATE_1)
+  {
+    priv->iState = STATE_SMILE;
+    if (priv->callback != NULL) (priv->callback)(priv->callback_data, FALSE);
+  }
+  else if (priv->iState == STATE_SMILE)
+  {
+    priv->iState = STATE_OFF;
+    if (priv->callback != NULL) (priv->callback)(priv->callback_data, TRUE);
+    return FALSE;
+  }
+  return TRUE;
+}
+
+void
+cheese_countdown_start (CheeseCountdown *countdown, t_cheese_countdown_cb cb, gpointer data)
+{
+  CheeseCountdownPrivate* priv = CHEESE_COUNTDOWN_GET_PRIVATE (countdown);
+  if (priv->iState != STATE_OFF)
+  {
+    g_print ("Should not happen, state is not off.\n");
+  }
+  priv->iState = STATE_3;
+  priv->callback = cb;
+  priv->callback_data = data;
+  g_timeout_add_seconds (1, cheese_countdown_cb, (gpointer) countdown);
+}
+
+static void
+cheese_countdown_finalize (GObject *object)
+{
+  G_OBJECT_CLASS (cheese_countdown_parent_class)->finalize (object);
+}
+
+static void
+cheese_countdown_class_init (CheeseCountdownClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  object_class->finalize = cheese_countdown_finalize;
+
+  g_type_class_add_private (klass, sizeof (CheeseCountdownPrivate));
+}
+
+static void
+cheese_countdown_init (CheeseCountdown *countdown)
+{
+  CheeseCountdownPrivate* priv = CHEESE_COUNTDOWN_GET_PRIVATE (countdown);
+
+  /* create/load svg-icon */
+  priv->pSurface = create_surface_from_svg (PACKAGE_DATADIR "/pixmaps/camera-icon.svg");
+  priv->iState = STATE_OFF;
+  priv->callback = NULL;
+
+  g_signal_connect (G_OBJECT (countdown), "expose-event",
+        G_CALLBACK (on_expose), NULL);
+
+  g_timeout_add (100, redraw_handler, (gpointer) countdown);
+}
+
+GtkWidget * 
+cheese_countdown_new ()
+{
+  CheeseCountdown *countdown;
+  countdown = g_object_new (CHEESE_TYPE_COUNTDOWN, NULL);  
+
+  return GTK_WIDGET (countdown);
+}

Added: trunk/src/cheese-countdown.h
==============================================================================
--- (empty file)
+++ trunk/src/cheese-countdown.h	Mon Jan 14 14:28:40 2008
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2008 Mirco "MacSlow" MÃller <macslow bangang de>
+ * Copyright (C) 2007 daniel g. siegel <dgsiegel gmail com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __CHEESE_COUNTDOWN_H__
+#define __CHEESE_COUNTDOWN_H__
+
+G_BEGIN_DECLS
+
+#define CHEESE_TYPE_COUNTDOWN              (cheese_countdown_get_type ())
+#define CHEESE_COUNTDOWN(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), CHEESE_TYPE_COUNTDOWN, CheeseCountdown))
+#define CHEESE_COUNTDOWN_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass),  CHEESE_TYPE_COUNTDOWN, CheeseCountdownClass))
+#define CHEESE_IS_COUNTDOWN(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CHEESE_TYPE_COUNTDOWN))
+#define CHEESE_IS_COUNTDOWN_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass),  CHEESE_TYPE_COUNTDOWN))
+#define CHEESE_COUNTDOWN_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj),  CHEESE_TYPE_COUNTDOWN, CheeseCountdownClass))
+
+typedef struct 
+{
+  GtkDrawingArea parent;
+} CheeseCountdown;
+
+typedef struct 
+{
+  GtkDrawingAreaClass parent_class;
+} CheeseCountdownClass;
+
+typedef void (*t_cheese_countdown_cb) (gpointer data, gboolean hide);
+
+GType              cheese_countdown_get_type (void);
+GtkWidget         *cheese_countdown_new ();
+
+void cheese_countdown_start (CheeseCountdown *countdown, t_cheese_countdown_cb cb, gpointer data);
+
+G_END_DECLS
+
+#endif /* __CHEESE_COUNTDOWN_H__ */

Modified: trunk/src/cheese-window.c
==============================================================================
--- trunk/src/cheese-window.c	(original)
+++ trunk/src/cheese-window.c	Mon Jan 14 14:28:40 2008
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2007 daniel g. siegel <dgsiegel gmail com>
  * Copyright (C) 2007 Jaap Haitsma <jaap haitsma org>
+ * Copyright (C) 2008 Patryk Zawadzki <patrys pld-linux org>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -35,13 +36,14 @@
 #include <libebook/e-book.h>
 #include <glade/glade.h>
 
+#include "cheese-countdown.h"
 #include "cheese-effect-chooser.h"
 #include "cheese-fileutil.h"
 #include "cheese-gconf.h"
 #include "cheese-thumb-view.h"
 #include "cheese-window.h"
-#include "gst-audio-play.h"
 #include "ephy-spinner.h"
+#include "gst-audio-play.h"
 
 #define GLADE_FILE PACKAGE_DATADIR"/cheese.glade"
 #define UI_FILE PACKAGE_DATADIR"/cheese-ui.xml"
@@ -69,6 +71,7 @@
 
   GtkWidget *window;
   GtkWidget *notebook;
+  GtkWidget *notebook_bar;
 
   GtkWidget *main_vbox;
 
@@ -76,6 +79,8 @@
   GtkWidget *effect_chooser;
   GtkWidget *throbber_frame;
   GtkWidget *throbber;
+  GtkWidget *countdown_frame;
+  GtkWidget *countdown;
 
   GtkWidget *button_effects;
   GtkWidget *button_photo;
@@ -767,19 +772,20 @@
 
 }
 
-static void
-cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_window)
+void
+cheese_window_countdown_cb (gpointer data, gboolean hide)
 {
-  char *str;
-
-  if (cheese_window->webcam_mode == WEBCAM_MODE_PHOTO)
+  CheeseWindow *cheese_window = (CheeseWindow *) data;
+  if (hide)
+  {
+    gtk_notebook_set_current_page(GTK_NOTEBOOK(cheese_window->notebook_bar), 0);
+  }
+  else
   {
     GError *error = NULL;
     GstAudioPlay *audio_play;
     char *file;
 
-    gtk_widget_set_sensitive (cheese_window->take_picture, FALSE);
-
     file = audio_play_get_filename (cheese_window);
     audio_play = gst_audio_play_file (file, &error);
     if (!audio_play) 
@@ -793,6 +799,21 @@
     cheese_window->photo_filename = cheese_fileutil_get_new_media_filename (WEBCAM_MODE_PHOTO);
     cheese_webcam_take_photo (cheese_window->webcam, cheese_window->photo_filename);
   }
+}
+
+static void
+cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_window)
+{
+  char *str;
+
+  if (cheese_window->webcam_mode == WEBCAM_MODE_PHOTO)
+  {
+    cheese_countdown_start((CheeseCountdown *) cheese_window->countdown, cheese_window_countdown_cb, (gpointer) cheese_window);
+    gtk_notebook_set_current_page (GTK_NOTEBOOK(cheese_window->notebook_bar), 1);
+
+    gtk_widget_set_sensitive (cheese_window->take_picture, FALSE);
+    // FIXME: set menu inactive
+  }
   else if (cheese_window->webcam_mode == WEBCAM_MODE_VIDEO)
   {
     if (!cheese_window->recording)
@@ -957,6 +978,7 @@
   cheese_window->label_video         = glade_xml_get_widget (gxml, "label_video");
   cheese_window->main_vbox           = glade_xml_get_widget (gxml, "main_vbox");
   cheese_window->notebook            = glade_xml_get_widget (gxml, "notebook");
+  cheese_window->notebook_bar        = glade_xml_get_widget (gxml, "notebook_bar");
   cheese_window->screen              = glade_xml_get_widget (gxml, "video_screen");
   cheese_window->take_picture        = glade_xml_get_widget (gxml, "take_picture");
 
@@ -970,9 +992,7 @@
   gtk_container_add (GTK_CONTAINER (cheese_window->thumb_scrollwindow), cheese_window->thumb_view);
 
   char *gconf_effects;
-  g_object_get (cheese_window->gconf,
-               "gconf_prop_selected_effects", &gconf_effects,
-               NULL);
+  g_object_get (cheese_window->gconf, "gconf_prop_selected_effects", &gconf_effects, NULL);
   cheese_window->effect_frame        = glade_xml_get_widget (gxml, "effect_frame");
   cheese_window->effect_chooser      = cheese_effect_chooser_new (gconf_effects);
   gtk_container_add (GTK_CONTAINER (cheese_window->effect_frame), cheese_window->effect_chooser);
@@ -984,6 +1004,11 @@
   gtk_container_add (GTK_CONTAINER (cheese_window->throbber_frame), cheese_window->throbber);
   gtk_widget_show (cheese_window->throbber);
 
+  cheese_window->countdown_frame      = glade_xml_get_widget (gxml, "countdown_frame");
+  cheese_window->countdown            = cheese_countdown_new ();
+  gtk_container_add (GTK_CONTAINER (cheese_window->countdown_frame), cheese_window->countdown);
+  gtk_widget_show (cheese_window->countdown);
+
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cheese_window->button_photo), TRUE);
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cheese_window->button_video), FALSE);
 

Modified: trunk/src/wscript_build
==============================================================================
--- trunk/src/wscript_build	(original)
+++ trunk/src/wscript_build	Mon Jan 14 14:28:40 2008
@@ -15,8 +15,8 @@
 obj.includes='.'
 obj.uselib='''GLIB GOBJECT GTK LIBGLADE GDK HAL
               GSTREAMER GSTREAMER_PLUGINS_BASE 
-              GNOME_VFS CAIRO LIBGNOMEUI LIBEBOOK
-              XXF86VM'''
+              GNOME_VFS CAIRO PANGOCAIRO LIBRSVG
+              LIBGNOMEUI LIBEBOOK XXF86VM'''
 
 obj.target='cheese'
 

Modified: trunk/wscript
==============================================================================
--- trunk/wscript	(original)
+++ trunk/wscript	Mon Jan 14 14:28:40 2008
@@ -36,9 +36,11 @@
 	conf.check_pkg('gobject-2.0', destvar='GOBJECT', vnum='2.12.0', mandatory=True)
 	conf.check_pkg('glib-2.0', destvar='GLIB', vnum='2.12.1', mandatory=True)
 	conf.check_pkg('cairo', destvar='CAIRO', vnum='1.4.0', mandatory=True)
+	conf.check_pkg('pangocairo', destvar='PANGOCAIRO', vnum='1.18.0', mandatory=True)
 	conf.check_pkg('gdk-2.0', destvar='GDK', vnum='2.12.0', mandatory=True)
 	conf.check_pkg('gtk+-2.0', destvar='GTK', vnum='2.10.0', mandatory=True)
 	conf.check_pkg('libglade-2.0', destvar='LIBGLADE', vnum='2.0.0', mandatory=True)
+	conf.check_pkg('librsvg-2.0', destvar='LIBRSVG', vnum='2.18.0', mandatory=True)
 	conf.check_pkg('hal', destvar='HAL', vnum='0.5.0', mandatory=True)
 	conf.check_pkg('gstreamer-0.10', destvar='GSTREAMER', vnum='0.10.15', mandatory=True)
 	conf.check_pkg('gstreamer-plugins-base-0.10', destvar='GSTREAMER_PLUGINS_BASE', vnum='0.10.15', mandatory=True)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]